API Gateway でリージョン別カスタムドメイン名を設定する - Amazon API Gateway

API Gateway でリージョン別カスタムドメイン名を設定する

リージョン別カスタムドメイン名を使用して、ユーザーフレンドリーな API ベース URL を作成します。リージョン別カスタムドメイン名を使用すると、HTTP API と REST API のステージを同じカスタムドメイン名にマッピングして相互 TLS 認証を使用できます。

考慮事項

リージョン別カスタムドメイン名に関する考慮事項は、以下のとおりです。

  • リージョン固有の ACM 証明書を指定する必要があります。この証明書は API と同じリージョンに存在する必要があります。カスタムドメイン名の証明書を作成またはアップロードする方法の詳細については、「AWS Certificate Manager で証明書を準備する」を参照してください。

  • ACM 証明書を使用してリージョン別カスタムドメイン名を作成 (または移行) すると、API Gateway はサービスにリンクされたロールをアカウント内に作成します。サービスにリンクされたロールは、ACM 証明書をリージョン別エンドポイントにアタッチするのに必要です。ロールの名前は AWSServiceRoleForAPIGateway です。また、管理ポリシーの APIGatewayServiceRolePolicy がアタッチされます。サービスにリンクされたロールの詳細な使用方法については、「サービスにリンクされたロールの使用」を参照してください。

  • リージョン別カスタムドメイン名の作成後、カスタムドメイン名をリージョン別ドメインに関連付ける DNS レコードを作成する必要があります。これにより、カスタムドメイン名にバインドされるトラフィックが、API のリージョン別ホスト名にルーティングされます。

    DNS レコードには、CNAME または A エイリアスレコードを使用できます。Route 53 を DNS プロバイダーとして使用する場合は、A エイリアスレコードを作成します。サードパーティーの DNS プロバイダーを使用する場合は、CNAME レコードを使用します。CNAME レコードを使用し、プライベート API に対してプライベート DNS を有効にした API Gateway インターフェイス VPC エンドポイントを作成した場合、プライベート API をホストしている VPC 内でカスタムドメイン名を解決できなくなります。

リージョン別カスタムドメイン名を作成する

次の手順では、リージョン別カスタムドメイン名を作成する方法を示します。この手順を完了したら、API のステージをカスタムドメイン名にルーティングするためのルーティングルールを作成します。

AWS Management Console
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。

  3. [Create] を選択します。

  4. [Domain name (ドメイン名)] には、ドメイン名を入力します。

  5. [ルーティングモード] では、[ルーティングルールのみ] を選択します。

    このルーティングモードでは、ルーティングルールを使用して、カスタムドメイン名から API にのみトラフィックを送信できます。詳細については、「API Gateway のカスタムドメイン名を使用して API にトラフィックを送信します。」を参照してください。

  6. [TLS の最小バージョン] で、バージョンを選択します。

  7. [エンドポイント設定] で、[API エンドポイントタイプ] として [リージョン] を選択します。

  8. ACM 証明書を選択します。証明書は API と同じリージョンに存在する必要があります。

  9. [作成] を選択します。

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 の 1 つのステージに作成します。異なるヘッダーとパスの条件に基づいてルーティングルールを設定することもできます。詳細については、「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 のドキュメントで「トラフィックを API Gateway にルーティングするように Route 53 を設定する」を参照してください。

AWS CLI

リージョン別カスタムドメイン名を特定のホストゾーン ID のホスト名にマッピングするように DNS レコードを設定するには、まずリージョン別ドメイン名の DNS レコードをセットアップするための設定を含む JSON ファイルを作成します。

次の setup-dns-record.json は、カスタムドメイン名の作成の一環としてプロビジョニングしたリージョン別ホスト名 (d-numh1z56v6.execute-api.us-west-2.amazonaws.com) にリージョン別カスタムドメイン名 (regional.example.com) をマッピングするための DNS レコードの作成方法を示しています。DNSNameHostedZoneId プロパティと AliasTarget プロパティは、カスタムドメイン名の regionalDomainNameregionalHostedZoneId の値をそれぞれ示しています。また、リージョン別 Route 53 ホストゾーン ID は、「Amazon API Gateway エンドポイントとクォータ」でも取得できます。

{ "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) を指しています。