

# Interconexão de serviços do Amazon ECS
<a name="interconnecting-services"></a>

As aplicações executadas em tarefas do Amazon ECS muitas vezes precisam receber conexões da Internet ou se conectar a outras aplicações executadas nos serviços do Amazon ECS. Se você precisar de conexões externas da Internet, recomendamos usar o Elastic Load Balancing. Para obter mais informações sobre balanceamento de carga integrado, consulte [Uso do balanceamento de carga para distribuir o tráfego de serviço do Amazon ECS](service-load-balancing.md).

Se você precisar de uma aplicação para se conectar a outras aplicações executadas nos serviços do Amazon ECS, o Amazon ECS oferecerá as maneiras a seguir de fazer isso sem um balanceador de carga:
+ *Amazon ECS Service Connect*

  Recomendamos o Service Connect, que fornece a configuração do Amazon ECS para descoberta de serviços, conectividade e monitoramento de tráfego. Com o Service Connect, as aplicações podem usar nomes curtos e portas padrão para se conectar aos serviços do Amazon ECS no mesmo cluster e em outros clusters, inclusive entre VPCs na mesma Região da AWS.

  Ao usar o Service Connect, o Amazon ECS gerencia todas as partes da descoberta de serviços: criar os nomes que podem ser descobertos, gerenciar dinamicamente as entradas de cada tarefa à medida que as tarefas começam e são interrompidas, executar um agente em cada tarefa configurada para descobrir os nomes. Sua aplicação pode pesquisar os nomes usando a funcionalidade padrão para nomes do DNS e fazendo conexões. Caso a aplicação já faça isso, não será necessário modificá-la para usar o Service Connect.

  Você fornece a configuração completa dentro de cada serviço e definição de tarefa. O Amazon ECS gerencia as alterações nessa configuração em cada implantação de serviço, para garantir que todas as tarefas em uma implantação se comportem da mesma maneira. Por exemplo, um problema comum do DNS como descoberta de serviços é controlar uma migração. Se você alterar um nome do DNS de modo a direcionar para os novos endereços IP substitutos, poderá levar o tempo máximo de TTL antes que todos os clientes comecem a usar o novo serviço. Com o Service Connect, a implantação do cliente atualiza a configuração substituindo as tarefas do cliente. Você pode configurar o disjuntor de implantação e outras configurações de implantação para afetar as alterações do Service Connect da mesma forma que qualquer outra implantação.

  Para obter mais informações, consulte [Uso do Service Connect para conectar serviços do Amazon ECS com nomes abreviados](service-connect.md).
+ *Descoberta de serviço do Amazon ECS*

  Outra abordagem para a comunicação entre serviços é a comunicação direta por meio da descoberta de serviços. Nessa abordagem, você pode usar a integração da descoberta de serviços do AWS Cloud Map com o Amazon ECS. Usando a descoberta de serviços, o Amazon ECS sincroniza a lista de tarefas executadas com o AWS Cloud Map, que mantém um nome de host do DNS que resolve os endereços IP internos de uma ou mais tarefas desse serviço específico. Outros serviços na Amazon VPC podem usar esse nome de host do DNS para enviar tráfego diretamente a outro contêiner usando o endereço IP interno. 

  Essa abordagem de comunicação entre serviços fornece baixa latência. Não há componentes extras entre os contêineres. O tráfego viaja diretamente de um contêiner para o outro.

  Essa abordagem é adequada ao usar o modo de rede `awsvpc`, em que cada tarefa tem seu próprio endereço IP exclusivo. A maioria dos softwares é compatível apenas com o uso de registros `A` do DNS, que resolvem diretamente os endereços IP. Ao usar o modo de rede `awsvpc`, o endereço IP de cada tarefa é um registro `A`. No entanto, se você estiver usando o modo de rede `bridge`, vários contêineres podem estar compartilhando o mesmo endereço IP. Além disso, os mapeamentos dinâmicos de portas fazem com que os contêineres recebam números de porta aleatoriamente nesse único endereço IP. A essa altura, um registro `A` não é mais suficiente para a descoberta de serviços. Você também deve usar um registro `SRV`. Esse tipo de registro pode rastrear endereços IP e números de porta, mas exige que você configure as aplicações adequadamente. Algumas aplicações pré-criadas que você usa podem não oferecer suporte a registros `SRV`.

  Outra vantagem do modo de rede `awsvpc` é ter um grupo de segurança exclusivo para cada serviço. Você pode configurar esse grupo de segurança para permitir conexões de entrada somente dos serviços upstream específicos que precisam se comunicar com esse serviço.

  A principal desvantagem da comunicação direta entre serviços usando a descoberta de serviços é que você deve implementar uma lógica extra para ter repetições e lidar com falhas de conexão. Os registros DNS têm um período de vida útil (TTL) que controla por quanto tempo são armazenados em cache. Leva algum tempo para que o registro DNS seja atualizado e o cache expire para que as aplicações possam obter a versão mais recente do registro DNS. Portanto, sua aplicação pode acabar resolvendo o registro DNS de modo a direcionar para outro contêiner que não está mais lá. A aplicação precisa processar repetições e ter uma lógica para ignorar backends problemáticos.

  Para obter mais informações, consulte . [Uso da descoberta de serviços para conectar serviços do Amazon ECS com nomes DNS](service-discovery.md)
+ *Amazon VPC Lattice *

  O Amazon VPC Lattice é um serviço gerenciado de rede de aplicações usado pelos clientes do Amazon ECS para observar, proteger e monitorar aplicações criadas em serviços de computação, VPCs e contas da AWS sem precisar modificar seu código.

  O VPC Lattice usa grupos de destino, que são uma coleção de recursos computacionais. Esses destinos executam a aplicação ou serviço e podem ser instâncias do Amazon EC2, endereços IP, funções do Lambda e Application Load Balancers. Ao associarem seus serviços do Amazon ECS a um grupo de destino do VPC Lattice, os clientes agora podem habilitar tarefas do Amazon ECS como destinos IP no VPC Lattice. O Amazon ECS registra automaticamente as tarefas no grupo de destino do VPC Lattice quando as tarefas do serviço registrado são iniciadas.

  Para obter mais informações, consulte [Use o Amazon VPC Lattice para conectar, observar e proteger seus serviços do Amazon ECS](ecs-vpc-lattice.md).

## Tabela de compatibilidade de modo de rede
<a name="interconnect-network-mode-compatibility-table"></a>

A tabela a seguir inclui a compatibilidade entre essas opções e os modos de rede de tarefas. Na tabela, “client” (cliente) refere-se à aplicação que está fazendo as conexões de dentro de uma tarefa do Amazon ECS.


****  

| Opções de interconexão | Conectado | `awsvpc` | Host | 
| --- | --- | --- | --- | 
| Descoberta de serviço | sim, mas exige que os clientes conheçam os registros SRV no DNS sem hostPort. | sim | sim, mas exige que os clientes conheçam os registros SRV no DNS sem hostPort. | 
| Service Connect  | sim | sim | não | 
| VPC Lattice | sim | sim | sim | 

# Uso do Service Connect para conectar serviços do Amazon ECS com nomes abreviados
<a name="service-connect"></a>

O Amazon ECS Service Connect fornece gerenciamento da comunicação entre serviços conforme a configuração do Amazon ECS. Ele cria uma descoberta de serviços e uma malha de serviços no Amazon ECS. Isso fornece a configuração completa dentro de cada serviço que você gerencia por implantações de serviço, uma maneira unificada de consultar os serviços nos namespaces que não dependem da configuração de DNS da VPC, além de métricas e dos logs padronizados para monitorar todas as aplicações. O Service Connect apenas realiza a interconexão de serviços.

O diagrama a seguir mostra um exemplo de rede do Service Connect com duas sub-redes na VPC e dois serviços. Um serviço do cliente que executa o WordPress com uma tarefa em cada sub-rede. Um serviço de servidor que executa o MySQL com uma tarefa em cada sub-rede. Ambos os serviços são altamente disponíveis e resilientes a problemas de tarefas e zonas de disponibilidade, pois cada serviço executa várias tarefas espalhadas por duas sub-redes. As setas sólidas mostram uma conexão do WordPress com o MySQL. Por exemplo, um comando da CLI `mysql --host=mysql` executado de dentro do contêiner do WordPress na tarefa com o endereço IP `172.31.16.1`. O comando usa o nome curto `mysql` na porta padrão do MySQL. O nome e a porta se conectam ao proxy do Service Connect na mesma tarefa. O proxy na tarefa do WordPress usa balanceamento de carga round-robin e qualquer informação de falha anterior na detecção de valores discrepantes para escolher a qual tarefa do MySQL se conectar. Conforme mostrado pelas setas sólidas no diagrama, o proxy se conecta ao segundo proxy na tarefa do MySQL com o endereço IP `172.31.16.2`. O segundo proxy se conecta ao servidor MySQL local na mesma tarefa. Ambos os proxies relatam o desempenho da conexão que é visível em gráficos nos consoles Amazon ECS e Amazon CloudWatch para que você possa obter métricas de performance de todos os tipos de aplicações da mesma forma.

![\[Exemplo de rede do Service Connect mostrando serviços mínimos de HA\]](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/images/serviceconnect.png)


Os termos a seguir são usados com o Service Connect.

**nome da porta**  
A configuração de definição de tarefa do Amazon ECS que atribui um nome a um mapeamento de porta específico. Essa configuração só é usada pelo Amazon ECS Service Connect.

**alias do cliente**  
A configuração do serviço do Amazon ECS que atribui o número da porta usada no endpoint. Além disso, o alias do cliente pode atribuir o nome DNS do endpoint, substituindo o nome da descoberta. Se um nome de descoberta não for fornecido no serviço do Amazon ECS, o nome do alias do cliente substituirá o nome da porta como o nome do endpoint. Para ver exemplos de endpoints, consulte a definição de *endpoint*. Vários aliases de cliente podem ser atribuídos a um serviço do Amazon ECS. Essa configuração só é usada pelo Amazon ECS Service Connect.

**nome da descoberta**  
O nome intermediário opcional que você pode criar para uma porta especificada na definição da tarefa. Esse nome é usado para criar um serviço do AWS Cloud Map. Se esse nome não for fornecido, será usado o nome da porta da definição da tarefa. Vários nomes de descoberta podem ser atribuídos a uma porta específica de um serviço do Amazon ECS. Essa configuração só é usada pelo Amazon ECS Service Connect.  
Os nomes dos serviços do AWS Cloud Map devem ser exclusivos dentro de um namespace. Devido a essa limitação, você só pode ter uma configuração do Service Connect sem um nome de descoberta para uma definição de tarefa específica em cada namespace.

**endpoint**  
O URL para se conectar a uma API ou site. O URL contém o protocolo, um nome DNS e a porta. Para obter mais informações sobre endpoints em geral, consulte [endpoint](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#endpoint) no *Glossário da AWS* na Referência geral da Amazon Web Services.  
O Service Connect cria endpoints que se conectam aos serviços do Amazon ECS e configura as tarefas nos serviços do Amazon ECS para se conectarem aos endpoints. O URL contém o protocolo, um nome DNS e a porta. Você seleciona o protocolo e o nome da porta na definição da tarefa, pois a porta deve corresponder à aplicação que está dentro da imagem do contêiner. No serviço, você seleciona cada porta pelo nome e pode atribuir o nome DNS. Se você não especificar um nome DNS na configuração do serviço do Amazon ECS, será usado por padrão o nome da porta da definição da tarefa. Por exemplo, um endpoint do Service Connect pode ser `http://blog:80`, `grpc://checkout:8080` ou `http://_db.production.internal:99`.

**Serviço do Service Connect**  
A configuração de um único endpoint em um serviço do Amazon ECS. Isso faz parte da configuração do Service Connect, que consiste em uma única linha na **Service Connect and discovery name configuration** (Configuração do Service Connect e do nome da descoberta) no console ou em um objeto da lista `services` da configuração JSON de um serviço do Amazon ECS. Essa configuração só é usada pelo Amazon ECS Service Connect.  
Para obter mais informações, consulte [ServiceConnectService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectService.html) na Referência de API do Amazon Elastic Container Service.

**namespace**  
O nome do recurso da Amazon (ARN) abreviado ou completo do namespace AWS Cloud Map para uso com o Service Connect. O namespace deve estar na mesma Região da AWS que o serviço e o cluster do Amazon ECS. O tipo de namespace no AWS Cloud Map não afeta o Service Connect. O namespace pode ser aquele que é compartilhado com sua Conta da AWS usando o AWS Resource Access Manager (AWS RAM) nas Regiões da AWS em que AWS RAM está disponível. Para obter mais informações sobre namespaces compartilhados, consulte [Compartilhamento de namespaces do AWS Cloud Map entre contas](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) no *Guia do desenvolvedor do AWS Cloud Map*.  
O Service Connect usa o namespace AWS Cloud Map como um agrupamento lógico de tarefas do Amazon ECS que se comunicam entre si. Cada serviço do Amazon ECS pode pertencer a apenas um namespace. Os serviços em um namespace podem ser distribuídos entre diferentes clusters do Amazon ECS dentro da mesma Região da AWS. Se o namespace for compartilhado, os serviços poderão ser distribuídos entre as Contas da AWS de proprietário e consumidor do namespace. É possível organizar serviços de forma flexível, seguindo qualquer critério desejado.

**serviço de cliente**  
Um serviço que executa uma aplicação cliente de rede. Esse serviço deve ter um namespace configurado. Cada tarefa do serviço pode descobrir e se conectar a todos os endpoints do namespace por meio de um contêiner do proxy do Service Connect.  
Se algum dos seus contêineres na tarefa precisar se conectar a um endpoint em um serviço em um namespace, escolha um serviço de cliente. Se uma aplicação de frontend, de proxy reverso ou de balanceador de carga receber tráfego externo por meio de outros métodos, como o Elastic Load Balancing, ela poderá usar esse tipo de configuração do Service Connect.

**serviço cliente-servidor**  
Um serviço do Amazon ECS que executa uma aplicação de rede ou de serviço Web. Esse serviço deve ter um namespace e pelo menos um endpoint configurados. Cada tarefa do serviço pode ser acessada por meio dos endpoints. O contêiner do proxy do Service Connect recebe o nome e a porta do endpoint para direcionar o tráfego para os contêineres da aplicação na tarefa.  
Se algum dos contêineres expuser e receber tráfego de rede em uma porta, escolha um serviço cliente-servidor. Essas aplicações não precisam se conectar a outros serviços cliente-servidor no mesmo namespace, mas a configuração do cliente é necessária. Esse tipo de configuração do Service Connect pode ser utilizado por backend, middleware, camada de negócios ou pela maioria dos microsserviços. Se você quiser que uma aplicação de frontend, de proxy reverso ou de balanceador de carga receba tráfego de outros serviços configurados com o Service Connect no mesmo namespace, esses serviços deverão usar esse tipo de configuração do Service Connect.

O recurso Service Connect cria uma rede virtual de serviços relacionados. A mesma configuração de serviços pode ser usada em vários namespaces diferentes para executar conjuntos de aplicações independentes, mas idênticas. O Service Connect define o contêiner do proxy no serviço do Amazon ECS. Dessa forma, a mesma definição de tarefa pode ser usada para executar aplicações idênticas em namespaces diferentes com diferentes configurações do Service Connect. Cada tarefa realizada pelo serviço executa um contêiner proxy na tarefa.

O Service Connect é adequado para conexões entre serviços do Amazon ECS dentro do mesmo namespace. Para as seguintes aplicações, você precisa usar um método de interconexão adicional para se conectar a um serviço do Amazon ECS que esteja configurado com o Service Connect:
+ Tarefas que estão configuradas em outros namespaces
+ Tarefas que não estão configuradas para o Service Connect
+ Outras aplicações fora do Amazon ECS

Essas aplicações podem se conectar por meio do proxy do Service Connect, mas não conseguem resolver os nomes dos endpoints do Service Connect.

Para que essas aplicações resolvam os endereços IP das tarefas do Amazon ECS, é necessário usar outro método de interconexão. 

**Topics**
+ [Preços](#service-connect-pricing)
+ [Componentes do Amazon ECS Service Connect](service-connect-concepts-deploy.md)
+ [Visão geral da configuração do Amazon ECS Service Connect](service-connect-concepts.md)
+ [Amazon ECS Service Connect com Namespaces compartilhados do AWS Cloud Map](service-connect-shared-namespaces.md)
+ [Logs de acesso do Amazon ECS Service Connect](service-connect-envoy-access-logs.md)
+ [Criptografia do tráfego do Amazon ECS Service Connect](service-connect-tls.md)
+ [Configuração do Amazon ECS Service Connect com a AWS CLI](create-service-connect.md)

## Preços
<a name="service-connect-pricing"></a>
+ O preços do Amazon ECS Service Connect depende de você usar ou não a infraestrutura do AWS Fargate ou do Amazon EC2 para hospedar workloads em contêiner. Ao usar o Amazon ECS no AWS Outposts, os preços seguem o mesmo modelo de quando você está usando o Amazon EC2 diretamente. Para obter mais informações, consulte [Preços do Amazon ECS](https://aws.amazon.com/ecs/pricing).
+ O uso do Amazon ECS Service Connect não gera custos adicionais.
+ Não há cobrança adicional para o uso do AWS Cloud Map quando utilizado pelo Service Connect.
+ Os clientes pagam pelos recursos computacionais usados pelo Amazon ECS Service Connect, incluindo vCPU e memória. Como o agente do Amazon ECS Service Connect é executado dentro de uma tarefa do cliente, sua execução não gera custos adicionais. Os recursos de tarefa são compartilhados entre a workload do cliente e o agente do Amazon ECS Service Connect.
+ Quando os clientes usam a funcionalidade de criptografia de tráfego do Amazon ECS Service Connect com CA Privada da AWS, eles pagam pela autoridade de certificação privada criada e por cada certificado do TLS emitido. Para obter mais detalhes, consulte [Preço do Autoridade de Certificação Privada da AWS](https://aws.amazon.com/private-ca/pricing/). Para estimar o custo mensal dos certificados do TLS, os clientes precisam saber o número dos serviços do Amazon ECS que têm o TLS habilitado, multiplicar esse número pelo custo do certificado e depois multiplicar por seis. Como o Amazon ECS Service Connect faz automaticamente o rodízio de certificados do TLS a cada cinco dias, em média, seis certificados são emitidos por serviço do Amazon ECS, por mês.

# Componentes do Amazon ECS Service Connect
<a name="service-connect-concepts-deploy"></a>

Ao usar o Amazon ECS Service Connect, você configura cada serviço do Amazon ECS para executar uma aplicação de servidor que recebe solicitações de rede (serviço cliente-servidor) ou para executar uma aplicação cliente que faz as solicitações (serviço cliente).

Quando você se preparar para começar a usar o Service Connect, comece com um serviço de cliente-servidor. É possível adicionar uma configuração do Service Connect a um novo serviço ou a um serviço existente. O Amazon ECS cria um endpoint do Service Connect no namespace. Além disso, o Amazon ECS cria uma nova implantação no serviço para substituir as tarefas que estão em execução no momento.

As tarefas existentes e outras aplicações podem continuar a se conectar aos endpoints existentes e a aplicações externas. Se um serviço cliente-servidor adicionar tarefas por meio da ação de aumentar a escala horizontalmente, novas conexões de clientes serão balanceadas entre todas as tarefas. Se um serviço cliente-servidor for atualizado, as novas conexões de clientes serão balanceadas entre as tarefas da nova versão.

As tarefas existentes não podem ser resolvidas e conectadas ao novo endpoint. Somente novas tarefas com uma configuração do Service Connect no mesmo namespace e que começam a ser executadas após essa implantação podem ser resolvidas e fazer conexão com esse endpoint. 

Isso significa que o operador da aplicação cliente determina quando a configuração da aplicação muda, mesmo que o operador da aplicação do servidor possa alterar sua configuração a qualquer momento. A lista de endpoints no namespace poderá sofrer alterações sempre que qualquer serviço no namespace for implantado. As tarefas existentes e as tarefas de substituição mantêm o mesmo comportamento após a implantação mais recente.

Considere os seguintes exemplos:

Primeiro, suponha que você esteja criando uma aplicação que esteja disponível para a Internet pública em um único modelo do AWS CloudFormation e em uma única pilha do CloudFormation. A descoberta e a acessibilidade públicas devem ser criadas por último pelo CloudFormation, incluindo o serviço de cliente de frontend. Os serviços precisam ser criados nessa ordem para evitar um período em que o serviço do cliente de frontend esteja em execução e disponível ao público, mas um backend não. Isso evita que mensagens de erro sejam enviadas ao público durante esse período. No AWS CloudFormation, você deve usar `dependsOn` para indicar ao CloudFormation que vários serviços do Amazon ECS não podem ser executados em paralelo ou simultaneamente. Você deve adicionar `dependsOn` ao serviço de cliente de frontend para cada serviço cliente-servidor de backend ao qual as tarefas do cliente se conectam.

Em segundo lugar, suponha que exista um serviço de frontend sem a configuração do Service Connect. As tarefas estão se conectando a um serviço de backend existente. Adicione primeiro uma configuração do Service Connect de cliente-servidor ao serviço de backend, usando o mesmo nome no **DNS** ou o `clientAlias` que o frontend usa. Isso cria uma nova implantação para que toda a detecção de reversão da implantação ou o Console de gerenciamento da AWS, a AWS CLI, AWS SDKs e outros métodos revertam o serviço de backend para a implantação e a configuração anteriores. Se você estiver satisfeito com a performance e o comportamento do serviço de backend, adicione uma configuração do Service Connect de cliente ou cliente-servidor ao serviço de frontend. Somente as tarefas da nova implantação usam o proxy do Service Connect que é adicionado a essas novas tarefas. Se você tiver problemas com essa configuração, poderá reverter para sua configuração anterior usando a detecção de reversão de implantação ou o Console de gerenciamento da AWS, a AWS CLI, AWS SDKs e outros métodos para reverter o serviço de backend para a implantação e a configuração anteriores. Se você usar outro sistema de descoberta de serviços baseado no DNS em vez de no Service Connect, qualquer aplicação de frontend ou cliente começará a usar novos endpoints e uma configuração alterada do endpoint após a expiração do cache de DNS local, que normalmente leva várias horas.

## Redes
<a name="service-connect-concepts-network"></a>

Por padrão, o proxy do Service Connect atua como receptor na `containerPort` usando o mapeamento da porta de definição de tarefa. As regras do seu grupo de segurança devem permitir o tráfego de entrada (ingresso) para esta porta proveniente das sub-redes em que os clientes serão executados.

Mesmo se você definir um número de porta na configuração do serviço do Service Connect, isso não alterará a porta do serviço cliente-servidor que o proxy do Service Connect recebe. Quando você define esse número de porta, o Amazon ECS altera a porta do endpoint ao qual os serviços do cliente se conectam no proxy do Service Connect dentro dessas tarefas. O proxy no serviço cliente se conecta ao proxy no serviço cliente-servidor usando a `containerPort`.

Se você quiser alterar a porta na qual o proxy do Service Connect recebe, altere a `ingressPortOverride` na configuração do Service Connect do serviço cliente-servidor. Se você alterar esse número de porta, deverá permitir o tráfego de entrada na porta que está sendo usada pelo tráfego para esse serviço.

O tráfego que suas aplicações enviam para os serviços do Amazon ECS configurados para o Service Connect exige que a Amazon VPC e as sub-redes tenham regras de tabela de rotas e regras de ACL de rede que permitam os números de porta `containerPort` e `ingressPortOverride` que você está usando.

 É possível usar o Service Connect para enviar tráfego entre VPCs. Os mesmos requisitos para as regras da tabela de rotas, para as ACLs da rede e para os grupos de segurança se aplicam a ambas as VPCs.

Por exemplo, dois clusters criam tarefas em VPCs diferentes. Um serviço em cada cluster é configurado para usar o mesmo namespace. As aplicações nesses dois serviços podem resolver todos os endpoints no namespace sem qualquer configuração DNS da VPC. No entanto, os proxies não podem se conectar, a menos que o emparelhamento de VPC, as tabelas de rotas de VPC ou de sub-rede e as ACLs da rede da VPC permitam o tráfego nos números de porta `containerPort` e `ingressPortOverride`.

Para tarefas que usam o modo de rede `bridge`, você deve criar um grupo de segurança com uma regra de entrada que permita tráfego no intervalo dinâmico superior de portas. Em seguida, atribua o grupo de segurança a todas as instâncias do EC2 no cluster do Service Connect.

## Proxy do Service Connect
<a name="service-connect-concepts-proxy"></a>

Se você criar ou atualizar um serviço com a configuração do Service Connect, o Amazon ECS adicionará um novo contêiner a cada nova tarefa à medida que elas forem iniciadas. Esse padrão de uso de um contêiner separado é chamado de um `sidecar`. Esse contêiner não está presente na definição da tarefa e você não pode configurá-lo. O Amazon ECS gerencia a configuração do Contêiner no serviço. Isso permite reutilizar as mesmas definições de tarefa entre diversos serviços, namespaces e tarefas sem a necessidade de usar o Service Connect.

**Recursos de proxy**
+ Para definições de tarefas, é necessário configurar os parâmetros de CPU e de memória. 

  Recomendamos a adição de 256 unidades de CPU extras e pelo menos 64 MiB de memória à CPU e à memória da tarefa para o contêiner do proxy do Service Connect. No AWS Fargate, a menor quantidade de memória que você pode definir é 512 MiB. No Amazon EC2, a memória de definição de tarefa é obrigatória.
+ Para o serviço, você define a configuração do log na configuração do Service Connect.
+ Se você espera que as tarefas desse serviço recebam mais de 500 solicitações por segundo em sua carga máxima, recomendamos a adição de 512 unidades de CPU à sua CPU de tarefas nessa definição de tarefa para o contêiner do proxy do Service Connect.
+ Se você espera criar mais de 100 serviços do Service Connect no namespace ou 2.000 tarefas no total em todos os serviços do Amazon ECS dentro do namespace, recomendamos a adição de 128 MiB de memória à sua memória de tarefas para o contêiner do proxy do Service Connect. Você deve fazer isso em todas as definições de tarefa usadas por todos os serviços do Amazon ECS no namespace.

**Configuração do proxy**  
Suas aplicações se conectam ao proxy no contêiner de arquivo associado na mesma tarefa em que a aplicação está. O Amazon ECS configura a tarefa e os contêineres para que as aplicações se conectem ao proxy somente quando a aplicação estiver conectada aos nomes de endpoint no mesmo namespace. Todos os outros tráfegos não usam o proxy. O outro tráfego inclui endereços IP na mesma VPC, endpoints de serviço da AWS e tráfego externo.

**Balanceamento de carga**  
O Service Connect configura o proxy para usar a estratégia round-robin para balancear a carga entre as tarefas em um endpoint do Service Connect. O proxy local que está na tarefa de onde vem a conexão escolhe uma das tarefas no serviço cliente-servidor que fornece o endpoint.  
Por exemplo, considere uma tarefa que executa o WordPress em um serviço que está configurado como um *serviço cliente* em um namespace chamado *local*. Há outro serviço com duas tarefas que executam o banco de dados MySQL. Esse serviço é configurado para fornecer um endpoint chamado `mysql` por meio do Service Connect no mesmo namespace. Na tarefa do WordPress, a aplicação do WordPress se conecta ao banco de dados usando o nome do endpoint. As conexões para esse nome serão encaminhadas ao proxy que está em execução em um contêiner de arquivo associado na mesma tarefa. Em seguida, o proxy pode se conectar a qualquer uma das tarefas do MySQL usando a estratégia round-robin.  
Estratégias de balanceamento de carga: round-robin

**Detecção de discrepâncias**  
Esse recurso usa dados que o proxy tem sobre conexões falhadas anteriores para evitar o envio de novas conexões aos hosts que tiveram as conexões com falha. O Service Connect configura o recurso de detecção de valores discrepantes do proxy para fornecer verificações de integridade passivas.  
usando o exemplo anterior, o proxy pode se conectar a qualquer uma das tarefas do MySQL. Se o proxy fez várias conexões com uma tarefa específica do MySQL e 5 ou mais conexões falharam nos últimos 30 segundos, o proxy evitará essa tarefa do MySQL por 30 a 300 segundos.

**Novas tentativas**  
O Service Connect configura o proxy para tentar novamente a conexão que passa pelo proxy e falha, e a segunda tentativa evita o uso do host da conexão anterior. Isso garante que cada conexão por meio do Service Connect não falhe por motivos pontuais.  
Número de novas tentativas: 2

**Tempo limite**  
O Service Connect configura o proxy para aguardar o máximo de tempo até que suas aplicações cliente-servidor respondam. O valor de tempo limite padrão é 15 segundos, mas pode ser atualizado.  
Parâmetros opcionais:  
**idleTimeout**: o tempo, em segundos, durante o qual uma conexão permanece ativa, embora ociosa. Um valor de `0` desabilita `idleTimeout`.  
O padrão de `idleTimeout` para `HTTP`/`HTTP2`/`GRPC` é 5 minutos.  
O `idleTimeout` padrão para `TCP` é 1 hora.  
**perRequestTimeout**: a quantidade de tempo de espera para que o upstream responda com uma resposta completa por solicitação. Um valor `0` desativa o parâmetro `perRequestTimeout`. Isso poderá ser definido somente quando o `appProtocol` para o contêiner da aplicação for `HTTP`/`HTTP2`/`GRPC`. O padrão é 15 segundos.  
Se `idleTimeout` estiver definido para um tempo menor que `perRequestTimeout`, a conexão será fechada quando `idleTimeout` for atingido e não o `perRequestTimeout`.

## Considerações
<a name="service-connect-considerations"></a>

Considere o seguinte ao usar o Service Connect:
+ As tarefas que são executadas no Fargate devem usar a versão da plataforma `1.4.0` ou versões posteriores do Linux para Fargate a fim de usar o Service Connect.
+ A versão do agente do Amazon ECS na instância de contêiner deve ser `1.67.2` ou versões posteriores.
+ As instâncias de contêiner devem executar a versão `20230428` ou posterior da AMI do Amazon Linux 2023 otimizada para o Amazon ECS, ou a versão `2.0.20221115` da AMI do Amazon Linux 2 otimizada para o Amazon ECS para usar o Service Connect. Essas versões têm o agente do Service Connect, além do agente de contêiner do Amazon ECS. Para obter mais informações sobre o agente do Service Connect, consulte [Agente do Service Connect do Amazon ECS](https://github.com/aws/amazon-ecs-service-connect-agent) no GitHub.
+ As instâncias de contêiner devem ter a permissão `ecs:Poll` para o recurso `arn:aws:ecs:region:0123456789012:task-set/cluster/*`. Se você estiver usando `ecsInstanceRole`, não precisará adicionar outras permissões. A política gerenciada `AmazonEC2ContainerServiceforEC2Role` tem as permissões necessárias. Para obter mais informações, consulte [Função do IAM de instância de contêiner do Amazon ECS](instance_IAM_role.md).
+ As tarefas que usam o modo de rede `bridge` e o Service Connect não são compatíveis com parâmetro de definição de contêiner `hostname`.
+ As definições de tarefa devem definir o limite de memória da tarefa para usar o Service Connect. Para obter mais informações, consulte [Proxy do Service Connect](#service-connect-concepts-proxy).
+ Não há suporte para as definições de tarefas que estabelecem limites de memória do contêiner.

  É possível definir limites de memória nos seus contêineres, mas deve definir o limite de memória da tarefa como um número maior que a soma dos limites de memória dos contêineres. A CPU e a memória adicionais nos limites de tarefas que não são alocadas nos limites de contêineres são usadas pelo contêiner do proxy do Service Connect e por outros contêineres que não definem limites de contêineres. Para obter mais informações, consulte [Proxy do Service Connect](#service-connect-concepts-proxy).
+ É possível configurar o Service Connect para usar qualquer namespace do AWS Cloud Map na mesma região da mesma Conta da AWS ou compartilhado com sua Conta da AWS usando o AWS Resource Access Manager. Para obter mais informações sobre o uso de namespaces compartilhados, consulte [Amazon ECS Service Connect com Namespaces compartilhados do AWS Cloud Map](service-connect-shared-namespaces.md).
+ Cada serviço pode pertencer a somente um namespace.
+ Há suporte somente para as tarefas criadas pelos serviços. 
+ Todos os endpoints devem ser exclusivos dentro de um namespace.
+ Todos os nomes de descoberta devem ser exclusivos dentro de um namespace.
+ Você deve reimplantar os serviços existentes para que as aplicações possam resolver novos endpoints. Novos endpoints adicionados ao namespace após a implantacão mais recente não serão adicionados à configuração da tarefa. Para obter mais informações, consulte [Componentes do Amazon ECS Service Connect](#service-connect-concepts-deploy).
+ O Service Connect não exclui namespaces quando os clusters são excluídos. Você deve excluir os namespaces no AWS Cloud Map.
+ O tráfego do Application Load Balancer usa como padrão o roteamento por meio do agente do Service Connect no modo de rede `awsvpc`. Se quiser que o tráfego que não seja de serviço ignore o agente do Service Connect, use o parâmetro `[ingressPortOverride](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectService.html)` na configuração de serviço do Service Connect.
+ O Service Connect com TLS não é compatível com o modo de rede `bridge`. Só há compatibilidade com o modo de rede `awsvpc`.
+ No modo `awsvpc`, o proxy do Service Connect encaminha o tráfego para o host local IPv4 `127.0.0.1` para serviços em configurações somente IPv4 e de pilha dupla. Para serviços na configuração somente IPv6, o proxy encaminha o tráfego para o host local IPv6 `::1`. Recomendamos configurar suas aplicações para receber os dois hosts locais para uma experiência perfeita quando um serviço é atualizado da configuração somente IPv4 ou de pilha dupla para somente IPv6. Para obter mais informações, consulte [Opções da rede de tarefas do Amazon ECS para o EC2](task-networking.md) e [Opções de redes de tarefas do Amazon ECS para o Fargate](fargate-task-networking.md).

**O Service Connect não é compatível com:**
+ Contêineres do Windows
+ HTTP 1.0
+ Tarefas autônomas
+ Serviços que usam os tipos de implantação azul/verde baseada no CodeDeploy e externa
+ Instâncias de contêiner `External` para Amazon ECS Anywhere não são compatíveis com o Service Connect.
+ PPv2
+ Modo do FIPS

# Visão geral da configuração do Amazon ECS Service Connect
<a name="service-connect-concepts"></a>

Ao usar o Service Connect, existem parâmetros que você precisa configurar em seus recursos. 

A tabela a seguir descreve os parâmetros de configuração dos recursos do Amazon ECS.


| Local dos parâmetros | Tipo de aplicação | Descrição | Obrigatório | 
| --- | --- | --- | --- | 
| definição da tarefa | Cliente | Não há alterações disponíveis para o Service Connect nas definições de tarefa do cliente. | N/D | 
| definição da tarefa | Cliente-servidor | Os servidores devem adicionar campos name às portas nos portMappings de contêineres. Para obter mais informações, consulte . [portMappings](task_definition_parameters.md#ContainerDefinition-portMappings) | Sim | 
| definição da tarefa | Cliente-servidor | Opcionalmente, os servidores podem fornecer um protocolo de aplicação (por exemplo, HTTP) para receber métricas específicas do protocolo para suas aplicações de servidor (por exemplo, HTTP 5xx). | Não | 
| Definição de serviço | Cliente | Os serviços do cliente devem adicionar uma serviceConnectConfiguration para configurar o namespace a ser associado. Esse namespace deve conter todos os serviços de servidor que esse serviço precisa descobrir. Para obter mais informações, consulte [serviceConnectConfiguration](service_definition_parameters.md#Service-serviceConnectConfiguration). | Sim | 
| Definição de serviço | Cliente-servidor | Os serviços do servidor devem adicionar uma serviceConnectConfiguration para configurar os nomes de DNS, números de portas e namespace nos quais o serviço está disponível. Para obter mais informações, consulte [serviceConnectConfiguration](service_definition_parameters.md#Service-serviceConnectConfiguration). | Sim | 
| Cluster | Cliente | Os clusters podem adicionar um namespace padrão do Service Connect. Novos serviços no cluster herdam o namespace quando o Service Connect é configurado em um serviço.  | Não | 
| Cluster | Cliente-servidor | Não há alterações disponíveis para o Service Connect em clusters que se aplicam aos serviços de servidor. As definições de tarefa e os serviços do servidor devem definir a respectiva configuração. | N/D | 

**Visão geral das etapas para configurar o Service Connect**  
As etapas apresentadas a seguir fornecem uma visão geral de como configurar o Service Connect.

**Importante**  
 O Service Connect cria serviços do AWS Cloud Map em sua conta. Modificar esses recursos AWS Cloud Map registrando/cancelando manualmente o registro de instâncias, alterando os atributos da instância ou excluindo um serviço, pode causar um comportamento inesperado no tráfego da sua aplicação ou em implantações subsequentes.
 O Service Connect não oferece suporte a links na definição de tarefa.

1. Adicione os nomes das portas aos mapeamentos das portas nas definições das suas tarefas. Além disso, você pode identificar o protocolo de camada 7 da aplicação para obter métricas adicionais.

1. Crie um cluster com um namespace do AWS Cloud Map, use um namespace compartilhado ou crie o namespace separadamente. Para uma organização simples, crie um cluster com o nome desejado para o namespace e especifique o nome idêntico para o namespace. Nesse caso, o Amazon ECS cria um novo namespace HTTP com a configuração necessária. O Service Connect não usa nem cria zonas hospedadas por DNS no Amazon Route 53.

1. Configure serviços para criar endpoints do Service Connect dentro do namespace.

1. Implemente serviços para criar os endpoints. O Amazon ECS adiciona um contêiner do proxy do Service Connect a cada tarefa e cria os endpoints do Service Connect no AWS Cloud Map. Esse contêiner não é configurado na definição da tarefa e a definição da tarefa pode ser reutilizada sem modificação para criar vários serviços no mesmo namespace ou em vários namespaces.

1. Implemente aplicações clientes como serviços para conexão aos endpoints. O Amazon ECS as conecta a endpoints do Service Connect por meio do proxy do Service Connect de cada tarefa.

   As aplicações só usam o proxy para se conectar aos endpoints do Service Connect. Não há configuração adicional para usar o proxy. O proxy executa balanceamento de carga round-robin, detecção de valores discrepantes e novas tentativas. Para obter mais informações sobre o proxy, consulte [Proxy do Service Connect](service-connect-concepts-deploy.md#service-connect-concepts-proxy).

1. Monitore o tráfego por meio do proxy Service Connect no Amazon CloudWatch.

## Configuração do cluster
<a name="service-connect-concepts-cluster-defaults"></a>

É possível configurar um namespace padrão para o Service Connect ao criar ou ao atualizar o cluster. O nome do namespace que você especifica como padrão pode estar na mesma Região da AWS e conta ou na mesma Região da AWS e ser compartilhado por outra Conta da AWS usando o AWS Resource Access Manager.

Se você criar um cluster e especificar um namespace padrão do Service Connect, o cluster aguardará no status `PROVISIONING` enquanto o Amazon ECS cria o namespace. É possível ver um `attachment` no status do cluster que mostra o status do namespace. Os anexos não são exibidos por padrão na AWS CLI. Você deve adicionar `--include ATTACHMENTS` para vê-los.

Se você quiser usar um namespace compartilhado com sua Conta da AWS usando o AWS RAM, especifique o nome do recurso da Amazon (ARN) do namespace na configuração do cluster. Para obter mais informações sobre o uso de namespaces compartilhados do AWS Cloud Map, consulte [Amazon ECS Service Connect com Namespaces compartilhados do AWS Cloud Map](service-connect-shared-namespaces.md).

## Configuração de serviço
<a name="service-connect-concepts-config"></a>

O Service Connect foi projetado para exigir a configuração mínima. Você precisa definir um nome para cada mapeamento de porta que você gostaria de usar com o Service Connect na definição da tarefa. No serviço, você precisa ativar o Service Connect e selecionar um namespace em sua Conta da AWS ou um namespace compartilhado para criar um serviço de cliente. Para criar um serviço de cliente-servidor, você precisa adicionar uma única configuração do serviço do Service Connect que corresponda ao nome de um dos mapeamentos de porta. O Amazon ECS reutiliza o número da porta e o nome da porta da definição da tarefa para definir o serviço e o endpoint do Service Connect. Para substituir esses valores, você pode usar os outros parâmetros **Descoberta**, **DNS** e **Porta** no console ou `discoveryName` e `clientAliases`, respectivamente, na API do Amazon ECS.

## Configuração da verificação de integridade inicial
<a name="service-connect-concepts-health-check"></a>

O Service Connect garante que as tarefas estejam íntegras antes de rotear o tráfego para elas. Quando uma tarefa é iniciada (durante implantações, escala ou substituições), o Service Connect monitora a integridade da tarefa para garantir que ela esteja pronta para aceitar tráfego. Você deve definir verificações de integridade para o contêiner essencial em sua definição de tarefa para permitir esse comportamento.

O comportamento da verificação de integridade inicial explica possíveis atrasos na obtenção do estado em que uma tarefa está pronta para aceitar tráfego:
+ Se uma tarefa for `HEALTHY`, ela estará imediatamente disponível para o tráfego.
+ Se a integridade de uma tarefa for `UNKNOWN`, o Service Connect seguirá a configuração de verificação de integridade (consulte [Verificação de integridade](task_definition_parameters.md#container_definition_healthcheck)) dos contêineres essenciais da tarefa para calcular um tempo limite, de até `8 minutes`, antes de disponibilizá-la para o tráfego, mesmo que ela permaneça `UNKNOWN`.
+ Se uma tarefa for `UNHEALTHY`, o Amazon ECS poderá iniciar tarefas de substituição. Se nenhuma tarefa íntegra estiver disponível, sua implantação poderá ser revertida com base na configuração do serviço.

Para todo o tráfego contínuo, o Service Connect usa verificações de integridade passivas com base na detecção de valores discrepantes para rotear o tráfego com eficiência.

# Amazon ECS Service Connect com Namespaces compartilhados do AWS Cloud Map
<a name="service-connect-shared-namespaces"></a>

O Amazon ECS Service Connect oferece suporte ao uso de namespaces compartilhados do AWS Cloud Map entre várias Contas da AWS dentro da mesma Região da AWS. Esse recurso permite criar aplicações distribuídas nas quais serviços executados em diferentes Contas da AWS podem descobrir e se comunicar uns com os outros por meio do Service Connect. Os namespaces compartilhados são gerenciados usando o AWS Resource Access Manager (AWS RAM), que permite o compartilhamento seguro de recursos entre contas. Para obter mais informações sobre namespaces compartilhados, consulte [Compartilhamento de namespaces do AWS Cloud Map entre contas](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) no *Guia do desenvolvedor do AWS Cloud Map*.

**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

Quando você usa namespaces compartilhados do AWS Cloud Map com o Service Connect, serviços de várias Contas da AWS podem participar do mesmo namespace de serviço. Isso é útil especialmente para organizações com várias Contas da AWS que precisam manter a comunicação entre serviços além dos limites da conta, preservando a segurança e o isolamento.

**nota**  
Para se comunicar com serviços que estão em VPCs diferentes, você precisará configurar a conectividade entre VPCs. Isso pode ser feito usando uma conexão de emparelhamento da VPC. Para obter mais informações, consulte [Criar ou excluir uma conexão de emparelhamento da VPC](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html) no *Guia de emparelhamento da Amazon Virtual Private Cloud (VPC)*.

# Usar namespaces compartilhados do AWS Cloud Map com o Amazon ECS Service Connect
<a name="service-connect-shared-namespaces-setup"></a>

A configuração de namespaces compartilhados do AWS Cloud Map para o Service Connect envolve as seguintes etapas: proprietário do namespace criando-o, proprietário compartilhando-o por meio do AWS Resource Access Manager (AWS RAM), consumidor aceitando o compartilhamento de recursos e consumidor configurando o Service Connect para usar o namespace compartilhado.

## Etapa 1: criar o namespace do AWS Cloud Map
<a name="service-connect-shared-namespaces-create"></a>

O proprietário do namespace cria um namespace do AWS Cloud Map que será compartilhado com outras contas.

**Para criar um namespace para compartilhamento usando o Console de gerenciamento da AWS**

1. Abra o console AWS Cloud Map do em [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/).

1. Escolha **Create namespace (Criar namespace)**.

1. Insira um **nome de namespace**. Esse nome será usado pelos serviços em todas as contas participantes.

1. Para **Tipo de namespace**, escolha o tipo apropriado para o seu caso de uso:
   + **Chamadas de API**: namespaces HTTP para descoberta de serviços sem a funcionalidade de DNS.
   + **Chamadas de API e consultas ao DNS em VPCs**: namespaces de DNS privados para descoberta de serviços com consultas ao DNS privadas em uma VPC.
   + **Chamadas de API e consultas ao DNS públicas**: namespaces de DNS públicos para descoberta de serviços com consultas ao DNS públicas.

1.  Escolha **Create namespace (Criar namespace)**.

## Etapa 2: compartilhar o namespace usando o AWS RAM
<a name="service-connect-shared-namespaces-share"></a>

O proprietário do namespace usa o AWS RAM para compartilhar o namespace com outras Contas da AWS.

**Para compartilhar um namespace usando o console do AWS RAM**

1. Abra o console do AWS RAM em [https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/).

1. Escolha **Criar compartilhamento de recursos**.

1. Em **Nome**, insira um nome descritivo para o compartilhamento de recursos.

1. Na seção **Recursos**:

   1. Em **Tipo de recurso**, escolha **Namespaces do Cloud Map**.

   1. Selecione o namespace criado na etapa anterior.

1. Na seção **Permissões gerenciadas**, especifique **AWSRamPermissionCloudMapECSFullPermission**.
**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

1. Na seção **Entidades principais**, especifique as Contas da AWS com as quais você deseja compartilhar o namespace. Você pode inserir IDs de conta ou IDs de unidades organizacionais.

1. Escolha **Criar compartilhamento de recursos**.

## Etapa 3: aceitar o compartilhamento de recursos
<a name="service-connect-shared-namespaces-accept"></a>

As contas de consumidores de namespace devem aceitar o convite de compartilhamento de recursos para usar o namespace compartilhado.

**Para aceitar um convite de compartilhamento de recursos usando o console do AWS RAM**

1. Na conta de consumidor, abra o console do AWS RAM em [https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/).

1. No painel de navegação, selecione **Compartilhado comigo**; em seguida, escolha **Compartilhamentos de recursos**.

1. Selecione o convite de compartilhamento de recursos e escolha **Aceitar compartilhamento de recursos**.

1. Depois de aceitar, anote o ARN do namespace compartilhado nos detalhes do recurso. Você usará esse ARN ao configurar os serviços do Service Connect.

## Etapa 4: configurar um serviço do Amazon ECS com o namespace compartilhado
<a name="service-connect-shared-namespaces-configure"></a>

Depois de aceitar o namespace compartilhado, o consumidor do namespace pode configurar os serviços do Amazon ECS para usar o namespace compartilhado. A configuração é semelhante ao uso de um namespace normal, mas você deve especificar o ARN do namespace em vez do nome. Para obter um procedimento detalhado de criação de serviço, consulte [Criação de uma implantação de atualização contínua do Amazon ECS](create-service-console-v2.md).

**Para criar um serviço com um namespace compartilhado usando o Console de gerenciamento da AWS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, selecione o cluster no qual deseja criar o serviço.

1. Em **Serviços**, escolha **Criar**.

1. Depois de preencher outros detalhes, dependendo da sua workload, na seção **Service Connect**, escolha **Usar Service Connect**.

1. Em **Namespace**, insira o ARN completo do namespace compartilhado.

   O formato do ARN é: `arn:aws:servicediscovery:region:account-id:namespace/namespace-id`

1. Defina as configurações restantes do Service Connect conforme necessário para seu tipo de serviço (cliente ou cliente-servidor).

1. Conclua o processo de criação de serviço.

Você também pode configurar serviços usando a AWS CLI ou os SDKs da AWS especificando o ARN do namespace compartilhado no parâmetro `namespace` do `serviceConnectConfiguration`.

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }]
    }'
```

## Considerações
<a name="service-connect-shared-namespaces-considerations"></a>

Considere o seguinte ao usar namespaces compartilhados do AWS Cloud Map com o Service Connect:
+ O AWS RAM deve estar disponível na Região da AWS em que você deseja usar o namespace compartilhado.
+ O namespace compartilhado deve estar na mesma Região da AWS que os serviços e clusters do Amazon ECS.
+ Você deve usar o ARN do namespace, não o ID, ao configurar o Service Connect com um namespace compartilhado.
+ Todos os tipos de namespace são aceitos: HTTP, DNS privado e DNS público.
+ Se o acesso a um namespace compartilhado for revogado, as operações do Amazon ECS que exigirem interação com o namespace (como`CreateService`, `UpdateService` ECS `ListServicesByNamespace`) falharão. Para obter mais informações sobre como solucionar problemas de permissões com namespaces compartilhados, consulte [Solução de problemas do Amazon ECS Service Connect com namespaces compartilhados do AWS Cloud Map](service-connect-shared-namespaces-troubleshooting.md).
+ Para descoberta de serviços usando consultas ao DNS em um namespace de DNS privado compartilhado:
  + O proprietário do namespace precisará chamar `create-vpc-association-authorization` com o ID da zona hospedada privada associada ao namespace e a VPC do consumidor.

    ```
    aws route53 create-vpc-association-authorization --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
  + O consumidor do namespace precisará chamar `associate-vpc-with-hosted-zone` com o ID da zona hospedada privada.

    ```
    aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
+ Somente o proprietário do namespace pode gerenciar o compartilhamento de recursos.
+ Os consumidores de namespace podem criar e gerenciar serviços dentro do namespace compartilhado, mas não podem modificar o namespace em si.
+ Os nomes de descoberta devem ser exclusivos no namespace compartilhado, independentemente da conta que cria o serviço.
+ Os serviços no namespace compartilhado podem descobrir e se conectar a serviços de outras contas da AWS que tenham acesso ao namespace.
+ Ao habilitar o TLS para o Service Connect e usar um namespace compartilhado, a autoridade de certificação (CA) CA Privada da AWS tem como escopo o namespace. Quando o acesso ao namespace compartilhado é revogado, o acesso à CA é interrompido.
+ Ao trabalhar com um namespace compartilhado, proprietários e consumidores de namespace não têm acesso às métricas do Amazon CloudWatch entre contas, por padrão. As métricas de destino são publicadas somente em contas que possuem serviços de cliente. Uma conta que possui serviços de cliente não tem acesso às métricas recebidas por uma conta que possui serviços de cliente/servidor e vice-versa. Para permitir o acesso entre contas às métricas, configure a observabilidade entre contas do CloudWatch. Para obter mais informações sobre a configuração da observabilidade entre contas, consulte [Observabilidade entre contas do CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html) no *Guia do usuário do Amazon CloudWatch*. Para obter mais informações sobre as métricas do CloudWatch para o Service Connect, consulte [Métricas do CloudWatch do Amazon ECS](available-metrics.md).

# Solução de problemas do Amazon ECS Service Connect com namespaces compartilhados do AWS Cloud Map
<a name="service-connect-shared-namespaces-troubleshooting"></a>

Use as informações a seguir para solucionar problemas com namespaces compartilhados do AWS Cloud Map e com o Service Connect. Para obter mais informações sobre a localização de mensagens de erro, consulte [Solução de problemas do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html).

As mensagens de erro relacionadas a problemas de permissões aparecem por causa da falta de permissões ou se o acesso ao namespace for revogado. 

**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

A mensagem de erro aparece em um dos seguintes formatos:

Ocorreu um erro (ClientException) ao chamar a operação <OperationName>: o usuário: arn:aws:iam::<account-id>:user/<user-name> não está autorizado a executar: <ActionName> no recurso: <ResourceArn> porque nenhuma política baseada em recurso permite a ação <ActionName>

Os cenários a seguir podem resultar em uma mensagem de erro neste formato:

**Falha na criação ou atualização do cluster**  
Esses problemas ocorrem quando as operações do Amazon ECS, como `CreateCluster` ou `UpdateCluster` falham por causa da falta de permissões do AWS Cloud Map. As operações exigem permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:GetNamespace`
Verifique se o convite de compartilhamento de recursos foi aceito na conta do consumidor e se o ARN do namespace correto está sendo usado na configuração do Service Connect.

**Falha na criação ou atualização do serviço**  
Esses problemas ocorrem quando as operações do Amazon ECS, como `CreateService` ou `UpdateService` falham por causa da falta de permissões do AWS Cloud Map. As operações exigem permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:CreateService`
+ `servicediscovery:GetNamespace`
+ `servicediscovery:GetOperation` (para criar um novo serviço do AWS Cloud Map)
+ `servicediscovery:GetService` (para quando um serviço do AWS Cloud Map já existir)
Verifique se o convite de compartilhamento de recursos foi aceito na conta do consumidor e se o ARN do namespace correto está sendo usado na configuração do Service Connect.

**`ListServicesByNamespace` Falha na operação**  
Esse problema ocorre quando a operação `ListServicesByNamespace` do Amazon ECS falha. A operação exige permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:GetNamespace`
Para resolver esse problema:  
+ Verifique se a conta do consumidor tem a permissão `servicediscovery:GetNamespace`.
+ Use o ARN do namespace ao chamar a API, não o nome.
+ Verifique se o compartilhamento de recursos está ativo e se o convite foi aceito.

O usuário: <iam-user> não está autorizado a executar: <ActionName> no recurso: <ResourceArn> com uma negação explicita em uma política baseada em identidade.

Os cenários a seguir podem resultar em uma mensagem de erro neste formato:

**A exclusão do serviço falha e fica presa no estado `DRAINING`**  
Esse problema ocorre quando as operações `DeleteService` do Amazon ECS falham em decorrência da falta de permissão `servicediscovery:DeleteService` quando o acesso ao namespace é revogado. O serviço pode parecer ter sido excluído com êxito inicialmente, mas ficará preso no estado `DRAINING`. A mensagem de erro aparece como evento de serviço do Amazon ECS.  
Para resolver esse problema, o proprietário do namespace deve compartilhar o namespace com a conta do consumidor para permitir que a exclusão do serviço seja concluída.

**Falha na execução das tarefas do serviço**  
Esse problema ocorre quando as tarefas não são iniciadas por causa da falta de permissões. A mensagem de erro aparece como erro de tarefa interrompida. Para obter mais informações, consulte [Resolver erros de tarefa interrompida do Amazon ECS](resolve-stopped-errors.md).  
As ações do AWS Cloud Map a seguir são necessárias para executar uma tarefa:  
+ `servicediscovery:GetOperation`
+ `servicediscovery:RegisterInstance`
Certifique-se de que a conta do consumidor tenha as permissões necessárias e de que o namespace compartilhado esteja acessível.

**As tarefas não param de forma limpa ou ficam presas no estado `DEACTIVATING` ou `DEPROVISIONING`**  
Esse problema ocorre quando as tarefas não conseguem cancelar o registro do serviço do AWS Cloud Map durante o encerramento por causa da falta de permissões. O erro aparece como `statusReason` no anexo da tarefa que pode ser recuperado usando a API `DescribeTasks`. Para obter mais informações, consulte [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) na *Referência de APIs do Amazon Elastic Container Service*.  
As seguintes ações do AWS Cloud Map são necessárias para interromper uma tarefa:  
+ `servicediscovery:DeregisterInstance`
+ `servicediscovery:GetOperation`
Se o acesso ao namespace compartilhado for revogado, as tarefas poderão permanecer em um estado `DEACTIVATING` ou `DEPROVISIONING` até que o acesso ao namespace seja restaurado. Solicite que o proprietário do namespace restaure o acesso a ele.

# Logs de acesso do Amazon ECS Service Connect
<a name="service-connect-envoy-access-logs"></a>

O Amazon ECS Service Connect oferece suporte a logs de acesso para fornecer telemetria detalhada sobre solicitações individuais processadas pelo proxy do Service Connect. Os logs de acesso complementam os logs existentes da aplicação, capturando metadados de tráfego por solicitação, como métodos HTTP, caminhos, códigos de resposta, flags e informações de tempo. Isso permite a observabilidade mais profunda dos padrões de tráfego da solicitação e das interações de serviço para solução de problemas e monitoramento eficazes.

Para habilitar os logs de acesso, especifique os objetos `logConfiguration` e `accessLogConfiguration` no objeto `serviceConnectConfiguration`. Você pode configurar o formato dos logs e se eles devem incluir parâmetros de consulta no `accessLogConfiguration`. Os logs são entregues ao grupo de logs de destino pelo driver de log especificado no `logConfiguration`.

```
{
    "serviceConnectConfiguration": {
        "enabled": true,
        "namespace": "myapp.namespace",
        "services": [
            ...
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "my-envoy-log-group",
                "awslogs-region": "us-west-2",
                "awslogs-stream-prefix": "myapp-envoy-logs"
            }
        },
         "accessLogConfiguration": {
            "format": "TEXT",
            "includeQueryParameters": "ENABLED" 
        }
    }
}
```

## Considerações
<a name="service-connect-envoy-access-logs-considerations"></a>

Considere o seguinte ao habilitar o acesso aos logs de acesso:
+ Os logs de acesso e da aplicação são gravados em `/dev/stdout`. Para separar os logs de acesso dos logs da aplicação, recomendamos usar o driver de log `awsfirelens` com uma configuração Fluent Bit ou Fluentd personalizada.
+  Recomendamos usar o driver de log `awslogs` para enviar logs da aplicação e de acesso para o mesmo destino do CloudWatch.
+ os logs de acesso são aceitos nos serviços do Fargate que usam a versão da plataforma `1.4.0` e superior.
+ Os parâmetros de consulta, como ids e tokens de solicitação, são excluídos dos logs de acesso por padrão. Para incluir parâmetros de consulta nos logs de acesso, defina `includeQueryParameters` como `"ENABLED"`.

## Formatos de log de acesso
<a name="service-connect-envoy-access-logs-formats"></a>

os logs de acesso podem ser formatados em dicionários no formato JSON ou em cadeias de caracteres no formato de texto, com diferenças nos operadores de comando compatíveis para diferentes tipos de logs de acesso.

### Logs de acesso HTTP
<a name="service-connect-envoy-access-logs-formats-http"></a>

Os seguintes operadores de comando são incluídos por padrão para logs HTTP:

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration_ms": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%"
}
```

------

### Logs de acesso HTTP2
<a name="service-connect-envoy-access-logs-formats-http2"></a>

Além dos operadores de comando incluídos para logs HTTP, os logs HTTP2 incluem o operador `%STREAM_ID%` por padrão.

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%",
  "stream_id": "%STREAM_ID%"
}
```

------

### Logs de acesso gRPC
<a name="service-connect-envoy-access-logs-formats-grpc"></a>

Além dos operadores de comando incluídos para logs HTTP, os logs de acesso gRPC incluem os operadores `%STREAM_ID%` e `%GRPC_STATUS()%` por padrão.

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %GRPC_STATUS()% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "grpc_status": "%GRPC_STATUS()%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%",
  "stream_id": "%STREAM_ID%"
}
```

------

### Logs de acesso TCP
<a name="service-connect-envoy-access-logs-formats-tcp"></a>

Os seguintes operadores de comando são incluídos por padrão nos logs de acesso TCP:

------
#### [ Text ]

```
[%START_TIME%] %DOWNSTREAM_REMOTE_ADDRESS% %DOWNSTREAM_REMOTE_PORT% 
%BYTES_RECEIVED% %BYTES_SENT% %DURATION%  
%CONNECTION_TERMINATION_DETAILS% %CONNECTION_ID%\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "downstream_remote_address": "%DOWNSTREAM_REMOTE_ADDRESS%",
  "downstream_remote_port": "%DOWNSTREAM_REMOTE_PORT%",s
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "connection_termination_details": "%CONNECTION_TERMINATION_DETAILS%",
  "connection_id": %CONNECTION_ID%
}
```

------

Para obter mais informações sobre esses operadores de comando, consulte [Operadores de comando](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) na documentação do Envoy.

# Habilitar logs de acesso para o Amazon ECS Service Connect
<a name="service-connect-access-logs-configuration"></a>

Os logs de acesso não são habilitados por padrão para os serviços do Amazon ECS que usam o Service Connect. Você pode habilitar os logs de acesso das seguintes maneiras:

## Habilitar os logs de acesso usando a AWS CLI
<a name="service-connect-access-logs-configure-cli"></a>

O comando a seguir mostra como você pode habilitar os logs de acesso para um serviço do Amazon ECS usando a AWS CLI especificando um `accessLogConfiguration` ao criar o serviço:

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "my-envoy-log-group",
                "awslogs-region": "us-west-2",
                "awslogs-stream-prefix": "myapp-envoy-logs"
            }
        },
         "accessLogConfiguration": {
            "format": "TEXT",
            "includeQueryParameters": "ENABLED" 
        }
    }'
```

## Habilitar os logs de acesso usando o console
<a name="service-connect-access-logs-configure-console"></a>

Para obter um procedimento detalhado de criação de serviço, consulte [Criação de uma implantação de atualização contínua do Amazon ECS](create-service-console-v2.md).

**Para criar um serviço com um namespace compartilhado usando o Console de gerenciamento da AWS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, selecione o cluster no qual deseja criar o serviço.

1. Em **Serviços**, escolha **Criar**.

1. Depois de preencher outros detalhes, dependendo da sua workload, na seção **Service Connect**, escolha **Usar Service Connect**.

1. Defina as configurações do Service Connect conforme necessário para seu tipo de serviço (cliente ou cliente/servidor).

1. Expanda **Configuração do log de acesso**. Em **Formato**, escolha **JSON** ou `TEXT`.

1. Para incluir parâmetros de consulta nos logs de acesso, selecione **Incluir parâmetros de consulta**.

1. Conclua o processo de criação de serviço.

# Criptografia do tráfego do Amazon ECS Service Connect
<a name="service-connect-tls"></a>

O Service Connect do Amazon ECS oferece suporte à criptografia automática de tráfego com certificados Transport Layer Security (TLS) para serviços do Amazon ECS. Ao direcionar os serviços do Amazon ECS para uma [Autoridade de Certificação Privada da AWS (CA Privada da AWS)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html), o Amazon ECS provisiona automaticamente certificados TLS para criptografar o tráfego entre os serviços do Service Connect para Amazon ECS. O Amazon ECS gera, alterna e distribui certificados TLS usados na criptografia de tráfego.

A criptografia automática de tráfego com o Service Connect usa funcionalidades de criptografia líderes do setor para proteger a comunicação entre os serviços, ajudando você a cumprir os requisitos de segurança. Ela oferece suporte a certificados TLS da Autoridade de Certificação Privada da AWS com criptografia `256-bit ECDSA` e `2048-bit RSA`. Você também tem controle total sobre certificados privados e chaves de assinatura para ajudar a atender aos requisitos de conformidade. Por padrão, o TLS 1.3 é compatível, mas o TLS 1.0 a 1.2 não é. O Service Connect oferece suporte ao TLS 1.3 com as seguintes cifras:
+ `TLS_AES_128_GCM_SHA256`
+ `TLS_AES_256_GCM_SHA384`
+ `TLS_CHACHA20_POLY1305_SHA256`

**nota**  
Para usar o protocolo TLS 1.3, é necessário habilitá-lo no receptor do destino.  
Somente o tráfego de entrada e de saída que é transferido pelo agente do Amazon ECS é criptografado.

## Service Connect e verificações de integridade do Application Load Balancer
<a name="service-connect-tls-alb-healthchecks"></a>

Você pode usar o Service Connect com as verificações de integridade do Application Load Balancer e criptografia TLS 1.3. 

### Configuração do Application Load Balancer
<a name="service-connect-tls-alb-config"></a>

Defina o Application Load Balancer com as seguintes configurações:
+ Configure um receptor TLS com uma política de segurança TLS 1.3 (como “ELBSecurityPolicy-TLS13-1-2-2021-06”). Para obter mais informações, consulte [Políticas de segurança para seu Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/describe-ssl-policies.html). 
+ Crie um grupo de destino com as seguintes configurações:
  + Definir o protocolo como HTTPS
  + Anexar o grupo de destino ao receptor TLS
  + Configurar a porta de verificação de integridade para corresponder à porta de contêiner do serviço do Service Connect

### Configuração do Service Connect
<a name="service-connect-tls-sc-config"></a>

Defina um serviço com as seguintes configurações:
+ Configure o serviço para usar o modo de rede `awsvpc`, pois o modo de rede `bridge` não é compatível.
+ Habilite o Service Connect para o serviço.
+ Defina o balanceador de carga com as seguintes configurações:
  + Especificar o grupo de destino que você configurou para o Application Load Balancer
  + Definir a porta do contêiner para corresponder à porta do contêiner do serviço TLS do Service Connect
+ Evite configurar `ingressPortOverride` para o serviço. Para obter mais informações, consulte [ServiceConnectService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectService.html) na *Referência de API do Amazon Elastic Container Service*.

### Considerações
<a name="service-connect-tls-alb-considerations"></a>

Considere o seguinte ao usar o Application Load Balancer, o TLS e o Service Connect:
+ Use o modo de rede `awsvpc` em vez do modo de rede `bridge` para verificações de integridade de HTTPS ao usar o Service Connect com criptografia TLS. As verificações de integridade HTTP continuarão funcionando com o modo `bridge`.
+ Configure a porta de verificação de integridade do grupo de destino para corresponder à porta do contêiner do serviço Service Connect, não à porta HTTPS padrão (443).

## Certificados da Autoridade de Certificação Privada da AWS e Service Connect
<a name="service-connect-tls-certificates"></a>

É necessário ter o perfil do IAM de infraestrutura. Para obter mais informações sobre esse perfil, consulte [Perfil do IAM de infraestrutura do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html                     ).

**Modos da Autoridade de Certificação Privada da AWS para Service Connect**

A Autoridade de Certificação Privada da AWS pode ser executada em dois modos: de uso geral e de curta duração.
+ Uso geral: certificados que podem ser configurados com qualquer data de expiração.
+ De curta duração: certificados com validade máxima de sete dias.

Embora o Amazon ECS ofereça suporte aos dois modos, recomendamos usar certificados de curta duração. Por padrão, os certificados são alternados a cada cinco dias, e a execução em modo de curta duração oferece economias de custo significativas em relação ao de uso geral.

O Service Connect não oferece suporte à revogação de certificados. Em vez disso, utiliza certificados de curta duração com alternância frequente de certificados. Você tem autoridade para modificar a frequência de alternância, desabilitar ou excluir os segredos usando a [rotação gerenciada](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_managed.html) no [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html), mas isso pode acarretar as possíveis consequências a seguir.
+ Frequência de alternância mais curta: uma frequência de alternância mais curta incorre em custos mais altos porque CA Privada da AWS, AWS KMS, Secrets Manager e Auto Scaling enfrentam uma maior workload de alternância.
+ Frequência de alternância mais longa: as comunicações das aplicações falham se a frequência de alternância exceder **sete** dias.
+ Exclusão do segredo: excluir o segredo resulta em falha na alternância e afeta as comunicações da aplicação com o cliente.

Caso ocorra falha na alternância do segredo, um evento `RotationFailed` é publicado no [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html). Você também pode configurar um alarme do [CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) para `RotationFailed`.

**Importante**  
Não adicione regiões de réplica aos segredos. Isso evita que o Amazon ECS exclua o segredo, pois o Amazon ECS não tem permissão para remover regiões da replicação. Se você já adicionou a replicação, execute o comando a seguir.  

```
aws secretsmanager remove-regions-from-replication \
 --secret-id SecretId \
 --remove-replica-regions region-name
```

**Autoridades de certificação subordinadas**  
Você pode trazer qualquer CA Privada da AWS, raiz ou subordinado, ao protocolo TLS do Service Connect a fim de emitir certificados de entidades finais para os serviços. O emissor fornecido é tratado como signatário e raiz da confiança em todos os lugares. Você pode emitir certificados de entidade final para diferentes partes da aplicação em diferentes CAs subordinadas. Ao usar a AWS CLI, forneça o nome do recurso da Amazon (ARN) da CA para estabelecer a cadeia de confiança.

**Autoridades de certificação on-premises**  
Para usar a CA on-premises, você cria e configura uma CA subordinada na Autoridade de Certificação Privada da AWS. Isso garante que todos os certificados TLS emitidos para as workloads do Amazon ECS compartilhem a cadeia de confiança com as workloads que você executa on-premises e possam se conectar com segurança.

**Importante**  
Adicione a etiqueta **obrigatória** `AmazonECSManaged : true` em seu CA Privada da AWS. 

**Infraestrutura como código**  
Ao usar o TLS no Service Connect com as ferramentas de infraestrutura como código (IaC), é importante configurar as dependências corretamente para evitar problemas, como serviços presos no esgotamento. A chave AWS KMS, se fornecida, o perfil do IAM e as dependências de CA Privada da AWS devem ser excluídas após o serviço Amazon ECS.

Se o namespace usado para o Service Connect for compartilhado, você terá a opção de usar um recurso compartilhado do CA Privada da AWS. Para obter mais informações, consulte [Anexar uma política para acesso entre contas](https://docs.aws.amazon.com/privateca/latest/userguide/pca-ram.html) no *Guia do usuário do Autoridade de Certificação Privada da AWS*.

## Service Connect e Secrets Manager
<a name="service-connect-asm"></a>

**Quando o Amazon ECS Service Connect com criptografia TLS é usado, o serviço interage com o Secrets Manager das seguintes formas:**  
O Service Connect utiliza o perfil de infraestrutura fornecido para criar segredos no Secrets Manager. Esses segredos são usados para armazenar as chaves privadas associadas aos seus certificados TLS para criptografar o tráfego entre os serviços do Service Connect.

**Atenção**  
A criação e o gerenciamento automáticos desses segredos pelo Service Connect simplificam o processo de implementação da criptografia TLS para seus serviços. No entanto, é importante estar ciente das possíveis implicações de segurança. Outros perfis do IAM que têm acesso de leitura ao Secrets Manager podem acessar esses segredos criados automaticamente. Isso poderá expor material criptográfico confidencial a partes não autorizadas se os controles de acesso não estiverem configurados adequadamente.  
Para minimizar esse risco, siga estas práticas recomendadas:  
Gerencie e restrinja cuidadosamente o acesso ao Secrets Manager, especialmente para segredos criados pelo Service Connect.
Audite regularmente os perfis do IAM e suas permissões para garantir que o princípio do privilégio mínimo seja mantido.

Ao conceder acesso de leitura ao Secrets Manager, considere excluir as chaves privadas TLS criadas pelo Service Connect. É possível fazer isso usando uma condição em suas políticas do IAM para excluir segredos com ARNs que correspondem ao padrão:

```
"arn:aws:secretsmanager:::secret:ecs-sc!"
```

Um exemplo de política do IAM que nega a ação `GetSecretValue` a todos os segredos com o prefixo `ecs-sc!`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*"
        }
    ]
}
```

------

**nota**  
Esse é um exemplo geral e pode precisar ser ajustado com base no seu caso de uso específico e na configuração da conta da AWS. Sempre teste suas políticas do IAM minuciosamente para garantir que elas forneçam o acesso pretendido e, ao mesmo tempo, mantenham a segurança.

Ao entender como o Service Connect interage com o Secrets Manager, você pode gerenciar melhor a segurança dos seus serviços do Amazon ECS enquanto aproveita os benefícios da criptografia TLS automática.

## Service Connect e AWS Key Management Service
<a name="service-connect-kms"></a>

Você pode usar o [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) para criptografar e descriptografar os recursos do Service Connect. O AWS KMS é um serviço gerenciado pela AWS no qual você pode criar e gerenciar chaves criptográficas que protegem seus dados.

Ao usar o AWS KMS com o Service Connect, você pode optar por usar uma chave de propriedade da AWS que a AWS gerencia para você ou escolher uma chave do AWS KMS existente. Você também pode [criar uma chave do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) para usar.

**Como fornecer sua própria chave de criptografia**  
Você pode fornecer seus próprios materiais de chave ou usar um repositório de chaves externo por meio do AWS Key Management Service Import your own key into AWS KMS e especificar o nome do recurso da Amazon (ARN) dessa chave no Service Connect do Amazon ECS.

Veja abaixo um exemplo de política AWS KMS. Substitua os valores das *entradas do usuário* pelos seus.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "id",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/role-name"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyPair"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Para obter mais informações sobre políticas de chave, consulte [Creating a key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html) no *Guia do desenvolvedor do AWS Key Management Service*.

**nota**  
O Service Connect só oferece suporte a chaves de criptografia simétricas do AWS KMS. Você não pode usar nenhum outro tipo de chave do AWS KMS para criptografar os recursos do Service Connect. Para obter ajuda para determinar se uma chave do AWS KMS é simétrica, consulte [Identificar chaves do KMS assimétricas](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html#identify-asymm-keys).

Para obter mais informações sobre chaves de criptografia simétricas do AWS Key Management Service, consulte [Symmetric encryption AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks) no *Guia do desenvolvedor do AWS Key Management Service*.

# Habilitação do protocolo TLS para o Amazon ECS Service Connect
<a name="enable-service-connect-tls"></a>

Você habilita a criptografia de tráfego ao criar ou atualizar um serviço do Service Connect.

**Para habilitar a criptografia de tráfego de um serviço em um namespace existente usando o Console de gerenciamento da AWS**

1. É necessário ter o perfil do IAM de infraestrutura. Para obter mais informações sobre esse perfil, consulte [Perfil do IAM de infraestrutura do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html                     ).

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. No painel de navegação, escolha **Namespaces**.

1. Escolha o **Namespace** com o **Serviço** para o qual gostaria de habilitar a criptografia de tráfego.

1. Escolha o **Serviço** para o qual gostaria de habilitar a criptografia de tráfego.

1. Escolha **Atualizar serviço** no canto superior direito e role para baixo até a seção Service Connect.

1. Escolha **Ativar criptografia de tráfego** nas informações do serviço para habilitar o TLS.

1. Em **Perfil do TLS do Service Connect**, escolha um perfil do IAM de infraestrutura existente ou crie um novo.

1. Em **Autoridade de certificação de signatário**, escolha uma autoridade de certificação existente ou crie uma nova.

   Para obter mais informações, consulte [Certificados da Autoridade de Certificação Privada da AWS e Service Connect](service-connect-tls.md#service-connect-tls-certificates).

1. Em **Escolher uma AWS KMS key**, escolha uma chave gerenciada e de propriedade da AWS ou selecione uma chave diferente. Você também pode criar uma nova.

Para obter um exemplo de uso da AWS CLI para configurar o protocolo TLS para seu serviço, consulte [Configuração do Amazon ECS Service Connect com a AWS CLI](create-service-connect.md).

# Verificação da habilitação do protocolo TLS para o Amazon ECS Service Connect
<a name="verify-tls-enabled"></a>

O Service Connect inicia o TLS no agente do Service Connect e o encerra no agente de destino. Como resultado, o código da aplicação nunca vê interações TLS. Use as etapas apresentadas a seguir para verificar se o protocolo TLS está habilitado.

1. Inclua a CLI do `openssl` na imagem da sua aplicação.

1. Habilite o [ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) nos serviços para se conectar às tarefas via SSM. Como alternativa, é possível iniciar uma instância do Amazon EC2 na mesma Amazon VPC do serviço.

1. Recupere o IP e a porta de uma tarefa de um serviço que deseja verificar. O endereço IP da tarefa pode ser recuperado no console do AWS Cloud Map. As informações estão na página de detalhes do serviço do namespace. 

1. Faça login em qualquer uma de suas tarefas usando `execute-command` como no exemplo apresentado a seguir. Como alternativa, faça login na instância do Amazon EC2 criada na **Etapa 2**.

   ```
   $ aws ecs execute-command --cluster cluster-name \
       --task task-id  \
       --container container-name \
       --interactive \
       --command "/bin/sh"
   ```
**nota**  
Chamar o nome do DNS diretamente não revela o certificado.

1. No shell conectado, use a CLI `openssl` para verificar e visualizar o certificado anexado à tarefa.

   Exemplo:

   ```
   openssl s_client -connect 10.0.147.43:6379 < /dev/null 2> /dev/null \ 
   | openssl x509 -noout -text
   ```

   Exemplo de resposta:

   ```
   Certificate:
       Data:
           Version: 3 (0x2)
           Serial Number:
               <serial-number>
           Signature Algorithm: ecdsa-with-SHA256
           Issuer: <issuer>
           Validity
               Not Before: Jan 23 21:38:12 2024 GMT
               Not After : Jan 30 22:38:12 2024 GMT
           Subject: <subject>
           Subject Public Key Info:
               Public Key Algorithm: id-ecPublicKey
                   Public-Key: (256 bit)
                   pub:
                       <pub>
                   ASN1 OID: prime256v1
                   NIST CURVE: P-256
           X509v3 extensions:
               X509v3 Subject Alternative Name:
                   DNS:redis.yelb-cftc
               X509v3 Basic Constraints:
                   CA:FALSE
               X509v3 Authority Key Identifier:
                   keyid:<key-id>
   
               X509v3 Subject Key Identifier:
                   1D:<id>
               X509v3 Key Usage: critical
                   Digital Signature, Key Encipherment
               X509v3 Extended Key Usage:
                   TLS Web Server Authentication, TLS Web Client Authentication
       Signature Algorithm: ecdsa-with-SHA256
           <hash>
   ```

# Configuração do Amazon ECS Service Connect com a AWS CLI
<a name="create-service-connect"></a>

É possível criar um serviço do Amazon ECS para uma tarefa do Fargate que usa o Service Connect com a AWS CLI.

**nota**  
É possível usar endpoints de serviço de pilha dupla para interagir com o Amazon ECS via AWS CLI, SDKs e API do Amazon ECS sobre IPv4 e IPv6. Para obter mais informações, consulte [Usar endpoints de pilha dupla do Amazon ECS](dual-stack-endpoint.md).

## Pré-requisitos
<a name="create-service-connect-prereqs"></a>

Confira a seguir os pré-requisitos do Service Connect:
+ Verifique se a versão mais recente da AWS CLI está instalada e configurada. Para saber mais, consulte [Instalar ou atualizar para a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ O usuário do IAM tem as permissões necessárias especificadas no exemplo de política do IAM de [AmazonECS\$1FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).
+ Você tem uma VPC, uma sub-rede, uma tabela de rotas e um grupo de segurança criados para serem usados. Para obter mais informações, consulte [Criar uma nuvem privada virtual](get-set-up-for-amazon-ecs.md#create-a-vpc).
+ Você tem um perfil de execução de tarefa com o nome `ecsTaskExecutionRole` e a política gerenciada `AmazonECSTaskExecutionRolePolicy` está anexada ao perfil. Esse perfil permite que o Fargate grave os logs da aplicação NGINX e os logs do proxy do Service Connect no Amazon CloudWatch Logs. Para obter mais informações, consulte [Criar a função de execução de tarefa do](task_execution_IAM_role.md#create-task-execution-role).

## Etapa 1: criar um cluster
<a name="create-service-connect-cluster"></a>

Use as etapas a seguir para criar um cluster e um namespace do Amazon ECS.

**Para criar o cluster e o namespace AWS Cloud Map do Amazon ECS**

1. Crie um cluster do Amazon ECS denominado `tutorial` a ser usado. O parâmetro `--service-connect-defaults` define o namespace padrão do cluster. Na saída do exemplo, um namespace do AWS Cloud Map com o nome `service-connect` não existe nessa conta nem na Região da AWS. Portanto, o namespace é criado pelo Amazon ECS. O namespace é criado no AWS Cloud Map na conta e é visível com todos os outros namespaces. Portanto, use um nome que indique a finalidade.

   ```
   aws ecs create-cluster --cluster-name tutorial --service-connect-defaults namespace=service-connect
   ```

   Resultado:

   ```
   {
       "cluster": {
           "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial",
           "clusterName": "tutorial",
           "serviceConnectDefaults": {
               "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE"
           },
           "status": "PROVISIONING",
           "registeredContainerInstancesCount": 0,
           "runningTasksCount": 0,
           "pendingTasksCount": 0,
           "activeServicesCount": 0,
           "statistics": [],
           "tags": [],
           "settings": [
               {
                   "name": "containerInsights",
                   "value": "disabled"
               }
           ],
           "capacityProviders": [],
           "defaultCapacityProviderStrategy": [],
           "attachments": [
               {
                   "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
                   "type": "sc",
                   "status": "ATTACHING",
                   "details": []
               }
           ],
           "attachmentsStatus": "UPDATE_IN_PROGRESS"
       }
   }
   }
   ```

1. Verifique se o cluster foi criado:

   ```
   aws ecs describe-clusters --clusters tutorial
   ```

   Resultado:

   ```
   {
       "clusters": [
           {
               "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial",
               "clusterName": "tutorial",
               "serviceConnectDefaults": {
                   "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE"
               },
               "status": "ACTIVE",
               "registeredContainerInstancesCount": 0,
               "runningTasksCount": 0,
               "pendingTasksCount": 0,
               "activeServicesCount": 0,
               "statistics": [],
               "tags": [],
               "settings": [],
               "capacityProviders": [],
               "defaultCapacityProviderStrategy": []
           }
       ],
       "failures": []
   }
   ```

1. (opcional) verifique se o namespace foi criado no AWS Cloud Map. É possível usar o Console de gerenciamento da AWS ou a configuração normal da AWS CLI, pois ela é criada no AWS Cloud Map.

   Por exemplo, use a AWS CLI:

   ```
   aws servicediscovery get-namespace --id ns-EXAMPLE
   ```

   Resultado:

   ```
   {
       "Namespace": {
           "Id": "ns-EXAMPLE",
           "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE",
           "Name": "service-connect",
           "Type": "HTTP",
           "Properties": {
               "DnsProperties": {
                   "SOA": {}
               },
               "HttpProperties": {
                   "HttpName": "service-connect"
               }
           },
           "CreateDate": 1661749852.422,
           "CreatorRequestId": "service-connect"
       }
   }
   ```

## Etapa 2: criar o serviço para o servidor
<a name="create-service-connect-nginx-server"></a>

O recurso Service Connect é destinado à interconexão de várias aplicações no Amazon ECS. Pelo menos uma dessas aplicações precisa fornecer um serviço Web ao qual se conectar. Nessa etapa, você criará:
+ A definição de tarefa que usa a imagem oficial do contêiner NGINX não modificada e inclui a configuração do Service Connect.
+ A definição de serviço do Amazon ECS que configura o Service Connect para fornecer a descoberta de serviços e o proxy de malha de serviços para o tráfego desse serviço. A configuração reutiliza o namespace padrão da configuração do cluster para reduzir a quantidade de configuração de serviço feita para cada serviço.
+ O serviço do Amazon ECS. Ele executa uma tarefa usando a definição de tarefa e insere um contêiner adicional para o proxy do Service Connect. O proxy recebe a porta proveniente do mapeamento da porta do contêiner na definição de tarefa. Em uma aplicação cliente executada no Amazon ECS, o proxy na tarefa do cliente recebe as conexões de saída para o nome da porta de definição de tarefa, o nome da descoberta de serviços ou o nome do alias do cliente de serviço e o número da porta do alias do cliente.

**Como criar o serviço Web com o Service Connect**

1. Registre uma definição de tarefa compatível com o Fargate e use o modo de rede `awsvpc`. Siga estas etapas:

   1. Crie um arquivo denominado `service-connect-nginx.json` com o conteúdo da seguinte definição de tarefa.

      Essa definição de tarefa configura o Service Connect adicionando os parâmetros `name` e `appProtocol` ao mapeamento de portas. O nome da porta torna essa porta mais identificável na configuração do serviço quando várias portas são usadas. O nome da porta também é usado por padrão como o nome detectável para uso por outras aplicações no namespace.

      A definição da tarefa contém o perfil do IAM da tarefa, pois o serviço tem o ECS Exec ativado.
**Importante**  
Essa definição de tarefa usa a `logConfiguration` para enviar a saída do nginx de `stdout` e `stderr` para o Amazon CloudWatch Logs. Esse perfil de execução de tarefas não tem as permissões extras necessárias para a criação do grupo de logs do CloudWatch Logs. Crie o grupo de logs no CloudWatch Logs usando o Console de gerenciamento da AWS ou a AWS CLI. Se você não quiser enviar os logs do nginx para o CloudWatch Logs, poderá remover a `logConfiguration`.  
Substitua o ID da Conta da AWS no perfil de execução de tarefas pelo ID da sua Conta da AWS.

      ```
      {
          "family": "service-connect-nginx",
          "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
          "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
          "networkMode": "awsvpc",
          "containerDefinitions": [
              {
              "name": "webserver",
              "image": "public.ecr.aws/docker/library/nginx:latest",
              "cpu": 100,
              "portMappings": [
                  {
                      "name": "nginx",
                      "containerPort": 80,
                      "protocol": "tcp", 
                      "appProtocol": "http"
                  }
              ],
              "essential": true,
              "logConfiguration": {
                  "logDriver": "awslogs",
                  "options": {
                      "awslogs-group": "/ecs/service-connect-nginx",
                      "awslogs-region": "region", 
                      "awslogs-stream-prefix": "nginx"
                  }
              }
              }
          ],
          "cpu": "256",
          "memory": "512"
      }
      ```

   1. Registre a definição de tarefa usando o arquivo `service-connect-nginx.json`:

      ```
      aws ecs register-task-definition --cli-input-json file://service-connect-nginx.json
      ```

1. Crie um serviço:

   1. Crie um arquivo denominado `service-connect-nginx-service.json` com o conteúdo do serviço do Amazon ECS que você está criando. Este exemplo usa a definição de tarefa criada na etapa anterior. Uma `awsvpcConfiguration` é necessária, pois o exemplo de definição de tarefa usa o modo de rede `awsvpc`.

      Ao criar o serviço do ECS, especifique o Fargate e a versão da plataforma `LATEST` que oferece suporte ao Service Connect. Os `securityGroups` e as `subnets` devem pertencer a uma VPC que tenha os requisitos para usar o Amazon ECS. É possível obter os IDs de grupos de segurança e sub-redes no console da Amazon VPC. 

      Esse serviço configura o Service Connect adicionando o parâmetro `serviceConnectConfiguration`. O namespace não é necessário porque o cluster tem um namespace padrão configurado. As aplicações cliente em execução no ECS no namespace se conectam a esse serviço usando o `portName` e a porta no `clientAliases`. Por exemplo, esse serviço pode ser acessado usando `http://nginx:80/`, pois o nginx fornece uma página de boas-vindas no `/` do local raiz. Aplicações externas que não estão sendo executadas no Amazon ECS ou não estão no mesmo namespace podem acessar essa aplicação por meio do proxy do Service Connect usando o endereço IP da tarefa e o número da porta da definição de tarefa. Na configuração do `tls`, adicione o `arn` do certificado para `awsPcaAuthorityArn`, `kmsKey` e `roleArn` do perfil do IAM.

      Esse serviço usa uma `logConfiguration` para enviar a saída do proxy de conexão do serviço de `stdout` e `stderr` para o Amazon CloudWatch Logs. Esse perfil de execução de tarefas não tem as permissões extras necessárias para a criação do grupo de logs do CloudWatch Logs. Crie o grupo de logs no CloudWatch Logs usando o Console de gerenciamento da AWS ou a AWS CLI. Recomendamos que você crie esse grupo de logs e armazene os logs de proxy no CloudWatch Logs. Se você não quiser enviar os logs do proxy para o CloudWatch Logs, poderá remover a `logConfiguration`.

      ```
      {
          "cluster": "tutorial",
          "deploymentConfiguration": {
              "maximumPercent": 200,
              "minimumHealthyPercent": 0
          },
          "deploymentController": {
              "type": "ECS"
          },
          "desiredCount": 1,
          "enableECSManagedTags": true,
          "enableExecuteCommand": true,
          "launchType": "FARGATE",
          "networkConfiguration": {
              "awsvpcConfiguration": {
                  "assignPublicIp": "ENABLED",
                  "securityGroups": [
                      "sg-EXAMPLE"
                  ],
                  "subnets": [
                      "subnet-EXAMPLE",
                      "subnet-EXAMPLE",
                      "subnet-EXAMPLE"
                  ]
                 }
          },
          "platformVersion": "LATEST",
          "propagateTags": "SERVICE",
          "serviceName": "service-connect-nginx-service",
          "serviceConnectConfiguration": {
              "enabled": true,
              "services": [
                  {
                      "portName": "nginx",
                      "clientAliases": [
                          {
                              "port": 80
                          }
                      ],
                      "tls": {
                         "issuerCertificateAuthority": {
                            "awsPcaAuthorityArn": "certificateArn"
                         }, 
                         "kmsKey": "kmsKey", 
                         "roleArn": "iamRoleArn"
                      }
                  }
              ],
              "logConfiguration": {
                  "logDriver": "awslogs",
                  "options": {
                      "awslogs-group": "/ecs/service-connect-proxy",
                      "awslogs-region": "region",
                      "awslogs-stream-prefix": "service-connect-proxy"
                  }
              }
          },
          "taskDefinition": "service-connect-nginx"
      }
      ```

   1. Crie um serviço usando o arquivo `service-connect-nginx-service.json`:

      ```
      aws ecs create-service --cluster tutorial --cli-input-json file://service-connect-nginx-service.json
      ```

      Resultado:

      ```
      {
          "service": {
              "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/tutorial/service-connect-nginx-service",
              "serviceName": "service-connect-nginx-service",
              "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial",
              "loadBalancers": [],
              "serviceRegistries": [],
              "status": "ACTIVE",
              "desiredCount": 1,
              "runningCount": 0,
              "pendingCount": 0,
              "launchType": "FARGATE",
              "platformVersion": "LATEST",
              "platformFamily": "Linux",
              "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1",
              "deploymentConfiguration": {
                  "deploymentCircuitBreaker": {
                      "enable": false,
                      "rollback": false
                  },
                  "maximumPercent": 200,
                  "minimumHealthyPercent": 0
              },
              "deployments": [
                  {
                      "id": "ecs-svc/3763308422771520962",
                      "status": "PRIMARY",
                      "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1",
                      "desiredCount": 1,
                      "pendingCount": 0,
                      "runningCount": 0,
                      "failedTasks": 0,
                      "createdAt": 1661210032.602,
                      "updatedAt": 1661210032.602,
                      "launchType": "FARGATE",
                      "platformVersion": "1.4.0",
                      "platformFamily": "Linux",
                      "networkConfiguration": {
                          "awsvpcConfiguration": {
                              "assignPublicIp": "ENABLED",
                              "securityGroups": [
                                  "sg-EXAMPLE"
                              ],
                              "subnets": [
                                  "subnet-EXAMPLEf",
                                  "subnet-EXAMPLE",
                                  "subnet-EXAMPLE"
                              ]
                          }
                      },
                      "rolloutState": "IN_PROGRESS",
                      "rolloutStateReason": "ECS deployment ecs-svc/3763308422771520962 in progress.",
                      "failedLaunchTaskCount": 0,
                      "replacedTaskCount": 0,
                      "serviceConnectConfiguration": {
                          "enabled": true,
                          "namespace": "service-connect",
                          "services": [
                              {
                                  "portName": "nginx",
                                  "clientAliases": [
                                      {
                                          "port": 80
                                      }
                                  ]
                              }
                          ],
                          "logConfiguration": {
                              "logDriver": "awslogs",
                              "options": {
                                  "awslogs-group": "/ecs/service-connect-proxy",
                                  "awslogs-region": "us-west-2",
                                  "awslogs-stream-prefix": "service-connect-proxy"
                              },
                              "secretOptions": []
                          }
                      },
                      "serviceConnectResources": [
                          {
                              "discoveryName": "nginx",
                              "discoveryArn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-EXAMPLE"
                          }
                      ]
                  }
              ],
              "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
              "version": 0,
              "events": [],
              "createdAt": 1661210032.602,
              "placementConstraints": [],
              "placementStrategy": [],
              "networkConfiguration": {
                  "awsvpcConfiguration": {
                      "assignPublicIp": "ENABLED",
                      "securityGroups": [
                          "sg-EXAMPLE"
                      ],
                      "subnets": [
                          "subnet-EXAMPLE",
                          "subnet-EXAMPLE",
                          "subnet-EXAMPLE"
                      ]
                  }
              },
              "schedulingStrategy": "REPLICA",
              "enableECSManagedTags": true,
              "propagateTags": "SERVICE",
              "enableExecuteCommand": true
          }
      }
      ```

      A `serviceConnectConfiguration` que você forneceu aparece na primeira *implantação* da saída. À medida que você faz alterações no serviço do ECS de maneiras que precisam fazer alterações nas tarefas, uma nova implantação é criada pelo Amazon ECS.

## Etapa 3: verificar se você pode se conectar
<a name="create-service-connect-verify"></a>

Para verificar se o Service Connect está configurado e funcionando, siga estas etapas para se conectar ao serviço Web em uma aplicação externa. Em seguida, consulte as métricas adicionais que o proxy do Service Connect cria no CloudWatch.

**Para se conectar ao serviço Web em uma aplicação externa**
+ Conecte-se ao endereço IP da tarefa e à porta do contêiner usando o endereço IP da tarefa

  Use a AWS CLI para obter o ID da tarefa, usando o `aws ecs list-tasks --cluster tutorial`.

  Se suas sub-redes e seu grupo de segurança permitirem tráfego da Internet pública na porta da definição da tarefa, será possível se conectar ao IP público no seu computador. No entanto, o IP público não está disponível em “describe-tasks”. Portanto, as etapas envolvem acessar o Console de gerenciamento da AWS ou a AWS CLI do Amazon EC2 para obter os detalhes da interface de rede elástica.

  Nesse exemplo, uma instância do Amazon EC2 na mesma VPC usa o IP privado da tarefa. A aplicação é nginx, mas o cabeçalho `server: envoy` mostra que o proxy do Service Connect é usado. O proxy do Service Connect recebe a porta do contêiner vindo da definição de tarefa.

  ```
  $ curl -v 10.0.19.50:80/
  *   Trying 10.0.19.50:80...
  * Connected to 10.0.19.50 (10.0.19.50) port 80 (#0)
  > GET / HTTP/1.1
  > Host: 10.0.19.50
  > User-Agent: curl/7.79.1
  > Accept: */*
  >
  * Mark bundle as not supporting multiuse
  < HTTP/1.1 200 OK
  < server: envoy
  < date: Tue, 23 Aug 2022 03:53:06 GMT
  < content-type: text/html
  < content-length: 612
  < last-modified: Tue, 16 Apr 2019 13:08:19 GMT
  < etag: "5cb5d3c3-264"
  < accept-ranges: bytes
  < x-envoy-upstream-service-time: 0
  <
  <!DOCTYPE html>
  <html>
  <head>
  <title>Welcome to nginx!</title>
  <style>
      body {
          width: 35em;
          margin: 0 auto;
          font-family: Tahoma, Verdana, Arial, sans-serif;
      }
  </style>
  </head>
  <body>
  <h1>Welcome to nginx!</h1>
  <p>If you see this page, the nginx web server is successfully installed and
  working. Further configuration is required.</p>
  
  <p>For online documentation and support please refer to
  <a href="http://nginx.org/">nginx.org</a>.<br/>
  Commercial support is available at
  <a href="http://nginx.com/">nginx.com</a>.</p>
  
  <p><em>Thank you for using nginx.</em></p>
  </body>
  </html>
  ```

**Para visualizar as métricas do Service Connect**  
O proxy do Service Connect cria métricas de aplicações (conexão HTTP, HTTP2, gRPC ou TCP) nas métricas do CloudWatch. Ao usar o console do CloudWatch, consulte as dimensões de métricas adicionais de **DiscoveryName**, (**DiscoveryName, ServiceName, ClusterName**), **TargetDiscoveryName** e (**TargetDiscoveryName, ServiceName, ClusterName**) no namespace do Amazon ECS. Para obter mais informações sobre essas métricas e dimensões, consulte [Visualizar métricas disponíveis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) no Guia do usuário do Amazon CloudWatch Logs.

# 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.

# Criar um novo serviço Amazon ECS que usa descoberta de serviços
<a name="create-service-discovery"></a>

Saiba como criar um serviço que contém uma tarefa do Fargate que usa descoberta de serviços com a AWS CLI.

Para obter uma lista de Regiões da AWS que oferecem suporte à descoberta de serviços, consulte [Uso da descoberta de serviços para conectar serviços do Amazon ECS com nomes DNS](service-discovery.md).

Para obter informações sobre as regiões que oferecem suporte ao Fargate, consulte [Regiões com suporte para Amazon ECS no AWS Fargate](AWS_Fargate-Regions.md).

**nota**  
É possível usar endpoints de serviço de pilha dupla para interagir com o Amazon ECS via AWS CLI, SDKs e API do Amazon ECS sobre IPv4 e IPv6. Para obter mais informações, consulte [Usar endpoints de pilha dupla do Amazon ECS](dual-stack-endpoint.md).

## Pré-requisitos
<a name="create-service-discovery-prereqs"></a>

Antes de começar este tutorial, certifique-se de que os seguintes pré-requisitos foram atendidos:
+ A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações, consulte [Instalar ou atualizar para a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ As etapas descritas em [Configuração para usar o Amazon ECS](get-set-up-for-amazon-ecs.md) estão concluídas.
+ O usuário do IAM tem as permissões necessárias especificadas no exemplo de política do IAM de [AmazonECS\$1FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).
+ Você criou pelo menos uma VPC e um grupo de segurança. Para obter mais informações, consulte [Criar uma nuvem privada virtual](get-set-up-for-amazon-ecs.md#create-a-vpc).

## Etapa 1: criar os recursos da descoberta de serviços no AWS Cloud Map
<a name="create-service-discovery-namespace"></a>

Siga estas etapas para criar o namespace de descoberta de serviços e o serviço de descoberta de serviços.

1. Crie um namespace privado de descoberta de serviços do Cloud Map. Este exemplo cria um namespace denominado `tutorial`. Substitua *vpc-abcd1234* pelo ID de uma das VPCs existentes. 

   ```
   aws servicediscovery create-private-dns-namespace \
         --name tutorial \
         --vpc vpc-abcd1234
   ```

   A saída deste comando é a seguinte.

   ```
   {
       "OperationId": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e"
   }
   ```

1. Usando o `OperationId` do resultado da etapa anterior, verifique se o namespace privado foi criado com êxito. Anote o ID de namespace, pois ele será usado em comandos subsequentes.

   ```
   aws servicediscovery get-operation \
         --operation-id h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
   ```

   A saída é a seguinte:

   ```
   {
       "Operation": {
           "Id": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e",
           "Type": "CREATE_NAMESPACE",
           "Status": "SUCCESS",
           "CreateDate": 1519777852.502,
           "UpdateDate": 1519777856.086,
           "Targets": {
              "NAMESPACE": "ns-uejictsjen2i4eeg"
           }
       }
   }
   ```

1. Usando o ID do `NAMESPACE` da saída da etapa anterior, crie um serviço de descoberta de serviços. Este exemplo cria um serviço denominado `myapplication`. Anote o ID do serviço e o ARN, pois você os usará em comandos subsequentes.

   ```
   aws servicediscovery create-service \
         --name myapplication \
         --dns-config "NamespaceId="ns-uejictsjen2i4eeg",DnsRecords=[{Type="A",TTL="300"}]" \
         --health-check-custom-config FailureThreshold=1
   ```

   A saída é a seguinte:

   ```
   {
       "Service": {
          "Id": "srv-utcrh6wavdkggqtk",
           "Arn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk",
           "Name": "myapplication",
           "DnsConfig": {
               "NamespaceId": "ns-uejictsjen2i4eeg",
               "DnsRecords": [
                   {
                       "Type": "A",
                       "TTL": 300
                   }
               ]
           },
           "HealthCheckCustomConfig": {
               "FailureThreshold": 1
           },
           "CreatorRequestId": "e49a8797-b735-481b-a657-b74d1d6734eb"
       }
   }
   ```

## Etapa 2: criar os recursos do Amazon ECS
<a name="create-service-discovery-cluster"></a>

Siga estas etapas para criar seu cluster, definição de tarefa e serviço do Amazon ECS:

1. Crie um cluster do Amazon ECS. Este exemplo cria um cluster que denominado `tutorial`. 

   ```
   aws ecs create-cluster \
         --cluster-name tutorial
   ```

1. Registre uma definição de tarefa compatível com o Fargate e use o modo de rede `awsvpc`. Siga estas etapas:

   1. Crie um arquivo denominado `fargate-task.json` com o conteúdo da seguinte definição de tarefa.

      ```
      {
          "family": "tutorial-task-def",
              "networkMode": "awsvpc",
              "containerDefinitions": [
                  {
                      "name": "sample-app",
                      "image": "public.ecr.aws/docker/library/httpd:2.4",
                      "portMappings": [
                          {
                              "containerPort": 80,
                              "hostPort": 80,
                              "protocol": "tcp"
                          }
                      ],
                      "essential": true,
                      "entryPoint": [
                          "sh",
                          "-c"
                      ],
                      "command": [
                          "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
                      ]
                  }
              ],
              "requiresCompatibilities": [
                  "FARGATE"
              ],
              "cpu": "256",
              "memory": "512"
      }
      ```

   1. Registre a definição de tarefa usando `fargate-task.json`.

      ```
      aws ecs register-task-definition \
            --cli-input-json file://fargate-task.json
      ```

1. Crie um serviço do ECS seguindo estas etapas:

   1. Crie um arquivo denominado `ecs-service-discovery.json` com o conteúdo do serviço do ECS que você está criando. Este exemplo usa a definição de tarefa criada na etapa anterior. Uma `awsvpcConfiguration` é necessária, pois o exemplo de definição de tarefa usa o modo de rede `awsvpc`. 

      Ao criar o serviço do ECS, especifique o Fargate e a versão da plataforma `LATEST` que oferece suporte à descoberta de serviços. Quando o serviço de descoberta de serviços é criado no AWS Cloud Map, `registryArn` é o ARN retornado. `securityGroups` e `subnets` devem pertencer à VPC utilizada para criar o namespace do Cloud Map. É possível obter os IDs de grupos de segurança e sub-redes no console da Amazon VPC.

      ```
      {
          "cluster": "tutorial",
          "serviceName": "ecs-service-discovery",
          "taskDefinition": "tutorial-task-def",
          "serviceRegistries": [
             {
                "registryArn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk"
             }
          ],
          "launchType": "FARGATE",
          "platformVersion": "LATEST",
          "networkConfiguration": {
             "awsvpcConfiguration": {
                "assignPublicIp": "ENABLED",
                "securityGroups": [ "sg-abcd1234" ],
                "subnets": [ "subnet-abcd1234" ]
             }
          },
          "desiredCount": 1
      }
      ```

   1. Crie seu serviço do ECS usando `ecs-service-discovery.json`.

      ```
      aws ecs create-service \
            --cli-input-json file://ecs-service-discovery.json
      ```

## Etapa 3: verificar a descoberta de serviços no AWS Cloud Map
<a name="create-service-discovery-verify"></a>

Verifique se tudo foi criado corretamente consultando suas informações da descoberta de serviços. Depois que a descoberta de serviços estiver configurada, será possível usar operações de API do AWS Cloud Map ou chamar `dig` de uma instância na sua VPC. Siga estas etapas:

1. Usando o ID de serviço de descoberta de serviço, liste as instâncias da descoberta de serviço. Anote o ID da instância (marcado em negrito) para a limpeza de recursos. 

   ```
    aws servicediscovery list-instances \
          --service-id srv-utcrh6wavdkggqtk
   ```

   A saída é a seguinte:

   ```
   {
       "Instances": [
           {
               "Id": "16becc26-8558-4af1-9fbd-f81be062a266",
               "Attributes": {
                   "AWS_INSTANCE_IPV4": "172.31.87.2"
                   "AWS_INSTANCE_PORT": "80", 
                   "AVAILABILITY_ZONE": "us-east-1a", 
                   "REGION": "us-east-1", 
                   "ECS_SERVICE_NAME": "ecs-service-discovery", 
                   "ECS_CLUSTER_NAME": "tutorial", 
                   "ECS_TASK_DEFINITION_FAMILY": "tutorial-task-def"
               }
           }
       ]
   }
   ```

1. Use o namespace de descoberta de serviços, o serviço e parâmetros adicionais, como o nome do cluster do ECS, para consultar detalhes sobre as instâncias de descoberta de serviços.

   ```
   aws servicediscovery discover-instances \
         --namespace-name tutorial \
         --service-name myapplication \
         --query-parameters ECS_CLUSTER_NAME=tutorial
   ```

1. Os registros DNS criados na zona hospedada do Route 53 para o serviço de descoberta de serviço podem ser consultados com os comandos da AWS CLI a seguir:

   1. Usando o ID do namespace, obtenha informações sobre o namespace, o que inclui o ID da zona hospedada do Route 53.

      ```
      aws servicediscovery \
            get-namespace --id ns-uejictsjen2i4eeg
      ```

      A saída é a seguinte:

      ```
      {
          "Namespace": {
              "Id": "ns-uejictsjen2i4eeg",
              "Arn": "arn:aws:servicediscovery:region:aws_account_id:namespace/ns-uejictsjen2i4eeg",
              "Name": "tutorial",
              "Type": "DNS_PRIVATE",
              "Properties": {
                   "DnsProperties": {
                      "HostedZoneId": "Z35JQ4ZFDRYPLV"
                  }
              },
              "CreateDate": 1519777852.502,
              "CreatorRequestId": "9049a1d5-25e4-4115-8625-96dbda9a6093"
          }
      }
      ```

   1. Usando o ID da zona hospedada do Route 53 da etapa anterior (veja o texto em negrito), obtenha o registro de recurso definido para a zona hospedada. 

      ```
      aws route53 list-resource-record-sets \
            --hosted-zone-id Z35JQ4ZFDRYPLV
      ```

1. Você também pode consultar o DNS de uma instância na sua VPC usando `dig`.

   ```
   dig +short myapplication.tutorial
   ```

## Etapa 4: limpar
<a name="create-service-discovery-cleanup"></a>

Ao concluir este tutorial, limpe os recursos associados para evitar cobranças por recursos não utilizados. Siga estas etapas:

1. Cancele o registro das instâncias do serviço de descoberta de serviços, usando o ID do serviço e o ID da instância anotados anteriormente.

   ```
   aws servicediscovery deregister-instance \
         --service-id srv-utcrh6wavdkggqtk \
         --instance-id 16becc26-8558-4af1-9fbd-f81be062a266
   ```

   A saída é a seguinte:

   ```
   {
       "OperationId": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv"
   }
   ```

1. Usando o `OperationId` da saída da etapa anterior, verifique se as instâncias do serviço de descoberta de serviços foram canceladas com êxito.

   ```
   aws servicediscovery get-operation \ 
         --operation-id xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
   ```

   ```
   {
     "Operation": {
           "Id": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv",
           "Type": "DEREGISTER_INSTANCE",
           "Status": "SUCCESS",
           "CreateDate": 1525984073.707,
           "UpdateDate": 1525984076.426,
           "Targets": {
               "INSTANCE": "16becc26-8558-4af1-9fbd-f81be062a266",
               "ROUTE_53_CHANGE_ID": "C5NSRG1J4I1FH",
               "SERVICE": "srv-utcrh6wavdkggqtk"
           }
       }
   }
   ```

1. Exclua o serviço de descoberta de serviços usando o ID do serviço.

   ```
   aws servicediscovery delete-service \ 
         --id srv-utcrh6wavdkggqtk
   ```

1. Exclua o namespace de descoberta de serviços usando o ID do namespace.

   ```
   aws servicediscovery delete-namespace \ 
         --id ns-uejictsjen2i4eeg
   ```

   A saída é a seguinte:

   ```
   {
       "OperationId": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj"
   }
   ```

1. Usando o `OperationId` da saída da etapa anterior, verifique se o namespace da descoberta de serviços foi excluído com êxito.

   ```
   aws servicediscovery get-operation \ 
         --operation-id c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
   ```

   A saída é a seguinte:

   ```
   {
       "Operation": {
           "Id": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj",
           "Type": "DELETE_NAMESPACE",
           "Status": "SUCCESS",
           "CreateDate": 1525984602.211,
           "UpdateDate": 1525984602.558,
           "Targets": {
               "NAMESPACE": "ns-rymlehshst7hhukh",
               "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O"
           }
       }
   }
   ```

1. Atualize para`0` a contagem desejada para o serviço Amazon ECS. Isso deve ser feito para excluir o serviço na etapa seguinte.

   ```
   aws ecs update-service \
         --cluster tutorial \
         --service ecs-service-discovery \
         --desired-count 0
   ```

1. Exclua o serviço do Amazon ECS.

   ```
   aws ecs delete-service \
         --cluster tutorial \
         --service ecs-service-discovery
   ```

1. Exclua o cluster do Amazon ECS.

   ```
   aws ecs delete-cluster \
         --cluster tutorial
   ```

# Use o Amazon VPC Lattice para conectar, observar e proteger seus serviços do Amazon ECS
<a name="ecs-vpc-lattice"></a>

O Amazon VPC Lattice é um serviço totalmente gerenciado de rede de aplicações que possibilita que os clientes do Amazon ECS observem, protejam e monitorem as aplicações criadas em serviços de computação, VPCs e contas da AWS sem precisar de qualquer alteração no código.

O VPC Lattice usa grupos de destino, que são uma coleção de recursos computacionais. Esses destinos executam a aplicação ou serviço e podem ser instâncias do Amazon EC2, endereços IP, funções do Lambda e Application Load Balancers. Ao associarem seus serviços do Amazon ECS a um grupo de destino do VPC Lattice, os clientes agora podem habilitar tarefas do Amazon ECS como destinos IP no VPC Lattice. O Amazon ECS registra automaticamente as tarefas no grupo de destino do VPC Lattice quando as tarefas do serviço registrado são iniciadas.

**nota**  
Ao usar cinco configurações de VPC Lattice, seu tempo de implantação pode ser um pouco maior do que ao usar menos configurações.

Uma regra de receptor é usada para encaminhar o tráfego para um grupo de destino especificado quando as condições são atendidas. Um receptor verifica solicitações de conexão usando o protocolo na porta que você configurou. Um serviço roteia solicitações para seus destinos registrados com base nas regras definidas por você ao configurar seu receptor.

O Amazon ECS também substitui automaticamente uma tarefa quando ela não está íntegra de acordo com as verificações de saúde do VPC Lattice. Uma vez associados ao VPC Lattice, os clientes do Amazon ECS também podem aproveitar muitos outros recursos de conectividade entre computadores, segurança e observabilidade no VPC Lattice, como conexão a serviços entre clusters, VPCs e contas com AWS Resource Access Manager, integração IAM para autorização e autenticação e recursos avançados de gerenciamento de tráfego.

Os clientes do Amazon ECS podem se beneficiar do VPC Lattice conforme mostrado a seguir.
+ Maior produtividade do desenvolvedor: o VPC Lattice aumenta a produtividade do desenvolvedor, permitindo que você se concentre na criação de recursos enquanto o VPC Lattice lida com os desafios de rede, segurança e observabilidade de forma uniforme em todas as plataformas de computação.
+ Melhor postura de segurança: o VPC Lattice permite que seus desenvolvedores autentiquem e protejam facilmente a comunicação entre aplicações e plataformas de computação, apliquem criptografia em trânsito e apliquem controles de acesso granulares com políticas de autenticação do VPC Lattice. Isso permite que você adote uma postura de segurança mais forte que atenda aos principais requisitos regulatórios e de conformidade do setor.
+ Escalabilidade e resiliência aprimoradas de aplicações: o VPC Lattice permite criar uma rede de aplicações implantadas com recursos como roteamento, autenticação, autorização e monitoramento baseados em caminhos, cabeçalhos e métodos. Esses benefícios são fornecidos sem sobrecarga de recursos nas workloads e podem suportar implantações de vários clusters que geram milhões de solicitações por segundo sem adicionar latência significativa.
+ Flexibilidade de implantação com infraestrutura heterogênea: o VPC Lattice fornece recursos consistentes em todos os serviços de computação, como Amazon ECS, Fargate, Amazon EC2, Amazon EKS e Lambda e permite à sua organização a flexibilidade de escolher a infraestrutura adequada para cada aplicação.

## Como o VPC Lattice funciona com outros serviços do Amazon ECS
<a name="ecs-lattice-compatibility"></a>

Usar o VPC Lattice com o Amazon ECS pode mudar a forma como você usa outros serviços do Amazon ECS, enquanto alguns permanecem os mesmos.

**Application Load Balancers**  
Não é mais necessário criar um Application Load Balancer específico para usar com o tipo de grupo de destino do Application Load Balancer no VPC Lattice, que então se vincula ao serviço do Amazon ECS. Em vez disso, basta configurar o serviço do Amazon ECS com um grupo de destino do VPC Lattice. Você também pode optar por usar o Application Load Balancer com o Amazon ECS ao mesmo tempo.

**Implantações contínuas do Amazon ECS**  
Somente as implantações contínuas do Amazon ECS funcionam com o VPC Lattice, e o Amazon ECS insere tarefas com segurança e as remove dos serviços durante a implantação. Não há suporte a implantação de código nem a implantações azuis/verdes.

Para saber mais sobre o VPC Lattice, consulte o [Guia do usuário do Amazon VPC Lattice](https://docs.aws.amazon.com/vpc-lattice/latest/ug/what-is-vpc-lattice.html).

# Criar um serviço que usa o VPC Lattice
<a name="ecs-vpc-lattice-create-service"></a>

Você pode usar o Console de gerenciamento da AWS ou o AWS CLI para criar um serviço com o VPC Lattice.

## Pré-requisitos
<a name="create-ecs-vpc-lattice-prereqs"></a>

Antes de começar este tutorial, certifique-se de que os seguintes pré-requisitos foram atendidos:
+ A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações, consulte [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
**nota**  
É possível usar endpoints de serviço de pilha dupla para interagir com o Amazon ECS via AWS CLI, SDKs e API do Amazon ECS sobre IPv4 e IPv6. Para obter mais informações, consulte [Usar endpoints de pilha dupla do Amazon ECS](dual-stack-endpoint.md).
+ As etapas descritas em [Configuração para usar o Amazon ECS](get-set-up-for-amazon-ecs.md) estão concluídas.
+ O usuário do IAM tem as permissões necessárias especificadas no exemplo de política do IAM de [AmazonECS\$1FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).

## Criar um serviço que usa o VPC Lattice com o Console de gerenciamento da AWS
<a name="ecs-lattice-create-console"></a>

Siga estas etapas para criar um serviço com o VPC Lattice usando o Console de gerenciamento da AWS.

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página de navegação, escolha **Clusters**.

1. Na página **Clusters**, selecione o cluster no qual o serviço será criado.

1. Na guia **Services** (Serviços), escolha **Create** (Criar).

   Se você nunca criou um serviço antes, siga as etapas encontradas em [Criar um serviço do Amazon ECS usando o console](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html) e continue com estas etapas ao chegar à seção VPC Lattice.

1. Selecione o botão para **Ativar o VPC Lattice**.

1. Para usar um perfil existente, em **Perfil da infraestrutura do ECS para Amazon ECS**, escolha um que você já criou para usar ao criar o grupo de destino da VPC Lattice. Para criar um novo perfil, selecione **Criar perfil da infraestrutura do ECS**.

1. Escolha a **VPC**.

   A **VPC** depende do modo de rede que você selecionou ao registrar sua definição de tarefa. Se você usar o modo `host` ou `network` com o EC2, escolha sua VPC. 

   Para o modo `awsvpc`, a VPC será selecionada automaticamente com base na VPC que você escolheu em **Rede** e não poderá ser alterada.

1. Em **Grupos de destino**, escolha um ou mais grupos de destino. Escolha pelo menos um grupo de destino e, no máximo, cinco. Escolha **Adicionar grupo de destino** para adicionar mais grupos de destino. Escolha o **Nome da porta**, o **Protocolo** e a **Porta** para cada grupo de destino escolhido. Para excluir um grupo de destino, escolha **Remover**.
**nota**  
Se desejar adicionar grupos de destino existentes, será necessário usar a AWS CLI. Para obter instruções sobre como adicionar grupos de destino usando o AWS CLI, consulte [register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html) na *Referência do AWS Command Line Interface*.
Embora um serviço do VPC Lattice possa ter vários grupos de destino, cada grupo de destino só pode ser adicionado a um serviço.
Para criar um serviço em uma configuração somente IPv6, escolha grupos de destino com um tipo de endereço IP `IPv6`.

1. Nesse ponto, navegue até o console do VPC Lattice para continuar a configuração. É aqui que você inclui seus novos grupos de destino na ação padrão do receptor ou nas regras de um serviço do VPC Lattice existente. 

   Para obter mais informações, consulte [Regras de receptor para o serviço do VPC Lattice](https://docs.aws.amazon.com/vpc-lattice/latest/ug/listener-rules.html).

**Importante**  
É necessário permitir o prefixo `vpc-lattice` da regra de entrada em seu grupo de segurança. Caso contrário, as tarefas e verificações de integridade poderão falhar. 

## Criar um serviço que usa o VPC Lattice com a AWS CLI
<a name="ecs-lattice-create-cli"></a>

Use a AWS CLI para criar um serviço com o VPC Lattice. Substitua cada *espaço reservado para entrada do usuário* por suas próprias informações.

1. Crie um arquivo de configuração de grupo de destino. O exemplo a seguir é denominado `tg-config.json`

   ```
   {
       "ipAddressType": "IPV4",
       "port": 443,
       "protocol": "HTTPS",
       "protocolVersion": "HTTP1",
       "vpcIdentifier": "vpc-f1663d9868EXAMPLE"
   }
   ```

1. Use o comando a seguir para criar um grupo de destino do VPC Lattice.

   ```
   aws vpc-lattice create-target-group \
       --name my-lattice-target-group-ip \
       --type IP \
       --config file://tg-config.json
   ```
**nota**  
Para criar um serviço em uma configuração somente IPv6, crie grupos de destino com um tipo de endereço IP `IPv6`. Para obter mais informações, consulte [create-target-group](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-target-group.html) na *Referência de comandos da AWS CLI*.

   Resultado do exemplo:

   ```
   {
       "arn": "arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-0eaa4b9ab4EXAMPLE",
       "config": {
           "healthCheck": {
               "enabled": true,
               "healthCheckIntervalSeconds": 30,
               "healthCheckTimeoutSeconds": 5,
               "healthyThresholdCount": 5,
               "matcher": {
                   "httpCode": "200"
               },
               "path": "/",
               "protocol": "HTTPS",
               "protocolVersion": "HTTP1",
               "unhealthyThresholdCount": 2
           },
           "ipAddressType": "IPV4",
           "port": 443,
           "protocol": "HTTPS",
           "protocolVersion": "HTTP1",
           "vpcIdentifier": "vpc-f1663d9868EXAMPLE"
       },
       "id": "tg-0eaa4b9ab4EXAMPLE",
       "name": "my-lattice-target-group-ip",
       "status": "CREATE_IN_PROGRESS",
       "type": "IP"
   }
   ```

1. O arquivo JSON a seguir, chamado *ecs-service-vpc-lattice.json*, é um exemplo usado para anexar um serviço do Amazon ECS a um grupo de destino do VPC Lattice. O `portName` no exemplo abaixo é o mesmo que você definiu no campo `name` da propriedade `portMappings` da definição da sua tarefa.

   ```
   {
       "serviceName": "ecs-service-vpc-lattice",
       "taskDefinition": "ecs-task-def",
           "vpcLatticeConfigurations": [
           {
               "targetGroupArn": "arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-0eaa4b9ab4EXAMPLE",
               "portName": "testvpclattice",
               "roleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleVpcLattice"
           }
       ],
       "desiredCount": 5,
       "role": "ecsServiceRole"
   }
   ```

   Use o comando a seguir para criar um serviço do Amazon ECS e anexá-lo ao grupo de destino do VPC Lattice usando o exemplo de json acima.

   ```
   aws ecs create-service \
       --cluster clusterName \
       --serviceName ecs-service-vpc-lattice \
       --cli-input-json file://ecs-service-vpc-lattice.json
   ```

**nota**  
A VPC Lattice não é compatível com o Amazon ECS Anywhere.