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
https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。
-
メインのナビゲーションペインから [Custom Domain Names (カスタムドメイン名)] を選択します。
-
[Create] を選択します。
-
[Domain name (ドメイン名)] には、ドメイン名を入力します。
[ルーティングモード] では、[ルーティングルールのみ] を選択します。
このルーティングモードでは、ルーティングルールを使用して、カスタムドメイン名から API にのみトラフィックを送信できます。詳細については、「API Gateway のカスタムドメイン名を使用して API にトラフィックを送信します。」を参照してください。
-
[TLS の最小バージョン] で、バージョンを選択します。
-
[エンドポイント設定] で、[API エンドポイントタイプ] として [リージョン] を選択します。
-
ACM 証明書を選択します。証明書は API と同じリージョンに存在する必要があります。
-
[作成] を選択します。
- 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
API Gateway コンソール (https://console.aws.amazon.com/apigateway) にサインインします。
-
カスタムドメイン名を選択します。
-
[ルーティングの詳細] タブで、[ルーティングルールを追加] を選択します。
-
[新しい条件を追加] を選択して、新しい条件を追加します。
-
このルールを条件なしで保持します。これにより、カスタムドメイン名へのすべてのリクエストがターゲット API とターゲットステージにルーティングされます。
[アクション] では、ドロップダウンを使用してターゲット API とターゲットステージを選択します。
-
[次へ] を選択します。
優先度フィールドに、100
と入力します。
API Gateway は最小値から最大値までの優先順位でルールを評価します。これはキャッチオールルールであるため、API Gateway が最初に作成した追加のルールを照合できるように、高い優先度を使用します。
[ルーティングルールを作成] を選択します。
- 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 レコードの作成方法を示しています。DNSName
の HostedZoneId
プロパティと AliasTarget
プロパティは、カスタムドメイン名の regionalDomainName
と regionalHostedZoneId
の値をそれぞれ示しています。また、リージョン別 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
) を指しています。