在 API Gateway 中設定區域性自訂網域名稱 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 API Gateway 中設定區域性自訂網域名稱

使用區域性自訂網域名稱來建立易於使用的 API 基礎 URL。有了區域性自訂網域名稱,您就可以將 HTTP 和 REST API 階段映射至相同的自訂網域名稱,並使用相互 TLS 驗證。

考量

以下是區域自訂網域名稱的考量事項:

  • 您必須提供區域特定的 ACM 憑證。此憑證必須與您的 API 位於相同的區域。如需建立或上傳自訂網域名稱憑證的詳細資訊,請參閱「在 中備妥憑證 AWS Certificate Manager」。

  • 當您使用 ACM 憑證建立 (或遷移) 區域性自訂網域名稱,API Gateway 會在您的帳戶中建立服務連結角色。需要此服務連結角色,才能將您的 ACM 憑證附加至您的區域性端點。角色名為 AWSServiceRoleForAPIGateway,並會將 APIGatewayServiceRolePolicy 受管政策附加到該角色。如需使用服務連結角色的詳細資訊,請參閱使用服務連結角色

  • 建立區域自訂網域名稱之後,您必須建立 DNS 記錄,以便將自訂網域名稱指向區域網域。如此可讓繫結至自訂網域名稱的流量路由至 API 的區域性主機名稱。

    DNS 記錄可以是 CNAME 或 A Alias 記錄。如果您使用 Route 53 作為 DNS 供應商,請建立 A Alias 記錄。如果您使用第三方 DNS 供應商,請使用 CNAME 記錄。如果您使用 CNAME 記錄,並建立 API Gateway 介面 VPC 端點且為私有 API 啟用私有 DNS,則無法在託管您私有 API 的 VPC 內解析自訂網域名稱。

建立區域性自訂網域名稱

下列程序顯示如何建立區域性自訂網域名稱。完成此程序後,您會建立路由規則來將 API 的階段路由傳送至自訂網域名稱。

AWS Management Console
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 從主要導覽窗格中,選擇 Custom Domain Names (自訂網域名稱)

  3. 選擇 Create (建立)。

  4. Domain name (網域名稱) 中,輸入網域名稱。

  5. 對於路由模式,選擇僅限路由規則

    在此路由模式中,您只能使用路由規則將流量從自訂網域名稱傳送至 API。如需詳細資訊,請參閱在 API Gateway 中透過您的自訂網域名稱將流量傳送至 API

  6. 針對最低 TLS 版本,選取版本。

  7. 端點組態下,針對 API 端點類型,選擇區域性

  8. 選擇 ACM 憑證。憑證必須與 API 位於相同的區域。

  9. 選擇 Create (建立)。

AWS CLI

以下 create-domain-name 命令會建立自訂網域名稱:

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 \ --routing-mode ROUTING_RULE_ONLY

輸出將如下所示:

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

DomainNameConfigurations 屬性值會傳回區域性 API 的主機名稱。您必須建立 DNS 記錄,將您的自訂網域名稱指向此區域性網域名稱。如此可讓繫結至自訂網域名稱的流量路由至此區域性 API 的主機名稱。

為您的區域自訂網域名稱建立路由規則

建立自訂網域名稱後,您可以設定將流量從自訂網域名稱路由傳送至 API 的方式。由於您將路由模式設定為 ROUTING_RULE_ONLY,因此您會使用路由規則將自訂網域名稱的傳入請求路由傳送至您的 API。

在此範例中,您會建立全部擷取規則,以便將自訂網域名稱的所有傳入請求路由傳送至 API 的某一個階段。您也可以根據不同的標頭和路徑條件設定路由規則。如需詳細資訊,請參閱將 API 階段連線至 REST API 自訂網域名稱的路由規則

AWS Management Console
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 選擇自訂網域名稱。

  3. 路由詳細資訊索引標籤上,選擇新增路由規則

  4. 選擇新增條件以新增條件。

  5. 保留此規則且不設任何條件。這會將自訂網域名稱的所有請求路由傳送至您的目標 API 和目標階段。

  6. 針對動作,使用下拉式清單選取您的目標 API 和目標階段。

  7. 選擇下一步

  8. 在優先順序欄位中,輸入 100

    API Gateway 會依優先順序評估規則,從最低值到最高值。由於這是全部擷取規則,因此您會使用高優先順序讓 API Gateway 能夠比對您先建立的任何其他規則。

  9. 選擇建立路由規則

AWS CLI

以下 create-routing-rule 命令會建立全部擷取路由規則:

aws apigatewayv2 create-routing-rule \ --domain-name 'regional.example.com' \ --priority 100 \ --conditions \ --actions '[{ "InvokeApi": { "ApiId": "a1b2c3", "Stage": "prod" } }]'

您隨時可以變更路由模式並建立新規則。如需詳細資訊,請參閱在 API Gateway 中透過您的自訂網域名稱將流量傳送至 API

為您的區域性自訂網域名稱建立 DNS 記錄

建立自訂網域名稱和建立基本路徑映射後,您可以建立 DNS 記錄,將自訂網域名稱指向新建立的區域性網域名稱。

AWS Management Console

若要使用 AWS Management Console,請遵循 Route 53 文件設定 Route 53 將流量路由到 API Gateway

AWS CLI

若要設定您的 DNS 記錄,將區域性自訂網域名稱映射至指定託管區域 ID 的主機名稱,請先建立 JSON 檔案,其中包含設定區域性網域名稱 DNS 記錄的組態。

下列 setup-dns-record.json 顯示如何建立 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 } } } ] }

以下 change-resource-record-sets 會為您的區域自訂網域名稱建立 DNS 記錄:

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

hosted-zone-id 取代為您帳戶中所設定之 DNS 記錄的 Route 53 託管區域 ID。change-batch 參數值會指向資料夾 (path/to/your) 中的 JSON 檔案 (setup-dns-record.json)。