

# API Gateway でエッジ最適化カスタムドメイン名を設定する
<a name="how-to-edge-optimized-custom-domain-name"></a>

エッジ最適化 API のカスタムドメイン名を作成すると、API Gateway は、CloudFront ディストリビューションと DNS レコードを設定して API ドメイン名を CloudFront ディストリビューションドメイン名にマッピングします。API のリクエストは、マッピングされた CloudFront ディストリビューションを介して API Gateway にルーティングされます。このマッピングは、カスタムドメイン名宛ての API リクエストに使用され、そのリクエストは、マッピング先の CloudFront ディストリビューションを介して API Gateway にルーティングされます。

## 考慮事項
<a name="how-to-edge-optimized-custom-domain-name-considerations"></a>

エッジ最適化カスタムドメイン名に関する考慮事項は、以下のとおりです。
+  エッジ最適化のカスタムドメイン名を設定したり、その証明書を更新したりするには、CloudFront ディストリビューションを更新するためのアクセス許可が必要です。

  CloudFront ディストリビューションを更新するには、以下のアクセス許可が必要です。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
              "Sid": "AllowCloudFrontUpdateDistribution",
              "Effect": "Allow",
              "Action": [
                  "cloudfront:updateDistribution"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------
+ エッジ最適化カスタムドメイン名の証明書は、米国東部 (バージニア北部) – `us-east-1` リージョンでリクエストまたはインポートする必要があります。
+ API Gateway によって作成された CloudFront ディストリビューションは、API Gateway と提携しているリージョン固有のアカウントによって所有されています。このような CloudFront ディストリビューションを作成および更新するオペレーションを CloudTrail でトレースするときは、この API Gateway アカウント ID を使用する必要があります。詳細については、「[CloudTrail におけるカスタムドメイン名の作成のログ記録](#how-to-custom-domain-log-cloudfront-distribution-update-in-cloudtrail)」を参照してください。
+  API Gateway は、CloudFront ディストリビューションで Server Name Indication (SNI) を利用することで、エッジ最適化のカスタムドメイン名をサポートしています。証明書の必須の形式や証明書の最大キー長など、CloudFront ディストリビューションでのカスタムドメイン名の使用の詳細については、「Amazon CloudFront 開発者ガイド」の「[代替ドメイン名と HTTPS を使用する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-alternate-domain-names.html)」を参照してください。**
+ エッジ最適化カスタムドメイン名の準備には約 40 分かかります。
+ エッジ最適化カスタムドメイン名を作成したら、DNS レコードを作成して、カスタムドメイン名を CloudFront ディストリビューション名にマッピングする必要があります。

## エッジ最適化カスタムドメイン名を作成する
<a name="how-to-custom-domains-console"></a>

次の手順では、API のエッジ最適化カスタムドメイン名を作成する方法を示します。

------
#### [ AWS マネジメントコンソール ]

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

1. **[ドメイン名の追加]** を選択します。

1. [**ドメイン名**] には、ドメイン名を入力します。

1. **[ルーティングモード]** では、**[API\$1MAPPING\$1ONLY]** を選択します。

1. **[エンドポイントタイプ]** で、**[エッジ最適化]** を選択します。

1. TLS の最小バージョンを選択します。

1. ACM 証明書を選択します。

1. **[ドメイン名の追加]** を選択します。

------
#### [ REST API ]

1. [domainname:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDomainName.html) を呼び出し、カスタムドメイン名と AWS Certificate Manager に保存してある証明書の ARN を指定します。

    API コールが成功すると、証明書 ARN、および関連する CloudFront ディストリビューション名をペイロードに含む `201 Created` レスポンスを返します。

1. 出力に表示される CloudFront ディストリビューションドメイン名をメモしておきます。次のステップにおいて、DNS でカスタムドメインの A レコードのエイリアスターゲットを設定するために、これが必要になります。

この REST API コールのコード例については、「[domainname:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDomainName.html)」を参照してください。

------

エッジ最適化カスタムドメイン名の準備には約 40 分かかりますが、コンソールには、関連する CloudFront ディストリビューションドメイン名が、証明書 ARN と共に、`distribution-id.cloudfront.net` の形式ですぐに表示されます。その間に、ベースパスマッピングまたはルーティングルールを作成しておき、関連する CloudFront ディストリビューションドメイン名にカスタムドメイン名をマッピングするように DNS レコードエイリアスを設定できます。

## カスタムドメイン名をホスト名として API のベースパスマッピングを設定する
<a name="how-to-custom-domains-mapping-console"></a>

ルーティングモードを `API_MAPPING_ONLY` に設定しているため、ベースパスマッピングを通じて、単一のカスタムドメイン名を複数の API のホスト名として使用できます。これにより、カスタムドメイン名および関連するベースパスを組み合わせて API にアクセスできます。

例えば、API Gateway で、`PetStore` という名前の API と `Dogs` という名前の別の API を作成し、`api.example.com` のカスタムドメイン名を設定すると、`PetStore` API の URL を `https://api.example.com` として設定できます。

これにより、`PetStore` API は空の文字列のベースパスに関連付けられます。`PetStore` API の URL を `https://api.example.com/PetStore` として設定すると、`PetStore` API は `PetStore` のベースパスに関連付けられます。`MyDogList` API には、ベースパスとして `Dogs` を割り当てることができます。URL `https://api.example.com/MyDogList` は、`Dogs` API のルート URL となります。

複数のレベルで API マッピングを設定するには、リージョン別カスタムドメイン名のみを使用できます。エッジ最適化カスタムドメイン名はサポートされません。詳細については、「[API マッピングを使用して、API ステージを REST API のカスタムドメイン名に接続します。](rest-api-mappings.md)」を参照してください。

以下の手順では、カスタムドメイン名から API ステージにパスをマップするための API マッピングをセットアップします。

------
#### [ AWS マネジメントコンソール ]

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

1. カスタムドメイン名を選択します。

1. [**Configure API mappings (API マッピングの設定)**] を選択します。

1. [**Add new mapping (新しいマッピングを追加)**] を選択します。

1. マッピングの **API**、**ステージ**、**パス** (オプション) を指定します。

1. **[保存]** を選択します。

------
#### [ REST API ]

 特定のカスタムドメイン名で [basepathmapping:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateBasePathMapping.html) を呼び出し、リクエストペイロードの `basePath`、`restApiId`、およびデプロイ `stage` プロパティを指定します。

 API 呼び出しが成功すると、`201 Created` レスポンスを返します。

REST API コールのコード例については、[basepathmapping:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateBasePathMapping.html) を参照してください。

------

API へのトラフィックのルーティング方法をより柔軟にするために、ルーティングモードを `ROUTING_RULE_ONLY` または `ROUTING_RULE_THEN_API_MAPPING` に変更し、ルーティングルールを作成することができます。詳細については、「[API Gateway のカスタムドメイン名を使用して API にトラフィックを送信します。](rest-api-routing-mode.md)」を参照してください。

## エッジ最適化カスタムドメイン名の DNS レコードを作成する
<a name="how-to-edge-optimized-custom-domain-name-dns-record"></a>

エッジ最適化カスタムドメイン名の作成を開始したら、DNS レコードエイリアスを設定します。

Route 53 を使用してカスタムドメイン名の A レコードエイリアスを作成し、エイリアス先として CloudFront ディストリビューションドメイン名を指定することをお勧めします。その結果、カスタムドメイン名が Zone Apex であっても、Route 53 はカスタムドメイン名をルーティングすることができます。詳細については、*Amazon Route 53 デベロッパーガイド*の「[エイリアスリソースレコードセットと非エイリアスリソースレコードセットの選択](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html)」を参照してください。

 Amazon Route 53 の手順については、*Amazon Route 53 デベロッパーガイド*の「[ドメイン名を使用してトラフィックを Amazon API Gateway API にルーティングする](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html) 」を参照してください。

## CloudTrail におけるカスタムドメイン名の作成のログ記録
<a name="how-to-custom-domain-log-cloudfront-distribution-update-in-cloudtrail"></a>

アカウントによる API Gateway コールのログ記録に CloudTrail が有効になっている場合、API Gateway は、API のカスタムドメイン名が作成または更新されたときに、関連付けられた CloudFront ディストリビューションの更新を記録します。これらのログは `us-east-1` にあります。これらの CloudFront ディストリビューションは API Gateway が所有しているため、報告された各 CloudFront ディストリビューションは、API 所有者のアカウント ID ではなく、次のいずれかのリージョン固有の API Gateway アカウント ID によって識別されます。


| **リージョン** | **アカウント ID** | 
| --- | --- | 
| us-east-1 | 392220576650 | 
| us-east-2 | 718770453195 | 
| us-west-1 | 968246515281 | 
| us-west-2 | 109351309407 | 
| ca-central-1 | 796887884028 | 
| eu-west-1 | 631144002099 | 
| eu-west-2 | 544388816663 | 
| eu-west-3 | 061510835048 | 
| eu-central-1 | 474240146802 | 
| eu-central-2 | 166639821150 | 
| eu-north-1 | 394634713161 | 
| eu-south-1 | 753362059629 | 
| eu-south-2 | 359345898052 | 
| ap-northeast-1 | 969236854626 | 
| ap-northeast-2 | 020402002396 | 
| ap-northeast-3 | 360671645888 | 
| ap-southeast-1 | 195145609632 | 
| ap-southeast-2 | 798376113853 | 
| ap-southeast-3 | 652364314486 | 
| ap-southeast-4 | 849137399833 | 
| ap-south-1 | 507069717855 | 
| ap-south-2 | 644042651268 | 
| ap-east-1 | 174803364771 | 
| sa-east-1 | 287228555773 | 
| me-south-1 | 855739686837 | 
| me-central-1 | 614065512851 | 

## ACM にインポートされた証明書を更新
<a name="how-to-rotate-custom-domain-certificate"></a>

 ACM は使用する証明書の更新を自動的に処理します。カスタムドメイン名に ACM 使用の証明書を更新する必要はありません。CloudFront はユーザーに代わって処理します。

 ただし、証明書を ACM にインポートし、カスタムドメイン名に使用すると、期限切れ前に証明書を更新する必要があります。これにはドメイン名に関する新しいサードパーティーの証明書のインポートも含まれ、既存の証明書は新規更新されます。期限切れの証明書を新しくインポートするときはそのプロセスを繰り返す必要があります。また、ACM にドメイン名に関する新しい証明書を発行するようリクエストもでき、既存のものを ACM 発行の新しい証明書に更新します。その後で、ACM と CloudFront により証明書の更新を自動的に処理するようにできます。新しい ACM 証明書を作成またはインポートするには、「[SSL/TLS 証明書を作成または ACM にインポートするには](how-to-specify-certificate-for-custom-domain-name.md#how-to-specify-certificate-for-custom-domain-name-setup)」の手順に従います。

次の手順では、ドメイン名の証明書をローテーションする方法を示します。

**注記**  
ACM にインポートした証明書のローテーションには約 40 分かかります。

------
#### [ AWS マネジメントコンソール ]

1. ACM に証明書をリクエストするかインポートします。

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

1. エッジ最適化カスタムドメイン名を選択します。

1. **[エンドポイント設定]** で、**[編集]** を選択します。

1. **[ACM 証明書]** で、ドロップダウンリストから証明書を選択します。

1. **[変更を保存]** を選択し、カスタムドメイン名の証明書の更新を開始します。

------
#### [ REST API ]

 [domainname:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDomainName.html) アクションを呼び出し、指定したドメイン名の新しい ACM 証明書の ARN を指定します。

------
#### [ AWS CLI ]

 次の [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) は、エッジ最適化のドメイン名の ACM 証明書を更新します。

```
aws apigateway update-domain-name \
    --domain-name edge.example.com \
    --patch-operations "op='replace',path='/certificateArn',value='arn:aws:acm:us-east-2:111122223333:certificate/CERTEXAMPLE123EXAMPLE'"
```

 次の [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) は、リージョンのドメイン名の ACM 証明書を更新します。

```
aws apigateway update-domain-name \
    --domain-name regional.example.com \
    --patch-operations "op='replace',path='/regionalCertificateArn',value='arn:aws:acm:us-east-2:111122223333:certificate/CERTEXAMPLE123EXAMPLE'"
```

------

## ベースパスマッピングを使用する場合にカスタムドメイン名を使用して API を呼び出す
<a name="how-to-custom-domains-call-api-with-sni"></a>

カスタムドメイン名で API を呼び出すことは、正しい URL を使用する場合、デフォルトのドメイン名で API を呼び出すことと同じです。

次の例では、指定されたリージョン (`udxjef`) で、指定されたカスタムドメイン名 (`qf3duz`) の 2 つの API (`us-east-1` および `api.example.com`) のデフォルトの URL と対応するカスタム URL を比較し、違いを示します。


| API ID | ステージ | デフォルト URL | 基本パス | カスタム URL | 
| --- | --- | --- | --- | --- | 
| udxjef | prod | https://udxjef.execute-api.us-east-1.amazonaws.com/prod | /petstore | https://api.example.com/petstore | 
| udxjef | tst | https://udxjef.execute-api.us-east-1.amazonaws.com/tst | /petdepot | https://api.example.com/petdepot | 
| qf3duz | dev | https://qf3duz.execute-api.us-east-1.amazonaws.com/dev | /bookstore | https://api.example.com/bookstore | 
| qf3duz | tst | https://qf3duz.execute-api.us-east-1.amazonaws.com/tst | /bookstand | https://api.example.com/bookstand | 

API へのトラフィックのルーティング方法をより柔軟にするために、ルーティングルールを作成することができます。詳細については、「[API Gateway のカスタムドメイン名を使用して API にトラフィックを送信します。](rest-api-routing-mode.md)」を参照してください。

 API Gateway では、[Server Name Indication (SNI)](https://en.wikipedia.org/wiki/Server_Name_Indication) を使用した、API のカスタムドメイン名がサポートされています。SNI をサポートするブラウザまたはクライアントライブラリを使用して、カスタムドメイン名の API を呼び出すことができます。

 API Gateway では、CloudFront ディストリビューションで SNI を実施します。CloudFront でのカスタムドメイン名の使用の詳細については、「[Amazon CloudFront カスタム SSL](https://aws.amazon.com/cloudfront/custom-ssl-domains/)」を参照してください。