メニュー
Amazon API Gateway
開発者ガイド

API Gateway でリージョン別 API 用のカスタムドメイン名をセットアップする

エッジ最適化 API エンドポイントを使用すると、リージョン別 API エンドポイント用にカスタムドメイン名を作成できます。リージョン別カスタムドメイン名をサポートするには、証明書を提供する必要があります。AWS Certificate Manager (ACM) 証明書を使用する場合は、リージョン固有のものである必要があります。ACM が利用可能なリージョンの場合は、リージョン固有の ACM 証明書を提供する必要があります。ACM がサポートされていないリージョンの場合は、リージョン別カスタムドメイン名を作成する際に、リージョン内の API Gateway に証明書をアップロードする必要があります。カスタムドメイン名の証明書を作成またはアップロードする方法の詳細については、「AWS Certificate Manager で証明書の準備をする」を参照してください。

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

リージョンのカスタムドメイン名が正常に作成された場合、API Gateway は新しく作成されたリージョンのカスタムドメイン名を domainName プロパティで返し、そのリージョンにホスト名を regionalDomainName プロパティで返し、リージョンのホストゾーン ID を regionalHostedZoneId プロパティで返します。リージョン別のカスタムドメイン名を指定されたホストゾーン ID のホスト名にマッピングするには、DNS レコードを設定する必要があります。Amazon Route 53 でこれを行うには、AWS CLI または AWS SDK for Route 53 を使用する必要があります。AWS CLI for Route 53 コマンドを次に示します。

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) を示します。JSON ファイルには、リージョン別ドメイン名の DNS レコードをセットアップするための設定が含まれています。次の例に、カスタムドメイン名の作成時にプロビジョニングされたリージョン別のホスト名 (d-numh1z56v6.execute-api.us-west-2.amazonaws.com.) にリージョン別のカスタムドメイン名 (regional.example.com) をマッピングする DNS A レコードの作成方法を示します。AliasTargetDNSName プロパティと HostedZoneId プロパティは、カスタムドメイン名の regionalDomainNameregionalHostedZoneId の値をそれぞれ示しています。また、リージョン別 Route 53 ホストゾーン ID は 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 } } } ] }

同様に、同じコマンドを実行し、エッジ最適化されたカスタムドメイン名を別の setup-dns-rescord.json ファイルを持つ関連 CloudFront ディストリビューションにマッピングできます。次の例に、カスタムドメイン名の作成時にプロビジョニングされた CloudFront ディストリビューション名 (d1frvgze7vy1bf.cloudfront.net) にエッジ最適化されたカスタムドメイン名 (edge.example.com) をマッピングする DNS A レコードのセットアップを示します。

{ "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "edge.example.com", "Type": "A", "AliasTarget": { "DNSName": "d1frvgze7vy1bf.cloudfront.net", "HostedZoneId": "Z2FDTNDATAQYW2", "EvaluateTargetHealth": false } } } ] }

エッジに最適化されたホストゾーンはリージョンに依存せず、DNSName は関連付けられた CloudFront ディストリビューション名の値を取ることに注意してください。Route 53 マネジメントコンソールを使用して、エッジ最適化カスタムドメイン名の DNS レコードをセットアップすることもできますが、リージョン別カスタムドメイン名の場合はできません。

API Gateway コンソールを使用してリージョンのカスタムドメイン名を設定する

API Gateway コンソールを使用してリージョンのカスタムドメイン名を設定するには、以下の手順を実行します。

API Gateway コンソールを使用してリージョンのカスタムドメイン名を設定する

  1. API Gateway コンソールにサインインし、プライマリナビゲーションペインで [Custom Domain Names] を選択します。

  2. [Custom Domain Names] 一覧で、[ +Create New Custom Domain Name] を選択します。

  3. [New Custom Domain Name] で、[Domain Name] にカスタムドメイン名 (my-api.example.com など) を入力します。

  4. [Endpoint Configuration] で、[Regional] を選択します。

  5. [ACM Certificate (us-east-1)] ドロップダウンリストから証明書を選択します。

  6. このカスタムドメイン名を使用する API を作成してデプロイしている場合は、[Add mapping] を選択し、[Path] にカスタムドメイン名の基本パスを入力します。続いて、[Destination] で [API] ドロップダウンリストから API を選択した後、[Stage] ドロップダウンリストからステージを選択します。別の基本パスマッピングを追加するには、この手順を繰り返します。

  7. [Save] を選択します。

  8. 新しくプロビジョンされたターゲットドメイン名を記録し、DNS プロバイダーに移動します。DNS レコードを作成して、新しく作成したリージョンドメイン名がこのターゲットドメイン名を参照するようにします。

AWS CLI を使用したリージョン別カスタムドメイン名のセットアップ

AWS CLI を使用してリージョン別 API のカスタムドメイン名をセットアップするには、次の手順を実行します。

  1. REGIONAL タイプのカスタムドメイン名とリージョンの証明書の ARN を指定する create-domain-name を呼び出します。

    aws apigateway create-domain-name \ --domain-name 'regional.example.com' \ --endpoint-configuration types=REGIONAL \ --regional-certificate-arn 'arn:aws:acm:us-west-2:123456789012:certificate/c19332f0-3be6-457f-a244-e03a423084e6'

    指定された証明書は us-west-2 リージョンのものであり、この例では基盤となる API も同じリージョンのものであることを前提としていることに注意してください。

    成功すると、この呼び出しは以下のような結果を返します。

    { "certificateUploadDate": "2017-10-13T23:02:54Z", "domainName": "regional.example.com", "endpointConfiguration": { "types": "REGIONAL" }, "regionalCertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/c19332f0-3be6-457f-a244-e03a423084e6", "regionalDomainName": "d-numh1z56v6.execute-api.us-west-2.amazonaws.com" }

    regionalDomainName プロパティ値は、リージョン別 API のホスト名を返します。DNS レコードを作成し、カスタムドメイン名をこのリージョン別ドメイン名にポイントする必要があります。これにより、カスタムドメイン名にバインドされるトラフィックが、このリージョン別 API のホスト名にルーティングされます。

    エンドポイントタイプを EDGE に設定するか、タイプをまったく設定しない場合は、エッジ最適化されたカスタムドメイン名を作成します。出力には regionalDomainName ではなく distributionDomainName が含まれます。distributionName プロパティ値は、API のエッジ最適化されたホスト名を返します。DNS レコードを作成し、カスタムドメイン名をこのディストリビューションドメイン名にポイントする必要があります。これにより、カスタムドメイン名にバインドされるトラフィックが、API のエッジ最適化されたホスト名にルーティングされます。

  2. DNS レコードを作成し、カスタムドメイン名とリージョン別ドメイン名を関連付けます。これにより、カスタムドメイン名にバインドされるリクエストが、API のリージョン別ホスト名にルーティングされます。

  3. 基本パスマッピングを追加し、指定のカスタムドメイン名 (regional.example.com など) のデプロイステージ (test など) で指定の API (0qzs2sy7bh など) を公開します。

    aws apigateway create-base-path-mapping \ --domain-name 'regional.exampple.com' \ --base-path 'RegionalApiTest' \ --rest-api-id 0qzs2sy7bh \ --stage 'test'

    その結果、ステージにデプロイされる API のカスタムドメイン名を使用するベース URL は https://regional.example.com/RegionalApiTest になります。

API Gateway REST API を使用したリージョン別カスタムドメイン名のセットアップ

API Gateway REST API を使用してリージョン別 API のカスタムドメイン名を作成するには

  1. domainname:create リンクリレーションに従い、ARN を使用してリージョンの証明書を指定する REGIONAL エンドポイントタイプのカスタムドメイン名を作成します。

    POST /domainnames HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170511T214723Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170511/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=d0abd98a2a06199531c2916b162ede9f63a247032cdc8e4d077216446d13103c { "domainName": "regional.example.com", "regionalCertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/c19332f0-3be6-457f-a244-e03a423084e6", "endpointConfiguration" : { "types" : ["REGIONAL"] } }

    リージョン別カスタムドメイン名をセットアップするには、regionalCertificateArn の入力プロパティに必要な証明書 ARN を設定します。それに対し、エッジ最適化カスタムドメイン名を作成するには、certificateArn の入力プロパティに必要な証明書 ARN を設定します。

    正常なレスポンスでは、201 Created ステータスコードと以下のようなペイロードが含まれます。

    { "_links": { ... }, "certificateUploadDate": "2017-10-13T23:02:54Z", "domainName": "regional.example.com", "endpointConfiguration": { "types": "REGIONAL" }, "regionalCertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/c19332f0-3be6-457f-a244-e03a423084e6", "regionalDomainName": "d-numh1z56v6.execute-api.us-west-2.amazonaws.com." }

    指定のカスタムドメイン名 (regional.example.com など) に対し、API Gateway は API のリージョン別ホスト名として関連するリージョン別ドメイン名 (d-numh1z56v6.execute-api.us-west-2.amazonaws.com など) を返します。DNS レコードを作成し、カスタムドメイン名をこのリージョン別ドメイン名にポイントする必要があります。これにより、カスタムドメイン名にバインドされるトラフィックが、API のリージョン別ホスト名にルーティングされます。DNS レコードは、CNAME または A タイプになります。

    エンドポイント設定タイプを EDGE に設定するか、タイプをまったく設定しない場合は、エッジ最適化されたカスタムドメイン名を作成します。出力には regionalDomainName ではなく distributionDomainName が含まれます。distributionDomainName 値は、API のエッジ最適化されたホスト名を示します。DNS レコードを作成する必要があり、カスタムドメイン名を指すようにこのディストリビューションのドメイン名です。これにより、カスタムドメイン名にバインドされているトラフィックをルーティングするか、API のエッジに最適化されたホスト名です。

  2. DNS プロバイダで DNS レコードをセットアップし、カスタムドメイン名をリージョン別 API ホスト名にポイントします。これにより、カスタムドメイン名にバインドされるトラフィックが、リージョン別 API のホスト名にルーティングされます。Route 53 では、CNAME または Alias A レコードは AWS CLI、AWD SDK、または Route 53 REST API を使用して設定できます。

  3. 新しいカスタムドメイン名を作成し、ドメイン名に基本パスを設定してリージョン別 API のいずれかを対象にします。リージョン別 API (0qzs2sy7bh) を test ステージにデプロイした場合は、API Gateway REST API から basepathmapping:create を呼び出すことで、この API をドメイン名の基本パスマッピングに追加できます。

    POST /domainnames/regional.example.com/basepathmappings HTTP/1.1Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170511T214723Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170511/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=d0abd98a2a06199531c2916b162ede9f63a247032cdc8e4d077216446d13103c { "basePath" : "testRegionalApi", "restApiId" : "0qzs2sy7bh", "stage" : "test" }

基本パスマッピンを設定すると、カスタムドメイン名を使用して API を呼び出せるようになります。リージョン別 PetStore サンプル API で、次の REST API リクエストを使用して GET /pets を呼び出します。

https://regional.example.com/testRegionalApi/pets

GET /pets/{petId} を呼び出すには、次の API リクエストを実行します。

https://regional.example.com/testRegionalApi/pets/1