

# 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 端点至少配置两个可用区。

## （可选）接受私有自定义域资源共享
<a name="apigateway-private-custom-domains-consumer-accept-resource-share"></a>

如果您的 API 提供方使用了 AWS RAM 来创建资源共享，则您有 **12 小时**的时间来接受该共享。如果您和 API 提供方在同一个组织中使用 AWS Organizations，则会自动接受共享。如果您所在的组织启用了自动共享资源，则会自动与您共享资源。

------
#### [ AWS 管理控制台 ]

要使用 AWS 管理控制台，请参阅**《AWS RAM User Guide》中的 [Accepting and rejecting resource share invitations](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 相关联。创建域名访问关联后，可能需要 15 分钟的时间，VPC 端点才能成功调用您的私有自定义域名。如果您有用于访问公共自定义域名的 VPC 端点，请不要将该端点用来创建任何域名访问关联。

------
#### [ AWS 管理控制台 ]

**将您的 VPC 端点与共享私有自定义域名关联**

1. 通过以下网址登录到 Amazon API Gateway 控制台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

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 Gateway**  
以下 `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 端点与私有自定义域名关联后，请确认您的 API 提供方已更新其私有自定义域名的策略，允许您的 VPC 端点调用其域名。有关更多信息，请参阅 [允许其他账户调用您的私有自定义域名](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 私有托管区。托管区是一个容器，其中包含的信息说明您希望如何在一个或多个 VPC 中，为某个域路由流量而不将您的资源公开到互联网。有关更多信息，请参阅[使用私有托管区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)。

------
#### [ AWS 管理控制台 ]

要使用 AWS 管理控制台，请参阅《Amazon Route 53 Developer Guide》**中的 [Creating a private hosted zone](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 DNS 记录。
<a name="apigateway-private-custom-domains-consumer-create-route-53-record"></a>

创建托管区后，您可以创建一条记录来解析私有自定义域。在本示例中，您将创建一个 A 记录类型。如果您为 VPC 端点使用 IPv6，请创建 AAAA 记录类型。如果您为 VPC 端点使用双堆栈，请创建 AAAA 和 A 记录类型。

------
#### [ AWS 管理控制台 ]

要使用 AWS 管理控制台，请参阅 [Routing traffic to an Amazon API Gateway API by using your domain name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html)。

使用**快速创建**并打开**别名**。对于端点，请使用 VPC 端点 DNS 名称。

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

要配置 DNS 记录来将私有自定义域名映射到给定托管区 ID 的主机名，请先创建一个 JSON 文件，其中包含用于为私有域名设置 DNS 记录的配置。

以下 `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)。