

# API Gateway でリージョン別カスタムドメイン名を設定する
<a name="apigateway-regional-api-custom-domain-create"></a>

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

## 考慮事項
<a name="regional-custom-domain-names"></a>

リージョン別カスタムドメイン名に関する考慮事項は、以下のとおりです。
+ リージョン固有の ACM 証明書を指定する必要があります。この証明書は API と同じリージョンに存在する必要があります。カスタムドメイン名の証明書を作成またはアップロードする方法の詳細については、「[AWS Certificate Manager で証明書を準備する](how-to-specify-certificate-for-custom-domain-name.md)」を参照してください。
+ ACM 証明書を使用してリージョン別カスタムドメイン名を作成 (または移行) すると、API Gateway はサービスにリンクされたロールをアカウント内に作成します。サービスにリンクされたロールは、ACM 証明書をリージョン別エンドポイントにアタッチするのに必要です。ロールの名前は **AWSServiceRoleForAPIGateway** です。また、管理ポリシーの **APIGatewayServiceRolePolicy** がアタッチされます。サービスにリンクされたロールの詳細な使用方法については、「[サービスにリンクされたロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)」を参照してください。
+ リージョン別カスタムドメイン名の作成後、カスタムドメイン名をリージョン別ドメインに関連付ける DNS レコードを作成する必要があります。これにより、カスタムドメイン名にバインドされるトラフィックが、API のリージョン別ホスト名にルーティングされます。

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

## リージョン別カスタムドメイン名を作成する
<a name="apigateway-regional-api-custom-domain-create-procedure"></a>

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

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

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

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

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

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

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

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

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

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

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

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

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

次の [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-domain-name.html) コマンドは、カスタムドメイン名を作成します。

```
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 のホスト名にルーティングされます。

------

## リージョン別カスタムドメイン名のルーティングルールを作成する
<a name="apigateway-regional-api-custom-domain-base-path-mapping"></a>

カスタムドメイン名を作成したら、カスタムドメイン名から API へのトラフィックのルーティング方法を設定します。ルーティングモードを `ROUTING_RULE_ONLY` に設定しているため、ルーティングルールを使用して、カスタムドメイン名への受信リクエストを API にルーティングします。

この例では、すべての受信リクエストをカスタムドメイン名にルーティングするキャッチオールルールを API の 1 つのステージに作成します。異なるヘッダーとパスの条件に基づいてルーティングルールを設定することもできます。詳細については、「[API ステージを REST API のカスタムドメイン名に接続するためのルーティングルール](rest-api-routing-rules.md)」を参照してください。

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

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

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

1. **[ルーティングの詳細]** タブで、**[ルーティングルールを追加]** を選択します。

1. **[新しい条件を追加]** を選択して、新しい条件を追加します。

1. このルールを条件なしで保持します。これにより、カスタムドメイン名へのすべてのリクエストがターゲット API とターゲットステージにルーティングされます。

1. **[アクション]** では、ドロップダウンを使用してターゲット API とターゲットステージを選択します。

1. [**次へ**] を選択します。

1. 優先度フィールドに、**100** と入力します。

   API Gateway は最小値から最大値までの優先順位でルールを評価します。これはキャッチオールルールであるため、API Gateway が最初に作成した追加のルールを照合できるように、高い優先度を使用します。

1. **[ルーティングルールを作成]** を選択します。

------
#### [ 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 にトラフィックを送信します。](rest-api-routing-mode.md)」を参照してください。

## リージョン別カスタムドメイン名の DNS レコードを作成する
<a name="apigateway-regional-api-custom-domain-dns-record"></a>

カスタムドメイン名を作成し、ベースパスマッピングを作成した後、カスタムドメイン名を新しく作成したリージョン別ドメイン名に関連付ける DNS レコードを作成します。

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

AWS マネジメントコンソールを使用するには、Route 53 のドキュメントで「[トラフィックを API Gateway にルーティングするように Route 53 を設定する](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html)」を参照してください。

------
#### [ 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 エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/apigateway.html)」でも取得できます。

```
{
  "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](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html) は、リージョン別カスタムドメイン名の 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*) を指しています。

------