

# Consumidor de API: associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado com você
<a name="apigateway-private-custom-domains-consumer-create"></a>

O procedimento a seguir mostra como consumir um nome de domínio privado em outra Conta da AWS. Dependendo da sua relação de confiança com o provedor de API, o AWS RAM pode concluir algumas tarefas para você.

Quando você está em uma Conta da AWS diferente da conta de um nome de domínio personalizado privado, só é possível associar o endpoint da VPC a um nome de domínio personalizado privado e invocá-lo. Não é possível visualizar a `policy` nem nenhum outro parâmetro do nome de domínio personalizado privado.

## Pré-requisitos
<a name="apigateway-private-custom-domains-consumer-prerequisites"></a>

Para consumir um nome de domínio personalizado privado em outra Conta da AWS, é necessário observar os seguintes pré-requisitos:
+ Uma VPC e um endpoint da VPC para o serviço `execute-api`. A VPC deve ter `enableDnsHostnames` e `enableDnsSupport` configurados como `true`.
+ Recomendamos configurar pelo menos duas zonas de disponibilidade por endpoint da VPC.

## (Opcional) Aceite o compartilhamento de recursos do domínio personalizado privado
<a name="apigateway-private-custom-domains-consumer-accept-resource-share"></a>

Se o provedor de API usou o AWS RAM para criar um compartilhamento de recursos, você tem **12 horas** para aceitá-lo. Se você estiver na mesma organização que está usando o AWS Organizations como provedor de API, o compartilhamento será aceito automaticamente. Se estiver em uma organização que tem recursos compartilhados automáticos habilitados, o recurso será compartilhado automaticamente com você.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Accepting and rejecting resource share invitations](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html) no *Guia do usuário do AWS RAM*. 

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

Para encontrar todos os recursos compartilhados com você, use o comando [get-resource-share-invitations](https://docs.aws.amazon.com/cli/latest/reference/ram/get-resource-share-invitations.html) indicado abaixo:

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

Use o ARN de compartilhamento de recursos resultante para aceitar o convite de compartilhamento de recursos. O comando [accept-resource-share-invitation](https://docs.aws.amazon.com/cli/latest/reference/ram/accept-resource-share-invitation.html) a seguir aceita o compartilhamento de recursos.

```
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
```

------

## Associe o endpoint da VPC a um nome de domínio personalizado privado compartilhado
<a name="apigateway-private-custom-domains-consumer-associate"></a>

Como os nomes de domínio personalizados privados não são exclusivos, você deve associar o endpoint da VPC ao ARN do nome de domínio personalizado exclusivo. Após a criação da associação de acesso ao nome de domínio, pode demorar até 15 minutos para que o endpoint da VPC invoque com sucesso o nome de domínio personalizado privado. Se você usa um endpoint da VPC para acessar um nome de domínio personalizado público, não o use para criar associações de acesso a nomes de domínio. 

------
#### [ Console de gerenciamento da AWS ]

**Como associar o endpoint da VPC a um nome de domínio personalizado privado compartilhado**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. No painel de navegação principal, escolha **Associações de acesso a nomes de domínio**.

1. Escolha **Criar uma associação de acesso ao nome de domínio**.

1. Em **ARN do nome de domínio**, selecione o ARN do nome de domínio que o provedor de API compartilhou com você.

   O ARN do nome de domínio pode não aparecer na lista suspensa. Você pode usar o console do AWS RAM para visualizar os nomes de domínio compartilhados com você e, em seguida, copiar o ARN do nome de domínio e inseri-lo nesse campo.

1. Em **IDs de endpoint da VPC**, selecione o ID do endpoint da VPC com o qual você deseja formar a associação de acesso ao nome de domínio.

1. Escolha **Criar uma associação de acesso ao nome de domínio**.

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

Como os nomes de domínio personalizados privados não são exclusivos, você deve associar o endpoint da VPC ao ARN do nome de domínio personalizado exclusivo. Para localizar o ARN do nome de domínio, use um dos comandos a seguir.

1.   
**AWS RAM**  
Você pode usar o comando [list-resources](https://docs.aws.amazon.com/cli/latest/reference/ram/list-resources.html) a seguir para visualizar os recursos que são compartilhados com você. Para usar esse comando, o provedor de API deve ter usado o AWS RAM para compartilhar o respectivo domínio personalizado privado com você.  

   ```
   aws ram list-resources \
       --resource-owner OTHER-ACCOUNTS \
       --region us-west-2
       --resource-type apigateway:Domainnames
   ```  
**API Gateway**  
O comando `get-domain-names` a seguir lista todos os nomes de domínio personalizados privados pertencentes a outras Contas da AWS com as quais você pode formar associações de acesso a nomes de domínio.  

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

1.  Depois de recuperar o ARN, use o API Gateway para criar a associação de acesso ao nome de domínio entre o endpoint da VPC e um nome de domínio personalizado privado compartilhado. Use o seguinte comando `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"
   ```

   A saída será exibida da seguinte forma:

   ```
   {
       "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"
   }
   ```

------

Depois de associar o endpoint da VPC ao nome de domínio personalizado privado, confirme se o provedor de API atualizou a política do nome de domínio personalizado privado para permitir que seu endpoint da VPC invoque o nome de domínio. Para obter mais informações, consulte [Permita que outras contas invoquem seu nome de domínio personalizado privado](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update).

## Como criar uma zona hospedada no Route 53
<a name="apigateway-private-custom-domains-consumer-create-route-53-private-hosted-zone"></a>

Para resolver o nome de domínio personalizado privado, você precisa criar uma zona hospedada privada do Route 53. Zona hospedada é um contêiner que abriga informações sobre como você deseja rotear o tráfego para um domínio dentro de uma ou mais VPCs sem expor seus recursos à internet. Para obter mais informações, consulte [Como trabalhar com zonas hospedadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [Creating a private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) no *Guia do desenvolvedor do Amazon Route 53*.

Em **Name**, use o nome do domínio personalizado privado. Em **ID da VPC**, use a VPC que contém o endpoint da VPC que você usou para a associação de acesso ao nome de domínio.

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

O comando [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html) indicado abaixo cria uma zona hospedada privada:

```
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
```

A saída contém o ID da zona hospedada. Você usa o ID da zona hospedada nas etapas a seguir.

------

## Crie um registro de DNS A do Route 53.
<a name="apigateway-private-custom-domains-consumer-create-route-53-record"></a>

Depois de criar a zona hospedada, crie um registro para resolver o domínio personalizado privado. Neste exemplo, você cria um tipo de registro A. Se estiver usando IPv6 para o endpoint da VPC, crie um tipo de registro AAAA. Se estiver usando pilha dupla para o endpoint da VPC, crie um registro do tipo AAAA e um do tipo A.

------
#### [ Console de gerenciamento da AWS ]

Para usar o Console de gerenciamento da AWS, consulte [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).

Use **Criação rápida** e ative **Alias**. Para o endpoint, use o nome DNS do endpoint da VPC.

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

Para configurar os registros de DNS para associar o nome de domínio personalizado privado ao nome de host do ID de zona hospedada fornecido, primeiro crie um arquivo JSON que contenha a configuração de um registro de DNS para o nome de domínio privado.

O comando `setup-dns-record.json` a seguir mostra como criar um registro de DNS `A` para associar um nome de domínio personalizado privado ao respectivo nome de host privado. Você fornece o `DNSName` do ID do DNS da VPC e o ID da zona hospedada que você criou na etapa anterior.

```
{
  "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
        }
      }
    }
  ]
}
```

O comando [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html) indicado abaixo cria um registro de DNS para o nome de domínio personalizado privado:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

Substitua `hosted-zone-id` pelo ID da zona hospedada do Route 53 do conjunto de registros DNS na conta. O valor do parâmetro `change-batch` aponta para um arquivo JSON.

------

## Próximas etapas para um consumidor de API
<a name="apigateway-private-custom-domains-consumer-next-steps"></a>

Agora você pode invocar a API privada em sua Conta da AWS. Na VPC, você pode usar o comando curl a seguir para acessar o nome de domínio personalizado privado.

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

Para ter mais informações sobre outras formas de invocar sua API privada, consulte [Invocar uma API privada usando um nome de domínio personalizado](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke).