Conceitos do Connect Service - Amazon ECS

Conceitos do Connect Service

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 que o serviço do Amazon ECS realiza executa um contêiner do 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 do Amazon ECS que estão configuradas em outros namespaces

  • Tarefas do Amazon ECS 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 ECS, é necessário usar outro método de interconexão. Para obter uma lista de métodos de interconexão, consulte Escolher um método de interconexão.

Terminologia do Service Connect

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 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 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 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 na mesma Conta da AWS. Como cada cluster pode executar tarefas de todos os tipos de sistemas operacionais, arquitetura de CPU, VPC e dos tipos EC2, Fargate e Externa, você pode organizar livremente seus serviços de acordo com qualquer critério de sua escolha.

serviço de cliente

Um serviço do Amazon ECS 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 front-end, 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 está definida. Um back-end, um middleware, uma camada de negócios ou a maioria dos microsserviços usaria esse tipo de configuração do Service Connect. Se você quiser que uma aplicação de front-end, 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.

Configuração do cluster

É possível definir um namespace padrão para o Service Connect quando criar o cluster ou atualizando o cluster. Se você especificar um nome de namespace que não existe na mesma conta e Região da AWS, será criado um novo namespace HTTP.

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.

Configuração de serviço do Service Connect

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 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 Discovery (Descoberta), DNS e Port (Porta) no console ou no discoveryName e no clientAliases, respectivamente, na API do Amazon ECS.

O exemplo a seguir mostra cada tipo de configuração do Service Connect sendo usada em conjunto no mesmo serviço do Amazon ECS. São fornecidos comentários do shell. Entretanto, observe que a configuração JSON usada nos serviços do Amazon ECS não é compatível com comentários.

{ ... serviceConnectConfiguration: { enabled: true, namespace: "internal", #config for client services can end here, only these two parameters are required. services: [{ portName: "http" }, #minimal client - server service config can end here.portName must match the "name" parameter of a port mapping in the task definition. { discoveryName: "http-second" #name the discoveryName to avoid a Task def port name collision with the minimal config in the same Cloud Map namespace portName: "http" }, { clientAliases: [{ dnsName: "db", port: 81 }] #use when the port in Task def is not the port that client apps use.Client apps can use http: //db:81 to connect discoveryName: "http-three" portName: "http" }, { clientAliases: [{ dnsName: "db.app", port: 81 }] #use when the port in Task def is not the port that client apps use.duplicates are fine as long as the discoveryName is different. discoveryName: "http-four" portName: "http", ingressPortOverride: 99 #If App should also accept traffic directly on Task def port. } ] } }

Ordem de implantação

Ao usar o Amazon ECS Service Connect, você configura cada serviço do Amazon ECS para executar uma aplicação de servidor que receba solicitações de rede (serviço cliente-servidor) ou para executar uma aplicação cliente que faça as solicitações (serviço de 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. Depois que você edita e atualiza um serviço do Amazon ECS para adicionar uma configuração do Service Connect, 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 de cliente-servidor adicionar tarefas ao aumentar a escala horizontalmente, novas conexões dos clientes serão imediatamente equilibradas entre todas as tarefas. Se um serviço de cliente-servidor for atualizado, novas conexões dos clientes serão imediatamente equilibradas entre as tarefas da nova versão.

As tarefas existentes não podem ser resolvidas e conectadas ao novo endpoint. Somente novas tarefas do Amazon ECS que tenham 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 conectadas a esse endpoint. Por exemplo, um serviço do Amazon ECS que execute uma aplicação do cliente deve ser reimplantado para se conectar a um novo endpoint de servidor de banco de dados. Inicie a implantação do cliente após a conclusão da implantação no servidor.

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 pode mudar toda vez que qualquer serviço do Amazon ECS no namespace é implantado, mas as tarefas existentes e as tarefas de substituição continuam a se comportar da mesma forma como faziam 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 AWS CloudFormation. A descoberta e a acessibilidade públicas devem ser criadas por último pelo AWS CloudFormation, incluindo o serviço de cliente de front-end. Os serviços precisam ser criados nessa ordem para evitar um período em que o serviço do cliente de front-end esteja em execução e disponível ao público, mas um back-end 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 AWS 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 front-end para cada serviço cliente-servidor de back-end ao qual as tarefas do cliente se conectam.

Em segundo lugar, suponha que exista um serviço de front-end sem a configuração do Service Connect. As tarefas estão se conectando a um serviço de back-end existente. Adicione primeiro uma configuração do Service Connect de cliente-servidor ao serviço de back-end, usando o mesmo nome no DNS ou o clientAlias que o front-end usa. Isso cria uma nova implantação para que toda a detecção de reversão da implantação ou o AWS Management Console, a AWS CLI, AWS SDKs e outros métodos revertam o serviço de back-end para a implantação e a configuração anteriores. Se você estiver satisfeito com a performance e o comportamento do serviço de back-end, adicione uma configuração do Service Connect de cliente ou cliente-servidor ao serviço de front-end. 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 AWS Management Console, a AWS CLI, AWS SDKs e outros métodos para reverter o serviço de back-end 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 front-end 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

Na configuração padrão, o proxy do Service Connect recebe o mapeamento na containerPort vindo do mapeamento da porta na definição da tarefa. Você precisa de regras em seu grupo de segurança para permitir a entrada nessa porta a partir dos CIDRs da VPC ou, especificamente, das sub-redes nas quais 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 nessa porta no grupo de segurança da Amazon VPC que é usado 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 ingressOverridePort que você está usando.

É possível enviar tráfego entre VPCs com o Service Connect. Você deve considerar os mesmos requisitos para as regras da tabela de rotas, ACLs de rede e grupos de segurança que se aplicam às duas 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 da VPC, as tabelas de rotas da VPC ou da sub-rede e as ACLs da rede VPC permitam o tráfego nos números de porta containerPort e ingressOverridePort que você está usando

Proxy do Service Connect

Se você criar ou atualizar um serviço do Amazon ECS 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 desse contêiner no serviço do Amazon ECS. Por isso, você pode reutilizar as mesmas definições de tarefa entre vários serviços e namespaces do Amazon ECS e também pode executar tarefas sem o Service Connect.

Recursos de proxy
  • Os limites de CPU e memória da tarefa são os únicos parâmetros que você precisa configurar para esse contêiner na definição da tarefa. O único parâmetro que você precisa configurar para esse contêiner no serviço do Amazon ECS é a configuração de log, que você encontrará na configuração do Service Connect. Para obter mais informações sobre a configuração do Service Connect, consulte Configuração de serviço do Service Connect.

  • A definição da tarefa deve definir o limite de memória da tarefa para usar o Service Connect. A CPU e a memória adicionais nos limites de tarefas que você não aloca nos limites de contêineres em seus outros 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.

  • Recomendamos a adição de 256 unidades de CPU 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 tarefas é opcional, mas é necessária para o 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 só se conectem ao proxy se a aplicação estiver se conectando aos nomes dos endpoints 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 execute o WordPress em um serviço Amazon ECS configurado como um serviço de 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. Por causa da configuração do Service Connect, as conexões com esse nome vão para o proxy que é executado 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.

Por exemplo, considere uma tarefa que execute o WordPress em um serviço do Amazon ECS configurado como um serviço de cliente em um namespace denominado 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 WordPress se conecta ao proxy que é executado em um contêiner de arquivo associado na mesma tarefa. 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.

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 é de 15 segundos e não pode ser alterado.

Tempo limite de upstream: 15 segundos

Parâmetros do Service Connect

Os parâmetros a seguir têm campos extras quando o Service Connect é usado.

Local dos parâmetros Tipo de aplicação Descrição Obrigatório?
Definição de tarefa Cliente Não há alterações disponíveis para o Service Connect nas definições de tarefa do cliente. N/D
Definição de tarefa Cliente-servidor Os servidores devem adicionar campos name às portas nos portMappings de contêineres. Para obter mais informações, consulte portMappings. Sim
Definição de 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. 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. 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. Para obter mais informações, consulte Clusters do Amazon ECS. 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