

# 在 API Gateway 中更改公有或私有 API 端点类型
<a name="apigateway-api-migration"></a>

更改 API 端点类型要求您更新 API 的配置。您可以使用 API Gateway 控制台、AWS CLI 或适用于 API Gateway 的AWS开发工具包更改现有 API 类型。端点类型无法再次进行更改，直到当前更改完成，但您的 API 将可用。

支持以下端点类型更改：
+ 从边缘优化到区域或私有
+ 从区域到边缘优化或私有
+ 从私有到区域

您不能将私有 API 更改为边缘优化的 API。

如果您正在将公有 API 从边缘优化更改为区域（或反之），请注意边缘优化 API 可能与区域 API 具有不同的行为。例如，边缘优化的 API 删除 `Content-MD5` 标头。传递到后端的任意 MD5 哈希值可以表示在请求字符串参数或正文属性中。但是，区域 API 会传递此标头映射，虽然它可能会将标头名称重新映射到某个其它名称。了解区别有助于您决定如何将边缘优化的 API 更新为区域 API，或者从区域 API 更新为边缘优化的 API。

**Topics**
+ [使用 API Gateway 控制台更改 API 端点类型](#migrate-api-using-console)
+ [使用 AWS CLI 更改 API 端点类型](#migrate-api-using-aws-cli)

## 使用 API Gateway 控制台更改 API 端点类型
<a name="migrate-api-using-console"></a>

要更改 API 的 API 端点类型，请执行以下步骤：

**将一个公有端点从区域转换为边缘优化（以及反之）**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 选择一个 REST API。

1. 选择 **API 设置**。

1. 在 **API 详细信息**部分中，选择**编辑**。

1. 对于 **API 端点类型**，选择**边缘优化**或**区域**。

1. 选择**保存更改**。

1. 重新部署您的 API，以使更改生效。

**将私有端点转换为区域端点**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 选择一个 REST API。

1. 编辑 API 的资源策略以删除对 VPC 或 VPC 端点的任何提及，以便 API 从您的 VPC 之外以及在您的 VPC 之内进行的调用成功。

1. 选择 **API 设置**。

1. 在 **API 详细信息**部分中，选择**编辑**。

1. 对于 **API 端点类型**，选择**区域**。

1. 选择**保存更改**。

1. 从 API 中删除资源策略。

1. 重新部署您的 API，以使更改生效。

   由于您要将端点类型从私有迁移到区域，因此 API Gateway 会将 IP 地址类型更改为 IPv4。有关更多信息，请参阅 [API Gateway 中 REST API 的 IP 地址类型](api-gateway-ip-address-type.md)。

**将区域端点转换为私有端点**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 选择一个 REST API。

1. 创建资源策略来授予对您的 VPC 或 VPC 端点的访问权限。有关更多信息，请参阅 [步骤 3：为私有 API 设置资源策略](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)。

1. 选择 **API 设置**。

1. 在 **API 详细信息**部分中，选择**编辑**。

1. 对于 **API 端点类型**，选择**私有**。

1. （可选）对于 **VPC 端点 ID**，选择您要与私有 API 关联的 VPC 端点 ID。

1. 选择**保存更改**。

1. 重新部署您的 API，以使更改生效。

   由于您要将端点类型从区域迁移到私有，因此 API Gateway 会将 IP 地址类型更改为双堆栈。有关更多信息，请参阅 [API Gateway 中 REST API 的 IP 地址类型](api-gateway-ip-address-type.md)。

## 使用 AWS CLI 更改 API 端点类型
<a name="migrate-api-using-aws-cli"></a>

使用以下 [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) 命令将边缘优化的 API 更新为区域 API：

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/EDGE,value=REGIONAL
```

成功的响应包含 `200 OK` 状态代码以及与以下类似的负载：

```
{
    "createdDate": "2017-10-16T04:09:31Z",
    "description": "Your first API with Amazon API Gateway. This is a sample API that integrates via HTTP with our demo Pet Store endpoints",
    "endpointConfiguration": {
        "types": "REGIONAL"
    },
    "id": "a1b2c3",
    "name": "PetStore imported as edge-optimized"
}
```

使用以下 [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) 命令将区域 API 更新为边缘优化的 API：

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/REGIONAL,value=EDGE
```

由于 [put-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-rest-api.html) 用于更新 API 定义，因此它不适用于更新 API 端点类型。