

# 发布 HTTP API 供客户调用
<a name="http-api-publish"></a>

您可以使用阶段和自定义域名发布 API 以供客户端调用。

一个 API 阶段是对您 API 生命周期状态（例如，`dev`、`prod`、`beta` 或 `v2`）的一次逻辑引用。每个阶段都是一个对 API 部署的命名引用，可供客户端应用程序调用。您可以为 API 的每个阶段配置不同的集成和设置。

您可以使用自定义域名来提供比默认 URL `https://api-id.execute-api.region.amazonaws.com/stage` 更简单、更直观的 URL，以供客户端调用 API。

**注意**  
为了增强您的 API Gateway API 的安全性，将在[公共后缀列表 (PSL)](https://publicsuffix.org/) 中注册 `execute-api.{region}.amazonaws.com` 域。为进一步增强安全性，如果您需要在 API Gateway API 的默认域名中设置敏感 Cookie，我们建议您使用带 `__Host-` 前缀的 Cookie。这将有助于保护您的域，防范跨站点请求伪造 (CSRF) 攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

**Topics**
+ [针对 API Gateway 中 HTTP API 的阶段](http-api-stages.md)
+ [API Gateway 中的 HTTP API 的安全策略](http-api-ciphers.md)
+ [API Gateway 中的 HTTP API 的自定义域名](http-api-custom-domain-names.md)

# 针对 API Gateway 中 HTTP API 的阶段
<a name="http-api-stages"></a>

一个 API 阶段是对您 API 生命周期状态（例如，`dev`、`prod`、`beta` 或 `v2`）的一次逻辑引用。API 阶段通过 API ID 和阶段名称标识，包含在您用于调用 API 的 URL 中。每个阶段都是一个对 API 部署的命名引用，可供客户端应用程序调用。

您可以创建一个 `$default` 阶段，该阶段可以从 API 的 URL 的基本部分得出 — 例如 `https://{api_id}.execute-api.{region}.amazonaws.com/`。您可以使用此 URL 调用 API 阶段。

部署是 API 配置的快照。将 API 部署到阶段后，客户端可以调用该 API。您必须部署 API 才能使更改生效。如果启用自动部署，则会自动为您发布对 API 的更改。

# 对 API Gateway 中的 HTTP API 使用阶段变量
<a name="http-api-stages.stage-variables"></a>

阶段变量是您可以为 HTTP API 的阶段定义的键/值对。它们与环境变量的功能类似，可用于 API 设置。

阶段变量不适用于敏感数据，例如凭证。要将敏感数据传递给集成，请使用 AWS Lambda 授权方。您可以在 Lambda 授权方的输出中将敏感数据传递给集成。要了解更多信息，请参阅“[Lambda 授权方响应格式](http-api-lambda-authorizer.md#http-api-lambda-authorizer.payload-format-response)”。

## 示例 – 使用阶段变量自定义 HTTP 集成端点
<a name="http-api-stages.stage-variables-examples"></a>

例如，您可以定义阶段变量，然后将其值设置为某个 HTTP 代理集成的 HTTP 端点。稍后，您可以使用关联的阶段变量名称引用端点。通过执行此操作，您可以在各个阶段对不同端点使用相同的 API 设置。同样，您可以使用阶段变量，为 API 的各个阶段指定不同的 AWS Lambda 函数集成。

要使用阶段变量自定义 HTTP 集成端点，您必须首先设置阶段变量的名称和值（例如 `url`，值为 `example.com`）。接下来，设置 HTTP 代理集成。您可以告知 API Gateway 使用阶段变量值 **http://\$1\$1stageVariables.url\$1**，而不是输入端点的 URL。此值将指示 API Gateway 在运行时替换您的阶段变量 `${}`，具体取决于 API 所处的阶段。

您可以通过类似的方式引用阶段变量，用于指定 Lambda 函数名称或AWS角色 ARN。

将 Lambda 函数名称指定为阶段变量值时，您必须手动配置对 Lambda 函数的权限。以下 [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) 命令配置 Lambda 函数的权限：

```
aws lambda add-permission --function-name arn:aws:lambda:XXXXXX:your-lambda-function-name --source-arn arn:aws:execute-api:us-east-1:YOUR_ACCOUNT_ID:api_id/*/HTTP_METHOD/resource --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction
```

# API Gateway 中的 HTTP API 的 API Gateway 阶段变量引用
<a name="http-api-stages.stage-variables-reference"></a>

在以下情况下，您可以对 HTTP API 使用 API Gateway 阶段变量。

## HTTP 集成 URI
<a name="http-api-stages.stage-variables-in-integration-HTTP-uris"></a>

您可将阶段变量用作 HTTP 集成 URI 的一部分，如以下示例所示。
+ 不带协议的完整 URI – `http://${stageVariables.<variable_name>}`
+ 完整域 – `http://${stageVariables.<variable_name>}/resource/operation`
+ 子域 – `http://${stageVariables.<variable_name>}.example.com/resource/operation`
+ 路径 – `http://example.com/${stageVariables.<variable_name>}/bar`
+ 查询字符串 – `http://example.com/foo?q=${stageVariables.<variable_name>}` 

## Lambda 函数
<a name="http-api-stages.stage-variables-in-integration-lambda-functions"></a>

 您可以使用阶段变量代替 Lambda 函数集成名称或别名，如以下示例所示。
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations`
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations`

**注意**  
要将阶段变量用于 Lambda 函数，该函数必须与 API 位于同一账户中。阶段变量不支持跨账户 Lambda 函数。

## AWS 集成凭证
<a name="http-api-stages.stage-variables-in-integration-aws-credentials"></a>

 您可以在 AWS 用户或角色凭证 ARN 中使用阶段变量，如以下示例所示。
+  `arn:aws:iam::<account_id>:${stageVariables.<variable_name>}` 

# API Gateway 中的 HTTP API 的安全策略
<a name="http-api-ciphers"></a>

API Gateway 对所有 HTTP API 端点强制执行 `TLS_1_2` 的安全策略。

*安全策略* 是 Amazon API Gateway 提供的最低 TLS 版本和密码套件的预定义组合。TLS 协议解决了网络安全问题，例如客户端和服务器之间的篡改和窃听。当您的客户端通过自定义域建立与您 API 的 TLS 握手时，安全策略实施客户端可以选择使用的 TLS 版本和密码套件选项。此安全策略接受 TLS 1.2 和 TLS 1.3 流量并拒绝 TLS 1.0 流量。

## HTTP API 支持的 TLS 协议和密码
<a name="http-api-ciphers-list"></a>

下表描述了 HTTP API 支持的 TLS 协议。


| **TLS 协议** | **TLS\$11\$10 安全策略** | 
| --- | --- | 
| TLSv1.3 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| TLSv1.2 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 

下表描述了适用于 HTTP API 的 TLS 1\$12 安全策略的 TLS 密码。


| **TLS 密码** | **TLS\$11\$10 安全策略** | 
| --- | --- | 
| TLS-AES-128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| TLS-AES-256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| TLS-CHACHA20-POLY1305-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-ECDSA-AES128- GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-RSA-AES128- GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-ECDSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-RSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-ECDSA-AES256- GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-RSA-AES256- GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-ECDSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| ECDHE-RSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 
| AES256-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/images/success_icon.svg) 是 | 

## OpenSSL 和 RFC 密码名称
<a name="apigateway-secure-connections-openssl-rfc-cipher-names-http"></a>

OpenSSL 和 IETF RFC 5246 为相同的密码使用不同的名称。有关密码名称的列表，请参阅[OpenSSL 和 RFC 密码名称](apigateway-security-policies-list.md#apigateway-secure-connections-openssl-rfc-cipher-names)。

## 有关 REST API 和 WebSocket API 的信息
<a name="apigateway-http-additional-apis"></a>

有关 REST API 和 WebSocket API 的更多信息，请参阅[选择针对 API Gateway 中自定义域的安全策略](apigateway-custom-domain-tls-version.md)和[针对 API Gateway 中的 WebSocket API 的安全策略](websocket-api-ciphers.md)。

# API Gateway 中的 HTTP API 的自定义域名
<a name="http-api-custom-domain-names"></a>

*自定义域名* 是您可以提供给 API 用户的更简单、更直观的 URL。

部署 API 后，您（和您的客户）可以使用以下格式的默认基本 URL 调用 API：

```
https://api-id.execute-api.region.amazonaws.com/stage
```

其中 *api-id* 由 API Gateway 生成，*region* 是 AWS 区域，*stage* 由您在部署 API 时指定。

URL 的主机名部分（即 `api-id.execute-api.region.amazonaws.com`）是指 API 端点。默认 API 端点名称是随机生成的，难以重新调用，对用户不友好。

使用自定义域名，您可以设置 API 的主机名，并选择基本路径（例如 `myservice`）以将备用 URL 映射到 API。例如，一个更为用户友好的 API 基本 URL 可以变成：

```
https://api.example.com/myservice
```

## 注意事项
<a name="http-api-custom-domain-name-considerations"></a>

以下注意事项可能会影响您对自定义域名的使用。
+ 区域自定义域名可以与 REST API 和 HTTP API 相关联。您可以使用 API Gateway 版本 2 API 为 REST API 创建和管理区域自定义域名。
+ 对于最低 TLS 版本，仅支持 TLS 1.2。
+ 您必须创建或更新 DNS 提供程序的资源记录以映射到您的 API 端点。如果没有此类映射，针对自定义域名的 API 请求无法到达 API Gateway。
+ 您可以使用通配符证书，在不超过默认配额的情况下支持几乎无限数量的域名。有关更多信息，请参阅 [通配符自定义域名](#http-wildcard-custom-domain-names)。

## 先决条件
<a name="http-api-custom-domain-names-prerequisites"></a>

以下是创建自定义域名的先决条件：

### 注册域名
<a name="http-api-custom-domain-names-register"></a>

您必须拥有已注册的 Internet 域名，以便为 API 设置自定义域名。您可以使用 [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/) 或使用您选择的第三方域注册商注册互联网域名。自定义域名可以是注册的互联网域的子域或根域（也称为“机构根网域”）名称。

域名必须遵循 [RFC 1035](https://tools.ietf.org/html/rfc1035#section-2.3.4) 规范，每个标签最多可以有 63 个八位字节，总共可以有 255 个八位字节。

### 自定义域名的证书
<a name="http-api-custom-domain-names-certificates"></a>

为 API 设置自定义域名之前，您必须先在 ACM 中准备好 SSL/TLS 证书。如果 ACM 在您要创建自定义域名的 AWS 区域中不可用，您必须将证书导入到该区域的 API Gateway。

要导入 SSL/TLS 证书，您必须针对自定义域名提供 PEM 格式的 SSL/TLS 证书文本、其私有密钥和证书链。

存储在 ACM 中的每个证书均由其 ARN 标识。如果拥有 ACM 颁发的证书，那么您就无需担心公开任何敏感的证书详细信息，如私有密钥。要针对域名使用 AWS 托管的证书，您只需参考其 ARN 即可。

如果您的应用程序使用证书固定（有时称为 SSL 固定）来固定 ACM 证书，则在 AWS 续订证书后，应用程序可能无法连接到您的域。有关更多信息，请参阅《AWS Certificate Manager 用户指南》**中的[证书固定问题](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)。

## 通配符自定义域名
<a name="http-wildcard-custom-domain-names"></a>

使用通配符自定义域名，您可以在不超过[默认配额](limits.md)的情况下支持几乎无限数量的域名。例如，您可以为每位客户提供自己的域名 `customername.api.example.com`。

要创建通配符自定义域名，可以指定通配符 (`*`) 作为表示根域所有可能子域的自定义域的第一个子域。

例如，通配符自定义域名 `*.example.com` 会生成子域，如 `a.example.com`、`b.example.com` 和 `c.example.com`，这些子域都会路由到同一个域。

通配符自定义域名支持与 API Gateway 的标准自定义域名不同的配置。例如，在单个 AWS 账户中，您可以对 `*.example.com` 和 `a.example.com` 进行不同的配置。

要创建通配符自定义域名，您必须提供已使用 DNS 或电子邮件验证方法验证的由 ACM 颁发的证书。

**注意**  
如果其他 AWS 账户已经创建了与通配符自定义域名冲突的自定义域名，则无法创建通配符自定义域名。例如，如果账户 A 已经创建了 `a.example.com`，则账户 B 无法创建通配符自定义域名 `*.example.com`。  
如果账户 A 和账户 B 共享拥有者，您可以联系 [AWS Support 中心](https://console.aws.amazon.com/support/home#/)请求例外。

## 自定义域名的后续步骤
<a name="http-api-custom-domain-names-next-steps"></a>

要为 HTTP API 设置自定义域名，您可以使用《API Gateway 开发人员指南》中的“REST API”部分的文档。

首先，为自定义域名指定一个证书。有关更多信息，请参阅 [在 AWS Certificate Manager 中准备好证书](how-to-specify-certificate-for-custom-domain-name.md)。然后，创建一个区域性自定义域名。有关更多信息，请参阅 [在 API Gateway 中设置区域自定义域名](apigateway-regional-api-custom-domain-create.md)。

# 将 API 阶段映射到 HTTP API 的自定义域名
<a name="http-api-mappings"></a>

您可以使用 API 映射将 API 阶段连接到自定义域名。创建域名并配置 DNS 记录后，您可以使用 API 映射通过自定义域名向 API 发送流量。

API 映射指定了用于映射的 API、阶段以及可选的路径。例如，您可以将 API 的 `production` 阶段映射到 `https://api.example.com/orders`。

您可以将 HTTP 和 REST API 阶段映射到相同的自定义域名。

在创建 API 映射之前，您必须拥有 API、阶段和自定义域名。要了解有关创建自定义域名的更多信息，请参阅 [在 API Gateway 中设置区域自定义域名](apigateway-regional-api-custom-domain-create.md)。

## 路由 API 请求
<a name="http-api-mappings-evalutation"></a>

您可以使用多个级别配置 API 映射，例如 `orders/v1/items` 和 `orders/v2/items`。

对于具有多个级别的 API 映射，API Gateway 将请求路由到匹配路径最长的 API 映射。选择要调用的 API 时，API Gateway 仅考虑为 API 映射配置的路径，而不考虑 API 路由。如果没有与请求匹配的路径，API Gateway 会将请求发送到已映射到空路径 `(none)` 的 API。

对于使用具有多个级别的 API 映射的自定义域名，API Gateway 将请求路由到匹配前缀最长的 API 映射。

例如，考虑使用以下 API 映射的自定义域名 `https://api.example.com`：

1. `(none)` 映射到 API 1。

1. `orders` 映射到 API 2。

1. `orders/v1/items` 映射到 API 3。

1. `orders/v2/items` 映射到 API 4。

1. `orders/v2/items/categories` 映射到 API 5。


| 请求 | 选定的 API | 说明 | 
| --- | --- | --- | 
|  `https://api.example.com/orders`  |  `API 2`  |  请求完全匹配此 API 映射。  | 
|  `https://api.example.com/orders/v1/items`  |  `API 3`  |  请求完全匹配此 API 映射。  | 
|  `https://api.example.com/orders/v2/items`  |  `API 4`  |  请求完全匹配此 API 映射。  | 
|  `https://api.example.com/orders/v1/items/123`  |  `API 3`  |  API Gateway 选择匹配路径最长的映射。请求结尾处的 `123` 不影响选择。  | 
|  `https://api.example.com/orders/v2/items/categories/5`  |  `API 5`  |  API Gateway 选择匹配路径最长的映射。  | 
|  `https://api.example.com/customers`  |  `API 1`  |  API Gateway 使用空映射作为“捕获全部”。  | 
|  `https://api.example.com/ordersandmore`  |  `API 2`  |  API Gateway 选择匹配前缀最长的映射。 对于配置了单级映射的自定义域名（例如，仅 `https://api.example.com/orders` 和 `https://api.example.com/`），API Gateway 会选择 `API 1`，因为没有与 `ordersandmore` 匹配的路径。  | 

## 限制
<a name="http-api-mappings-restrictions"></a>
+ 在 API 映射中，自定义域名和映射的 API 必须位于同一个AWS账户中。
+ API 映射必须仅包含字母、数字和以下字符：`$-_.+!*'()/`。
+ API 映射中路径的最大长度为 300 个字符。
+ 每个域名可以有 200 个具有多个级别的 API 映射。此限制不包括单级的 API 映射，例如 `/prod`。
+ 您只能使用 TLS 1.2 安全策略将 HTTP API 映射到区域自定义域名。
+ 您不能将 WebSocket API 映射到与 HTTP API 或 REST API 相同的自定义域名。
+ 如果您创建具有多个级别的 API 映射，API Gateway 会将所有标头名称转换为小写。

## 创建 API 映射
<a name="http-api-mappings-examples"></a>

要创建 API 映射，您必须首先创建自定义域名、API 和阶段。有关使用自定义域名的更多信息，请参阅 [在 API Gateway 中设置区域自定义域名](apigateway-regional-api-custom-domain-create.md)。

例如，创建所有资源的 AWS Serverless Application Model 模板，请参阅 GitHub 上的[使用 SAM 的会话](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/custom-domains)。

------
#### [ AWS 管理控制台 ]

**创建 API 映射**

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

1. 选择**自定义域名**。

1. 选择您已经创建的自定义域名。

1. 选择 **API 映射**。

1. 选择 **Configure API mappings (配置 API 映射)**。

1. 选择 **Add new mapping (添加新映射)**。

1. 输入 **API**、**阶段**以及可选的**路径**。

1. 选择**保存**。

------
#### [ AWS CLI ]

使用以下 [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api.html) 命令创建 API 映射。在此示例中，API Gateway 将请求发送到 `api.example.com/v1/orders`，到指定的 API 和阶段。

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1/orders \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

以下 CloudFormation 示例会创建一个 API 映射。

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'orders/v2/items'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------

# 禁用 REST API 的默认端点
<a name="http-api-disable-default-endpoint"></a>

默认情况下，客户端可以通过使用 API Gateway 为 API 生成的 `execute-api` 端点来调用您的 API。为确保客户端只能通过使用自定义域名访问您的 API，请禁用默认 `execute-api` 端点。禁用默认端点时，它会影响 API 的所有阶段。

以下过程演示了如何禁用 HTTP API 的默认端点。

------
#### [ AWS 管理控制台 ]

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

1. 选择 HTTP API。

1. 选择 API 的 ID 以打开 **API 详细信息**页面。

1. 在 **API 详细信息**选项卡上，选择**编辑**。

1. 对于**默认端点**，选择**禁用**。

1. 选择**保存**。

   如果开启了阶段的自动部署，您无需重新部署 API 即可使更改生效。否则，您必须重新部署 API。

1. （可选）选择**部署**，然后重新部署您的 API 或创建一个新阶段使更改生效。

------
#### [ AWS CLI ]

以下 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 命令禁用 HTTP API 的默认端点：

```
aws apigatewayv2 update-api \
    --api-id abcdef123 \
    --disable-execute-api-endpoint
```

禁用默认端点后，除非启用了自动部署，否则必须部署 API 才能使更改生效。

下面的 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-deployment.html) 命令将创建一个部署。

```
aws apigatewayv2 create-deployment \
    --api-id abcdef123 \
    --stage-name dev
```

------

# HTTP API 的自定义域名的 IP 地址类型
<a name="http-api-custom-domain-names-ip-address-type"></a>

创建 API 时，您指定可以调用域的 IP 地址的类型。可以选择 IPv4 以解析 IPv4 地址来调用域，也可以选择双堆栈以同时支持 IPv4 和 IPv6 地址调用域。我们建议您将 IP 地址类型设置为双堆栈，以缓解 IP 空间耗尽或保护您的安全状况。有关双堆栈 IP 地址类型的优势的更多信息，请参阅 [IPv6 on AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html)。

## IP 地址类型的注意事项
<a name="http-ip-address-type-considerations"></a>

以下注意事项可能会影响您对 IP 地址类型的使用。
+ API Gateway 自定义域名的默认 IP 地址类型是 IPv4。
+ 对于映射到自定义域名的所有 API，自定义域名不需要具有相同的 IP 地址类型。如果您禁用默认 API 端点，则这可能会影响调用方调用 API 的方式。

## 更改自定义域名的 IP 地址类型
<a name="http-api-custom-domain-names-ip-address-type-change"></a>

您可以通过更新域的端点配置来更改 IP 地址类型。您可以使用 AWS 管理控制台、AWS CLI、CloudFormation 或 AWS SDK 更新域的端点配置。

------
#### [ AWS 管理控制台 ]

**更改自定义域名的 IP 地址类型**

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

1. 选择公有自定义域名。

1. 选择**端点配置**。

1. 对于 IP 地址类型，选择 **IPv4** 或**双堆栈**。

1. 选择**保存**。

------
#### [ AWS CLI ]

以下 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 命令将 API 更新为具有双堆栈 IP 地址类型：

```
aws apigatewayv2 update-domain-name \
   --domain-name dualstack.example.com \
   --domain-name-configurations CertificateArn=arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc,IpAddressType=dualstack
```

输出将与以下内容类似：

```
{
    "ApiMappingSelectionExpression": "$request.basepath",
    "DomainName": "dualstack.example.com",
    "DomainNameConfigurations": [
        {
            "ApiGatewayDomainName": "d-abcd1234.execute-api.us-east-1.amazonaws.com",
            "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc",
            "DomainNameStatus": "AVAILABLE",
            "EndpointType": "REGIONAL",
            "HostedZoneId": "Z3LQWSYCGH4ADY",
            "SecurityPolicy": "TLS_1_2",
            "IpAddressType": "dualstack"
        }
    ],
    "Tags": {}
}
```

------