

# API コンシューマー: VPC エンドポイントを共有プライベートカスタムドメイン名に関連付ける
<a name="apigateway-private-custom-domains-consumer-create"></a>

次の手順は、別の AWS アカウント のプライベートドメイン名を使用する方法を示しています。API プロバイダーとの信頼関係によっては、AWS RAM がいくつかのタスクを代行する場合があります。

プライベートカスタムドメイン名とは異なる AWS アカウント に属している場合は、VPC エンドポイントをプライベートカスタムドメイン名に関連付けて呼び出すことのみが可能です。プライベートカスタムドメイン名に関する `policy` やその他のパラメータを表示することはできません。

## 前提条件
<a name="apigateway-private-custom-domains-consumer-prerequisites"></a>

別の AWS アカウントのプライベートカスタムドメイン名を使用するには、次のような前提条件があります。
+ `execute-api` サービス用の VPC および VPC エンドポイント。VPC では、`enableDnsHostnames` と `enableDnsSupport` が `true` に設定されている必要があります。
+ VPC エンドポイントごとに少なくとも 2 つのアベイラビリティーゾーンを設定することをお勧めします。

## (オプション) プライベートカスタムドメインリソース共有を承認する
<a name="apigateway-private-custom-domains-consumer-accept-resource-share"></a>

API プロバイダーが AWS RAM を使用してリソース共有を作成した場合、お客様は **12 時間**以内に承認する必要があります。お客様が API プロバイダーと同じ組織に属しており、AWS Organizations を使用している場合、共有は自動的に承認されます。お客様が属している組織で自動共有リソースが有効になっている場合、リソースは自動的に共有されます。

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

AWS マネジメントコンソール を使用するには、*AWS RAM ユーザーガイド*の「[リソース共有の招待の承諾と拒否](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html)」を参照してください。

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

お客様と共有されているすべてのリソースを見つけるには、次の [get-resource-share-invitations](https://docs.aws.amazon.com/cli/latest/reference/ram/get-resource-share-invitations.html) コマンドを使用します。

```
aws ram get-resource-share-invitations \
    --region us-west-2
```

表示されたリソース共有の ARN を使用して、リソース共有の招待を承認します。次の [accept-resource-share-invitation](https://docs.aws.amazon.com/cli/latest/reference/ram/accept-resource-share-invitation.html) コマンドは、リソース共有を承認します。

```
aws ram accept-resource-share-invitation \
    --resource-share-invitation-arn arn:aws:ram:us-west-2:123456789012:resource-share-invitation/1e3477be-4a95-46b4-bbe0-c4001EXAMPLE \
    --region us-west-2
```

------

## 共有プライベートカスタムドメイン名に VPC エンドポイントを関連付ける
<a name="apigateway-private-custom-domains-consumer-associate"></a>

プライベートカスタムドメイン名は一意ではないため、VPC エンドポイントを一意のカスタムドメイン名 ARN に関連付けます。ドメイン名アクセスの関連付けを作成した後、VPC エンドポイントがプライベートカスタムドメイン名を正常に呼び出せるようになるまで最大 15 分かかる場合があります。パブリックカスタムドメイン名へのアクセスに使用している VPC エンドポイントがある場合、そのエンドポイントを使用してドメイン名アクセスの関連付けを作成しないでください。

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

**VPC エンドポイントを共有プライベートカスタムドメイン名に関連付けるには**

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

1. メインナビゲーションペインで、**[ドメイン名アクセスの関連付け]** を選択します。

1. **[ドメイン名アクセスの関連付けの作成]** を選択します。

1. **[ドメイン名 ARN]** で、API プロバイダーから共有されているドメイン名 ARN を選択します。

   ドメイン名 ARN がドロップダウンリストに表示されない場合があります。AWS RAM コンソールを使用して、共有されているドメイン名を表示し、ドメイン名 ARN をコピーして、このフィールドに入力できます。

1. **[VPC エンドポイント ID]** で、ドメイン名アクセスの関連付けを作成する対象の VPC エンドポイント ID を選択します。

1. **[ドメイン名アクセスの関連付けの作成]** を選択します。

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

プライベートカスタムドメイン名は一意ではないため、VPC エンドポイントを一意のカスタムドメイン名 ARN に関連付けます。ドメイン名 ARN を見つけるには、次のいずれかのコマンドを使用します。

1.   
**AWS RAM**  
次の [list-resources](https://docs.aws.amazon.com/cli/latest/reference/ram/list-resources.html) コマンドは、共有されているリソースを一覧表示します。お客様がこのコマンドを使用するには、API プロバイダーが AWS RAM を使用してプライベートカスタムドメインをお客様と共有している必要があります。  

   ```
   aws ram list-resources \
       --resource-owner OTHER-ACCOUNTS \
       --region us-west-2
       --resource-type apigateway:Domainnames
   ```  
**API ゲートウェイ**  
次の `get-domain-names` コマンドは、他の AWS アカウント が所有するすべてのプライベートカスタムドメイン名のうち、ドメイン名アクセスの関連付けを作成する対象にできるドメイン名を一覧表示します。  

   ```
   aws apigateway get-domain-names \
       --resource-owner OTHER_ACCOUNTS \
       --region us-west-2
   ```

1.  ARN を取得した後、API Gateway を使用して、VPC エンドポイントと共有プライベートカスタムドメイン名との間にドメイン名アクセスの関連付けを作成します。次の`create-domain-name-access-association`コマンドを使用します。

   ```
   aws apigateway create-domain-name-access-association \
       --access-association-source-type VPCE \
       --access-association-source 'vpce-1a2b3c4d5e6f1a2b3' \
       --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
   ```

   出力は次のようになります。

   ```
   {
       "domainNameAccessAssociationARN": "arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg", 
       "accessAssociationSource": "vpce-1a2b3c4d5e6f1a2b3",
       "accessAssociationSourceType": "VPCE",
       "domainNameARN" : "arn:aws:apigateway:us-west-1:111122223333:/domainnames/private.example.com+a1b2c3"
   }
   ```

------

VPC エンドポイントとプライベートカスタムドメイン名を関連付けた後、VPC エンドポイントにドメイン名の呼び出しを許可するように、API プロバイダーがプライベートカスタムドメイン名に関するポリシーを更新したことを確認します。詳細については、「[他のアカウントにプライベートカスタムドメイン名の呼び出しを許可する](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update)」を参照してください。

## Route 53 ホストゾーンを作成する
<a name="apigateway-private-custom-domains-consumer-create-route-53-private-hosted-zone"></a>

プライベートカスタムドメイン名を解決するには、Route 53 プライベートホストゾーンを作成する必要があります。ホストゾーンは、インターネットにリソースを公開することなく、1 つ以上の VPC 内のドメインのトラフィックをルーティングする方法に関する情報を保持するコンテナです。詳細については、「[プライベートホストゾーンの使用](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)」を参照してください。

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

AWS マネジメントコンソール を使用するには、*Amazon Route 53 開発者ガイド*の「[プライベートホストゾーンの作成](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)」を参照してください。

**[名前]** には、プライベートカスタムドメイン名の名前を使用します。**[VPC ID]** には、ドメイン名アクセスの関連付けに使用した VPC エンドポイントを含む VPC を使用します。

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

次の [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html) コマンドは、プライベートホストゾーンを作成します。

```
aws route53 create-hosted-zone --name private.example.com \
    --caller-reference 2014-04-01-18:47 \
    --hosted-zone-config Comment="command-line version",PrivateZone=true \
    --vpc VPCRegion=us-west-2,VPCId=vpc-abcd1234
```

出力にはホストゾーン ID が含まれます。このホストゾーン ID は以降の手順で使用します。

------

## Route 53 A レコードを作成する
<a name="apigateway-private-custom-domains-consumer-create-route-53-record"></a>

ホストゾーンを作成した後、プライベートカスタムドメイン名を解決するためのレコードを作成します。この例では、A レコードタイプを作成します。VPC エンドポイントに IPv6 を使用している場合は、AAAA レコードタイプを作成します。VPC エンドポイントにデュアルスタックを使用している場合は、AAAA レコードタイプと A レコードタイプの両方を作成します。

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

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

**[クイック作成]** を使用し、**[エイリアス]** をオンにします。エンドポイントには、VPC エンドポイント DNS 名を使用します。

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

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

次の `setup-dns-record.json` は、プライベートカスタムドメイン名をプライベートホスト名にマッピングする DNS `A` レコードを作成する方法を示しています。VPC DNS ID の `DNSName` と、前のステップで作成したホストゾーン ID を指定します。

```
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "private.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-abcd1234.execute-api.us-west-2.vpce.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 ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

`hosted-zone-id` は、アカウントに設定した DNS レコードの Route 53 ホストゾーン ID に置き換えます。`change-batch` パラメータの値は JSON ファイルを指定します。

------

## API コンシューマーの次のステップ
<a name="apigateway-private-custom-domains-consumer-next-steps"></a>

これで、お客様独自の AWS アカウント でプライベート API を呼び出せるようになりました。VPC で、次の curl コマンドを使用してプライベートカスタムドメイン名にアクセスできます。

```
curl https://private.example.com/v1
```

プライベート API を呼び出す他の方法の詳細については、「[カスタムドメイン名を使用してプライベート API を呼び出す](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke)」を参照してください。