

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Saiba como usar a descoberta AWS Cloud Map de serviços com consultas de DNS e chamadas de API usando o AWS CLI
<a name="tutorial-private-namespace-cli"></a>

Este tutorial demonstra como usar a descoberta AWS Cloud Map de serviços usando a AWS Command Line Interface (CLI). Você criará uma arquitetura de microsserviços com dois serviços de back-end — um detectável usando consultas de DNS e outro detectável usando somente a API. AWS Cloud Map 

Para obter um tutorial que inclui etapas AWS Cloud Map do console, consulte[Saiba como usar a descoberta AWS Cloud Map de serviços com consultas de DNS e chamadas de API](tutorial-private-namespace.md).

## Pré-requisitos
<a name="prerequisites-private-namespace-cli"></a>

Os pré-requisitos a seguir devem ser atendidos para concluir o tutorial com êxito.
+ Antes de começar, conclua as etapas em [Configurado para usar AWS Cloud Map](setting-up-cloud-map.md).
+ Se você ainda não instalou o AWS Command Line Interface, siga as etapas em [Instalando ou atualizando a versão mais recente do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) para instalá-lo.

  O tutorial requer um terminal de linha de comando ou um shell para executar os comandos. No Linux e no macOS, use o gerenciador de pacotes e de shell de sua preferência.
**nota**  
No Windows, alguns comandos da CLI do Bash que você costuma usar com o Lambda (como `zip`) não são compatíveis com os terminais integrados do sistema operacional. Para obter uma versão do Ubuntu com o Bash integrada no Windows, [instale o Subsistema do Windows para Linux](https://learn.microsoft.com/en-us/windows/wsl/install).
+ O tutorial requer um ambiente local com o comando `dig` DNS lookup utility.

## Crie um AWS Cloud Map namespace
<a name="create-an-aws-cloud-map-private-namespace-cli"></a>

Primeiro, você criará um AWS Cloud Map namespace público. AWS Cloud Map criará uma zona hospedada do Route 53 com o mesmo nome, permitindo a descoberta de serviços por meio de registros DNS e chamadas de API.

1. Crie o namespace DNS público:

   ```
   aws servicediscovery create-public-dns-namespace \
       --name cloudmap-tutorial.com \
       --creator-request-id cloudmap-tutorial-request-1 \
       --region us-east-2
   ```

   O comando retorna um ID de operação que você pode usar para verificar o status da criação do namespace:

   ```
   {
       "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd"
   }
   ```

1. Verifique o status da operação para confirmar que o namespace foi criado com sucesso:

   ```
   aws servicediscovery get-operation \
       --operation-id gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9xmplyzd \
       --region us-east-2
   ```

1. Quando a operação for bem-sucedida, obtenha o ID do namespace:

   ```
   aws servicediscovery list-namespaces \
       --region us-east-2 \
       --query "Namespaces[?Name=='cloudmap-tutorial.com'].Id" \
       --output text
   ```

   Esse comando retorna o ID do namespace, que você precisará para as etapas subsequentes:

   ```
   ns-abcd1234xmplefgh
   ```

## Crie os AWS Cloud Map serviços
<a name="create-the-aws-cloud-map-services-private-namespace-cli"></a>

Agora, crie dois serviços em seu namespace. O primeiro serviço poderá ser descoberto usando chamadas de DNS e de API, enquanto o segundo poderá ser descoberto usando somente chamadas de API.

1. Crie o primeiro serviço com a descoberta de DNS ativada:

   ```
   aws servicediscovery create-service \
       --name public-service \
       --namespace-id ns-abcd1234xmplefgh \
       --dns-config "RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=300}]" \
       --region us-east-2
   ```

   O comando retorna detalhes sobre o serviço criado:

   ```
   {
       "Service": {
           "Id": "srv-abcd1234xmplefgh",
           "Arn": "arn:aws:servicediscovery:us-east-2:123456789012:service/srv-abcd1234xmplefgh",
           "Name": "public-service",
           "NamespaceId": "ns-abcd1234xmplefgh",
           "DnsConfig": {
               "NamespaceId": "ns-abcd1234xmplefgh",
               "RoutingPolicy": "MULTIVALUE",
               "DnsRecords": [
                   {
                       "Type": "A",
                       "TTL": 300
                   }
               ]
           },
           "CreateDate": 1673613600.000,
           "CreatorRequestId": "public-service-request"
       }
   }
   ```

1. Crie o segundo serviço com a descoberta somente de API:

   ```
   aws servicediscovery create-service \
       --name backend-service \
       --namespace-id ns-abcd1234xmplefgh \
       --type HTTP \
       --region us-east-2
   ```

   O comando retorna detalhes sobre o serviço criado:

   ```
   {
       "Service": {
           "Id": "srv-ijkl5678xmplmnop",
           "Arn": "arn:aws:servicediscovery:us-east-2:123456789012:service/srv-ijkl5678xmplmnop",
           "Name": "backend-service",
           "NamespaceId": "ns-abcd1234xmplefgh",
           "Type": "HTTP",
           "CreateDate": 1673613600.000,
           "CreatorRequestId": "backend-service-request"
       }
   }
   ```

## Registre as instâncias do AWS Cloud Map serviço
<a name="register-the-aws-cloud-map-service-instances-private-namespace-cli"></a>

Em seguida, registre as instâncias de serviço para cada um dos seus serviços. Essas instâncias representam os recursos reais que serão descobertos.

1. Registre a primeira instância com um IPv4 endereço para descoberta de DNS:

   ```
   aws servicediscovery register-instance \
       --service-id srv-abcd1234xmplefgh \
       --instance-id first \
       --attributes AWS_INSTANCE_IPV4=192.168.2.1 \
       --region us-east-2
   ```

   O comando retorna um ID de operação:

   ```
   {
       "OperationId": "4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd"
   }
   ```

1. Verifique o status da operação para confirmar que a instância foi registrada com sucesso:

   ```
   aws servicediscovery get-operation \
       --operation-id 4yejorelbukcjzpnr6tlmrghsjwpngf4-k9xmplyzd \
       --region us-east-2
   ```

1. Registre a segunda instância com atributos personalizados para descoberta da API:

   ```
   aws servicediscovery register-instance \
       --service-id srv-ijkl5678xmplmnop \
       --instance-id second \
       --attributes service-name=backend \
       --region us-east-2
   ```

   O comando retorna um ID de operação:

   ```
   {
       "OperationId": "7zxcvbnmasdfghjklqwertyuiop1234-k9xmplyzd"
   }
   ```

1. Verifique o status da operação para confirmar que a instância foi registrada com sucesso:

   ```
   aws servicediscovery get-operation \
       --operation-id 7zxcvbnmasdfghjklqwertyuiop1234-k9xmplyzd \
       --region us-east-2
   ```

## Descubra as instâncias AWS Cloud Map de serviço
<a name="discover-the-aws-cloud-map-service-instances-private-namespace-cli"></a>

Agora que você criou e registrou suas instâncias de serviço, pode verificar se tudo está funcionando descobrindo-as usando as consultas de DNS e a API. AWS Cloud Map 

1. Primeiro, obtenha o ID da zona hospedada do Route 53:

   ```
   aws route53 list-hosted-zones-by-name \
       --dns-name cloudmap-tutorial.com \
       --query "HostedZones[0].Id" \
       --output text
   ```

   Isso retorna o ID da zona hospedada:

   ```
   /hostedzone/Z1234ABCDXMPLEFGH
   ```

1. Obtenha os servidores de nomes para sua zona hospedada:

   ```
   aws route53 get-hosted-zone \
       --id Z1234ABCDXMPLEFGH \
       --query "DelegationSet.NameServers[0]" \
       --output text
   ```

   Isso retorna um dos servidores de nomes:

   ```
   ns-1234.awsdns-12.org
   ```

1. Use o `dig` comando para consultar os registros DNS do seu serviço público:

   ```
   dig @ns-1234.awsdns-12.org public-service.cloudmap-tutorial.com
   ```

   A saída deve exibir o IPv4 endereço que você associou ao seu serviço:

   ```
   ;; ANSWER SECTION:
   public-service.cloudmap-tutorial.com. 300 IN A	192.168.2.1
   ```

1. Use o AWS CLI para descobrir a instância do serviço de back-end:

   ```
   aws servicediscovery discover-instances \
       --namespace-name cloudmap-tutorial.com \
       --service-name backend-service \
       --region us-east-2
   ```

   A saída exibe os atributos que você associou ao serviço:

   ```
   {
       "Instances": [
           {
               "InstanceId": "second",
               "NamespaceName": "cloudmap-tutorial.com",
               "ServiceName": "backend-service",
               "HealthStatus": "UNKNOWN",
               "Attributes": {
                   "service-name": "backend"
               }
           }
       ],
       "InstancesRevision": 71462688285136850
   }
   ```

## Limpe os recursos
<a name="clean-up-the-resources-private-namespace-cli"></a>

Depois de concluir o tutorial, limpe os recursos para evitar cobranças. AWS Cloud Map exige que você os limpe na ordem inversa: primeiro as instâncias de serviço, depois os serviços e, finalmente, o namespace.

1. Cancele o registro da primeira instância de serviço:

   ```
   aws servicediscovery deregister-instance \
       --service-id srv-abcd1234xmplefgh \
       --instance-id first \
       --region us-east-2
   ```

1. Cancele o registro da segunda instância de serviço:

   ```
   aws servicediscovery deregister-instance \
       --service-id srv-ijkl5678xmplmnop \
       --instance-id second \
       --region us-east-2
   ```

1. Exclua o serviço público:

   ```
   aws servicediscovery delete-service \
       --id srv-abcd1234xmplefgh \
       --region us-east-2
   ```

1. Exclua o serviço de back-end:

   ```
   aws servicediscovery delete-service \
       --id srv-ijkl5678xmplmnop \
       --region us-east-2
   ```

1. Exclua o namespace de :

   ```
   aws servicediscovery delete-namespace \
       --id ns-abcd1234xmplefgh \
       --region us-east-2
   ```

1. Verifique se a zona hospedada do Route 53 foi excluída:

   ```
   aws route53 list-hosted-zones-by-name \
       --dns-name cloudmap-tutorial.com
   ```