

# Uso da descoberta de serviços para conectar serviços do Amazon ECS com nomes DNS
<a name="service-discovery"></a>

O serviço do Amazon ECS pode ser opcionalmente configurado para usar a descoberta de serviço do Amazon ECS. A descoberta de serviço usa ações de API do AWS Cloud Map para gerenciar namespaces HTTP e DNS para serviços do Amazon ECS. Para obter mais informações, consulte [O que é o AWS Cloud Map?](https://docs.aws.amazon.com/cloud-map/latest/dg/Welcome.html) no *Guia do desenvolvedor do AWS Cloud Map*.

A descoberta de serviço está disponível nas seguintes regiões da AWS:


| Nome da Região | Região | 
| --- | --- | 
|  Leste dos EUA (Norte da Virgínia)  |  us-east-1  | 
|  Leste dos EUA (Ohio)  |  us-east-2  | 
|  Oeste dos EUA (N. da Califórnia)  |  us-west-1  | 
|  Oeste dos EUA (Oregon)  |  us-west-2  | 
|  África (Cidade do Cabo)  |  af-south-1  | 
|  Ásia-Pacífico (Hong Kong)  |  ap-east-1  | 
|  Ásia-Pacífico (Taipei)  |  ap-east-2  | 
|  Ásia-Pacífico (Mumbai)  |  ap-south-1  | 
|  Ásia-Pacífico (Hyderabad)  |  ap-south-2  | 
|  Ásia-Pacífico (Tóquio)  |  ap-northeast-1  | 
|  Ásia-Pacífico (Seul)  |  ap-northeast-2  | 
|  Ásia-Pacífico (Osaka)  |  ap-northeast-3  | 
|  Ásia-Pacífico (Singapura)  |  ap-southeast-1  | 
|  Ásia-Pacífico (Sydney)  |  ap-southeast-2  | 
|  Ásia-Pacífico (Jacarta)  |  ap-southeast-3  | 
|  Ásia-Pacífico (Melbourne)  |  ap-southeast-4  | 
|  Ásia-Pacífico (Malásia)  |  ap-southeast-5  | 
|  Ásia-Pacífico (Nova Zelândia)  |  ap-southeast-6  | 
|  Ásia-Pacífico (Tailândia)  |  ap-southeast-7  | 
|  Canadá (Central)  |  ca-central-1  | 
|  Oeste do Canadá (Calgary)  |  ca-west-1  | 
|  China (Pequim)  |  cn-north-1  | 
|  China (Ningxia)  |  cn-northwest-1  | 
|  Europa (Frankfurt)  |  eu-central-1  | 
|  Europa (Zurique)  |  eu-central-2  | 
|  Europa (Irlanda)  |  eu-west-1  | 
|  Europa (Londres)  |  eu-west-2  | 
|  Europa (Paris)  |  eu-west-3  | 
|  Europa (Milão)  |  eu-south-1  | 
|  Europa (Estocolmo)  |  eu-north-1  | 
|  Israel (Tel Aviv)  |  il-central-1  | 
|  Europa (Espanha)  |  eu-south-2  | 
|  Oriente Médio (Emirados Árabes Unidos)  |  me-central-1  | 
|  México (Central)  |  mx-central-1  | 
|  Oriente Médio (Barém)  |  me-south-1  | 
|  América do Sul (São Paulo)  |  sa-east-1  | 
|  AWS GovCloud (Leste dos EUA)  |  us-gov-east-1  | 
|  AWS GovCloud (Oeste dos EUA)  |  us-gov-west-1  | 

## Conceitos de descoberta de serviço
<a name="service-discovery-concepts"></a>

A descoberta de serviço consiste nos seguintes componentes:
+ **Namespace de descoberta de serviço**: grupo lógico de serviços de descoberta de serviço que compartilham o mesmo nome de domínio, como `example.com`, que é onde você deseja rotear o tráfico. É possível criar um namespace com uma chamada para o comando `aws servicediscovery create-private-dns-namespace` ou no console do Amazon ECS. É possível usar o comando `aws servicediscovery list-namespaces` para exibir as informações resumidas sobre os namespaces criados pela conta atual. Para obter mais informações sobre os comandos de descoberta de serviço, consulte `[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)` e `[list-namespaces](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-namespaces.html)` no *Guia de referência da AWS CLI do AWS Cloud Map (descoberta de serviço)*.
+ **Serviço de descoberta de serviço**: existe no namespace de descoberta de serviço e consiste no nome do serviço e na configuração do DNS para o namespace. Ele fornece os seguintes componentes principais:
  + **Service registry (Registro do serviço)**: permite pesquisar um serviço por meio de DNS ou ações de API do AWS Cloud Map disponíveis que podem ser usados para se conectar ao serviço.
+ **Instância de descoberta de serviço**: existe no serviço de descoberta de serviço e consiste nos atributos associados a cada serviço do Amazon ECS no diretório de serviços.
  + **Atributos de instância**: os metadados a seguir são adicionados como atributos personalizados para cada serviço do Amazon ECS configurado para usar a descoberta de serviço:
    + **`AWS_INSTANCE_IPV4`**: para um registro `A`, o endereço IPv4 que o Route 53 retorna em resposta a consultas de DNS e que o AWS Cloud Map retorna ao descobrir detalhes da instância, por exemplo, `192.0.2.44`.
    + **`AWS_INSTANCE_IPV6`**: para um registro `AAAA`, o endereço IPv6 que Route 53 retorna em resposta a consultas ao DNS e que AWS Cloud Map retorna ao descobrir detalhes da instância, por exemplo, ` 2001:0db8:85a3:0000:0000:abcd:0001:2345`. `AWS_INSTANCE_IPv4` e `AWS_INSTANCE_IPv6` são adicionados aos serviços de pilha dupla do Amazon ECS. Apenas `AWS_INSTANCE_IPv6` é adicionado para serviços somente IPv6 do Amazon ECS.
    + **`AWS_INSTANCE_PORT`** – o valor da porta associado ao serviço de descoberta de serviço.
    + **`AVAILABILITY_ZONE`** – a zona de disponibilidade na qual a tarefa foi iniciada. Para tarefas que usam o EC2, essa é a zona de disponibilidade na qual a instância de contêiner existe. Para tarefas que usam o Fargate, essa é a zona de disponibilidade na qual a interface de rede elástica existe.
    + **`REGION`** – a região em que a tarefa existe.
    + **`ECS_SERVICE_NAME`** – o nome do serviço do Amazon ECS ao qual a tarefa pertence.
    + **`ECS_CLUSTER_NAME`** – o nome do cluster do Amazon ECS ao qual a tarefa pertence.
    + **`EC2_INSTANCE_ID`** – o ID da instância de contêiner na qual a tarefa foi posicionada. Esse atributo personalizado não será adicionado se a tarefa estiver usando o Fargate.
    + **`ECS_TASK_DEFINITION_FAMILY`** – a família de definições de tarefa que a tarefa está usando.
    + **`ECS_TASK_SET_EXTERNAL_ID`**: se um conjunto de tarefas for criado para uma implantação externa e for associado a um registro de descoberta de serviço, o atributo `ECS_TASK_SET_EXTERNAL_ID` conterá o ID externo do conjunto de tarefas.
+ **Verificações de integridade do Amazon ECS**: o Amazon ECS executa verificações de integridade periódicas em nível de contêiner. Se não passar na verificação de integridade, o endpoint é removido do roteamento de DNS e marcado como não íntegro.

## Considerações sobre descoberta de serviço
<a name="service-discovery-considerations"></a>

As seguintes informações devem ser considerada ao usar a descoberta de serviço:
+ A descoberta de serviços é compatível com as tarefas no Fargate se você está usando a versão 1.1.0 ou posterior da plataforma. Para obter mais informações, consulte [Versões da plataforma do Fargate para o Amazon ECS](platform-fargate.md).
+ Os serviços configurados para usar a descoberta de serviços têm um limite de 1.000 tarefas por serviço. Isso se deve a uma cota de serviço do Route 53.
+ O fluxo de trabalho Create Service (Criar serviço) no console do Amazon ECS é compatível apenas com o registro de serviços em namespaces DNS privados. Quando um namespace DNS privado do AWS Cloud Map for criado, será criada automaticamente uma zona hospedada privada do Route 53.
+ Os atributos DNS da VPC devem ser configurados para resoluções DNS bem-sucedidas. Para obter informações sobre como configurar os atributos, consulte [Suporte a DNS na sua VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) no *Guia do usuário da Amazon VPC*.
+ O Amazon ECS não oferece suporte ao registro de serviços em namespaces AWS Cloud Map compartilhados.
+ Os registros de DNS criados para um serviço de descobertra de serviço sempre são registrados com o endereço IP privado da tarefa, em vez do endereço IP público, mesmo quando são usados namespaces públicos.
+ A descoberta de serviço exige que as tarefas especifiquem o modo de rede `awsvpc`, `bridge` ou `host` (`none` não é compatível).
+ Se a definição de tarefa de serviço usar o modo de rede `awsvpc`, será possível criar qualquer combinação de registros `A` ou `SRV` para cada tarefa de serviço. Se você usar registros `SRV`, uma porta será necessária. Além disso, você poderá criar registros `AAAA` se o serviço usar sub-redes de pilha dupla. Se o serviço usar sub-redes somente IPv6, não será possível criar registros `A`.
+ Se a definição de tarefa de serviço usa o modo de rede `bridge` ou `host`, o único tipo de registro DNS com suporte é o registro SRV. Crie um registro SRV para cada tarefa de serviço. O registro SRV deve especificar o nome do contêiner e a combinação de portas do contêiner da definição de tarefa.
+ Os registros de DNS de um serviço de descoberta de serviço podem ser consultados na VPC. Eles usam o seguinte formato: `<service-discovery-service-name>.<service-discovery-namespace>`.
+ Ao fazer uma consulta ao DNS no nome do serviço, os registros `A` e `AAAA` retornam um conjunto de endereços IP correspondentes às suas tarefas. Os registros `SRV` retornam um conjunto de endereços IP e portas para cada tarefa.
+ Se você tiver oito ou menos registros íntegros, o Route 53 responderá a todas as consultas DNS com todos os registros íntegros.
+ Quando nenhum dos registros estiver íntegro, o Route 53 responderá às consultas DNS com até oito registros não íntegros.
+ É possível configurar a descoberta de serviço para um serviço que esteja atrás de um balanceador de carga, mas o tráfego da descoberta de serviço sempre será roteado para a tarefa, e não para o balanceador de carga.
+ A descoberta de serviço não oferece suporte ao uso de Classic Load Balancers.
+ Convém usar verificações de integridade em nível de contêiner gerenciadas pelo Amazon ECS para o serviço de descoberta de serviços.
  + **HealthCheckCustomConfig**: o Amazon ECS gerencia as verificações de integridade em seu nome. O Amazon ECS usa informações de contêiner e das verificações de integridade, além do estado da tarefa, para atualizar a integridade com o AWS Cloud Map. Isso é especificado pelo uso do parâmetro `--health-check-custom-config` ao ser criado o serviço de descoberta de serviço. Para obter mais informações, consulte [HealthCheckCustomConfig](https://docs.aws.amazon.com/cloud-map/latest/api/API_HealthCheckCustomConfig.html) na *Referência da API do AWS Cloud Map*.
+ Os recursos do AWS Cloud Map criados quando a descoberta de serviço é usada devem ser limpos manualmente.
+ As tarefas e instâncias são registradas como `UNHEALTHY` até que as verificações de integridade do contêiner retornem um valor. Se as verificações de integridade forem aprovadas, o status é atualizado para `HEALTHY`. Se as verificações de integridade do contêiner falharem, o registro da instância da descoberta de serviços é cancelado.

## Preço da descoberta de serviço
<a name="service-discovery-pricing"></a>

Os clientes que usam a descoberta de serviço do Amazon ECS são cobrados pelos recursos do Route 53 e pelas operações da API de descoberta do AWS Cloud Map. Isso envolve os custos de criação de zonas hospedadas do Route 53 e de consultas ao registro do serviço. Para obter mais informações, consulte [Preços do AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/latest/dg/cloud-map-pricing.html) no *Guia do desenvolvedor do AWS Cloud Map*.

O Amazon ECS executa verificações de integridade no nível do contêiner e as expõe às operações da API de verificação de integridade personalizada do AWS Cloud Map. Atualmente, isso é disponibilizado aos clientes sem nenhum custo extra. Se configurar verificações de integridade de rede adicionais para tarefas expostas publicamente, você será cobrado por essas verificações.