O blog da AWS

Novo — Amazon ECS Service Connect, permitindo fácil comunicação entre microsserviços

Por Channy Yun, Principal Developer Advocate e adaptado para Português por Marcelo Moras, Arquiteto de Soluções para Enterprise.

As arquiteturas de microsserviços são uma abordagem de desenvolvimento de software bem conhecida para criar aplicativos compostos por pequenos serviços independentes que se comunicam por meio de interfaces de programação de aplicativos (APIs) bem definidas. Os clientes enfrentaram desafios quando começaram a dividir seus aplicativos monolíticos em microsserviços, pois isso requer conhecimento especializado em rede para se comunicar internamente com outros microsserviços.

Os clientes do Amazon Elastic Container Services (Amazon ECS) têm várias soluções de serviço a serviço, mas cada uma traz alguns desafios e complicações: 1) O Elastic Load Balancing (ELB) precisa ser planejado cuidadosamente para configuração de infraestrutura de alta disponibilidade e está sujeito a custos adicionais de infraestrutura. 2) O uso do Amazon ECS Service Discovery geralmente exige que os desenvolvedores escrevam códigos de aplicativos personalizados para coletar métricas de tráfego e tornar as chamadas de rede resilientes. 3) Soluções de service mesh, como o AWS App Mesh, rodam fora do Amazon ECS, apesar de ter recursos avançados de monitoramento de tráfego e roteamento entre serviços.

Hoje, estamos anunciando a disponibilidade geral do Amazon ECS Service Connect, um novo recurso que simplifica a criação e a operação de aplicativos distribuídos resilientes. O ECS Service Connect fornece uma fácil configuração de rede e uma comunicação de serviço transparente implantada em vários clusters ECS e redes virtuais privadas (VPCs). Você pode adicionar uma camada de resiliência à comunicação do serviço ECS e obter insights de tráfego sem alterações no código do aplicativo.

Com o ECS Service Connect, você pode referir-se e  conectar-se aos seus serviços por meio de nomes lógicos usando um namespace fornecido pelo AWS Cloud Map e distribuir automaticamente o tráfego entre as tarefas do ECS sem implantar e configurar balanceadores de carga. Você pode definir alguns padrões para resiliência de tráfego, como verificação de integridade, tentativas automáticas para erros 503 e drenagem de conexão para cada um dos seus serviços ECS. Além disso, o console do Amazon ECS fornece painéis de fácil utilização com métricas de tráfego de rede em tempo real para conveniência operacional e depuração simplificada.

Introdução ao Amazon ECS Service Connect

Para começar a usar o ECS Service Connect, você pode especificar um namespace como parte da criação de um cluster ECS ou criar um no Cloud Map. Um namespace representa uma forma de estruturar seus serviços e pode abranger vários clusters ECS que residem em diferentes VPCs. Todos os serviços do ECS que pertencem a um namespace específico podem se comunicar com os serviços existentes nos namespaces, desde que haja conectividade em nível de rede.

Você também pode ver uma lista de namespaces do Cloud Map em Namespaces no painel de navegação esquerdo do console do Amazon ECS. Quando você seleciona um namespace, ele mostra uma lista de serviços com o mesmo namespace de dois clusters ECS diferentes com serviços de banco de dados (db-mysql, db-redis) e serviços de back-end (webui, appserver).

Ao criar um cluster ECS, você pode selecionar um dos namespaces nos namespaces padrão na configuração de rede. O ECS Service Connect está habilitado para todos os novos serviços ECS executados nas instâncias AWS Fargate e Amazon EC2. Para habilitar em todos os serviços existentes, você precisa reimplantar com uma nova versão da Amazon Machine Image (AMI) otimizada para ECS ou com um novo agente do Fargate compatível com o ECS Service Connect.

Ou você pode simplesmente criar um cluster por meio da AWS Command Line Interface (AWS CLI) com o service-connect-default e um nome de namespace padrão do Cloud Map para fins de descoberta de serviços.

$ aws ecs create-cluster
     --cluster "svc-cluster-2"
     --service-connect-defaults '{ "namespace": "svc-namespace" }'

Esse comando criará um cluster ECS com o namespace em nome da AWS. Se você quiser usar um namespace já existente do Cloud Map, basta passar o nome do namespace existente.

Em seguida, vamos criar um serviço usando uma definição de tarefa existente chamada webui-svc-cluster e expor seu servidor de interface de usuário da web usando o ECS Service Connect. Para usar o Service Connect, você precisa adicionar nomes de portas na definição da tarefa. Para o comando a seguir, o nome da porta é webui-portna definição da tarefa.

$ aws ecs create-service \
--cluster "svc-cluster-2" \
--service-name "webui" \
--desired-count 1 \
--task-definition "webui-svc-cluster" \
--service-connect-configuration '{ "enabled": true, "namespace": "svc-namespace", "services": [ { "portName": "webui-port", "clientAliases": [ { "port": 80, "dnsName": "webui" } ] } ] }'

Nesse comando, portName representa uma referência à porta do contêiner, e clientAliases atribui o número da porta e o nome DNS, substituindo o nome de descoberta usado no endpoint. Cada serviço tem uma URL de endpoint que contém o protocolo, um nome DNS e a porta. Você pode selecionar o protocolo e o nome da porta na definição da tarefa ou na configuração do serviço ECS. Por exemplo, um endpoint pode ser http://webui:80, grpc://appserver:8080, ou http://db-redis:8888.

No console do ECS, você pode ver essa configuração do ECS Service Connect para o serviço webui no cluster svc-cluster-2 cluster.

Como você pode ver, você pode executar as mesmas cargas de trabalho em clusters diferentes com o mesmo clientAlias e nome de namespace para alta disponibilidade. O ECS Service Connect irá balancear de forma inteligente a carga do tráfego para as tarefas do ECS. Para se conectar a serviços executados em diferentes clusters ECS, você precisa especificar o mesmo nome de namespace para todos os serviços do ECS que precisam comunicar-se entre si. O ECS Service Connect tornará seus serviços detectáveis para todos os outros serviços no mesmo namespace.

Melhorando a resiliência do serviço com dados de observabilidade

 Você pode coletar métricas de tráfego com os recursos de observabilidade do ECS Service Connect. Por padrão, para cada serviço ECS, você pode ver o número de endpoints íntegros e não íntegros, juntamente com o volume de tráfego de entrada e saída.

O ECS Service Connect oferece suporte aos protocolos HTTP/1, HTTP/2, gRPC e TCP. Assim, você pode coletar o número de solicitações, o número de erros HTTP e a latência média das chamadas. Para gRPC e TCP, você pode ver o número total de conexões ativas. Todas essas métricas são enviadas para o Amazon CloudWatch ou outros serviços de análise da AWS por meio de roteamento de log personalizado.

No menu Avançado, você pode publicar registros do ECS Service Connect Agent para obter ajuda na depuração em caso de problemas.

Essas métricas só são visíveis na interface original do console do CloudWatch. Ao usar o console do CloudWatch, alterne para a interface original para ver as dimensões adicionais de métricas de “nome da descoberta” e “nome da descoberta do destino” no agrupamento ECS.

As configurações padrão fornecem um ponto de partida para a criação de aplicativos resilientes, e você pode ajustar os parâmetros para limitar o impacto de falhas, picos de latência e flutuações de rede no comportamento do seu aplicativo usando o AWS Management Console ou APIs ECS dedicadas.

Disponível agora

O Amazon ECS Service Connect está disponível em todas as regiões comerciais, exceto na China, onde o Amazon ECS está disponível. O ECS Service Connect é totalmente compatível com o AWS CloudFormation, AWS CDK, AWS Copilot e AWS Proton para provisionamento de infraestrutura, implantação de código e monitoramento de seus serviços. Para saber mais, consulte o Guia do desenvolvedor do Amazon ECS Service Connect.

Meus colegas, Hemanth AVS, especialista sênior em contêineres SA, e Satya Vajrapu, consultor sênior de DevOps, prepararam um workshop prático para demonstrar um exemplo do ECS Service Connect. Junte-se a CON303 Networking, a malha de serviços e a descoberta de serviços com o Amazon ECS ao participar do AWS re:Invent 2022.

Experimente e envie feedback para AWS re:post para Amazon ECS ou por meio de seus contatos habituais de suporte da AWS.

Channy

Sobre o Autor

Channy Yun é Principal Developer Advocate da AWS, apaixonado por ajudar os desenvolvedores a criar aplicativos modernos nos serviços mais recentes da AWS. Desenvolvedor e blogueiro pragmático, adora o aprendizado orientado pela comunidade e o compartilhamento de tecnologia, que canalizou desenvolvedores para grupos de usuários globais da AWS. Seus principais tópicos são código aberto, contêiners, armazenamento, redes, segurança e IoT. Siga-o no Twitter em @channyun.

 

 

Biografia do Tradutor

Marcelo Moras é Arquiteto de Soluções na AWS atendendo clientes Enterprise com foco em mercado financeiro. Com mais de 15 anos de experiência atuando com infraestrutura, administração de sistemas, redes, containers e segurança.