在 API Gateway 中设置区域自定义域名 - Amazon API Gateway

在 API Gateway 中设置区域自定义域名

您可以为区域 API 终端节点(对于 AWS 区域)创建自定义域名。要创建自定义域名,您必须提供特定于区域的 ACM 证书。有关创建或上传自定义域名证书的更多信息,请参阅在 AWS Certificate Manager 中准备好证书

重要

对于 API Gateway 区域自定义域名,您必须在与 API 相同的区域中请求或导入证书。

在您创建(或迁移)包含 ACM 证书的区域自定义域名时,如果不存在服务相关角色,API Gateway 会在您的账户中创建一个这样的角色。需要使用服务相关角色,才能将 ACM 证书附加到您的区域终端节点。该角色名为 AWSServiceRoleForAPIGateway,将对其附加 APIGatewayServiceRolePolicy 托管策略。有关使用服务相关角色的更多信息,请参阅使用服务相关角色

重要

您必须创建将自定义域名指向区域域名的 DNS 记录。这使绑定到自定义域名的流量可以路由到 API 的区域主机名。DNS 记录可以是 CNAME 或“A”类型。

使用 API Gateway 控制台设置带 ACM 证书的区域自定义域名

要使用 API Gateway 控制台设置区域自定义域名,请使用以下过程。

使用 API Gateway 控制台设置区域自定义域名

  1. 通过 https://console.aws.amazon.com/apigateway 登录 API Gateway 控制台。

  2. 从主导航窗格中选择 Custom domain names (自定义域名)

  3. 选择创建

  4. 对于 Domain name (域名),输入一个域名。

  5. 在“Configuration (配置)”下,选择 Regional (区域)

  6. 选择最低 TLS 版本。

  7. 选择一个 ACM 证书。证书必须与 API 位于同一区域。

  8. 选择创建

  9. 按照 Route 53 文档中有关配置 Route 53 以将流量路由至 API Gateway 的说明操作。

以下过程设置 API 映射,将您的自定义域名的路径映射到 API 阶段。

使用 API Gateway 控制台创建 API 映射名称

  1. 通过 https://console.aws.amazon.com/apigateway 登录 API Gateway 控制台。

  2. 选择自定义域名。

  3. 选择 Configure API mappings (配置 API 映射)

  4. 选择 Add new mapping (添加新映射)

  5. 指定映射的 APIStage (阶段)Path (路径)

  6. 选择保存

要了解有关为自定义域设置基本路径映射的信息,请参阅配置 API 的基本路径映射,将自定义域名作为主机名

使用 AWS CLI 设置带 ACM 证书的区域自定义域名

要使用 AWS CLI 为区域 API 设置自定义域名,请使用以下过程。

  1. 调用 create-domain-name,并指定自定义域名和区域证书的 ARN。

    aws apigatewayv2 create-domain-name \ --domain-name 'regional.example.com' \ --domain-name-configurations CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678

    请注意,指定的证书来自 us-west-2 区域,在此示例中,我们假定底层 API 来自同一区域。

    如果成功,调用返回的结果类似于以下内容:

    { "ApiMappingSelectionExpression": "$request.basepath", "DomainName": "regional.example.com", "DomainNameConfigurations": [ { "ApiGatewayDomainName": "d-id.execute-api.us-west-2.amazonaws.com", "CertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/id", "DomainNameStatus": "AVAILABLE", "EndpointType": "REGIONAL", "HostedZoneId": "id", "SecurityPolicy": "TLS_1_2" } ] }

    DomainNameConfigurations 属性值返回区域 API 的主机名。您必须创建将您的自定义域名指向此区域域名的 DNS 记录。这使指向自定义域名的流量可以路由到该区域 API 的主机名。

  2. 创建将自定义域名与区域域名进行关联的 DNS 记录。这使指向到自定义域名的请求可以路由到 API 的区域主机名。

  3. 添加基本路径映射,以在部署阶段 (例如 0qzs2sy7bh) 在指定的自定义域名 (例如 test) 下公开指定的 API (例如 regional.example.com)。

    aws apigatewayv2 create-api-mapping \ --domain-name 'regional.example.com' \ --api-mapping-key 'myApi' \ --api-id 0qzs2sy7bh \ --stage 'test'

    这样,在此阶段部署的使用 API 的自定义域名的基本 URL 会变为 https://regional.example.com/myAPI

  4. 配置 DNS 记录,以将区域自定义域名映射到给定的托管区域 ID 的主机名。首先创建一个 JSON 文件,其中包含为区域域名设置 DNS 记录的配置。以下示例显示了如何创建 DNS A 记录,以将区域自定义域名 (regional.example.com) 映射到在创建自定义域名时为其预配置的区域主机名 (d-numh1z56v6.execute-api.us-west-2.amazonaws.com)。DNSNameHostedZoneIdAliasTarget 属性可分别采用自定义域名的 regionalDomainNameregionalHostedZoneId 值。您也可以在 Amazon API Gateway 终端节点和配额中获取区域 Route 53 托管区域 ID。

    { "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "regional.example.com", "Type": "A", "AliasTarget": { "DNSName": "d-numh1z56v6.execute-api.us-west-2.amazonaws.com", "HostedZoneId": "Z2OJLYMUO9EFXC", "EvaluateTargetHealth": false } } } ] }
  5. 运行以下 CLI 命令:

    aws route53 change-resource-record-sets \ --hosted-zone-id {your-hosted-zone-id} \ --change-batch file://path/to/your/setup-dns-record.json

    其中,{your-hosted-zone-id} 是您账户中的 DNS 记录集的 Route 53 托管区域 ID。change-batch 参数值指向文件夹 (path/to/your) 中的 JSON 文件 (setup-dns-record.json)。