Práticas recomendadas para receber conexões de entrada para o Amazon ECS vindas da Internet - Amazon Elastic Container Service

Práticas recomendadas para receber conexões de entrada para o Amazon ECS vindas da Internet

Se você administra um serviço público, deve aceitar o tráfego de entrada da Internet. Por exemplo, seu site público deve aceitar solicitações HTTP de entrada vindas de navegadores. Nesse caso, outros hosts na Internet também devem iniciar uma conexão de entrada com o host da aplicação.

Uma abordagem para esse problema é executar seus contêineres em hosts que estão em uma sub-rede pública com um endereço IP público. No entanto, não recomendamos isso em aplicações de grande escala. Para elas, uma abordagem melhor é ter uma camada de entrada escalável que fique entre a Internet e a aplicação. Para essa abordagem, você pode usar qualquer um dos serviços da AWS listados nesta seção como entrada.

Application Load Balancer

Um Application Load Balancer funciona na camada da aplicação. É a sétima camada do modelo Open Systems Interconnection (OSI). Isso torna um Application Load Balancer adequado para serviços HTTP públicos. Se você tem um site ou uma API REST HTTP, um Application Load Balancer é um balanceador de carga adequado para essa workload. Para obter mais informações, consulte What is an Application Load Balancer? no Guia do Usuário para Application Load Balancers.

Diagrama mostrando a arquitetura de uma rede usando um Application Load Balancer.

Com essa arquitetura, você cria um Application Load Balancer em uma sub-rede pública para que ele tenha um endereço IP público e possa receber conexões de entrada da Internet. Quando o Application Load Balancer recebe uma conexão de entrada ou, mais especificamente, uma solicitação HTTP, ele abre uma conexão com a aplicação usando seu endereço IP privado. Em seguida, ele encaminha a solicitação pela conexão interna.

Um Application Load Balancer tem as vantagens a seguir.

  • Encerramento de SSL e TLS: um Application Load Balancer pode manter comunicações e certificados HTTPS seguros para comunicações com clientes. Opcionalmente, ele pode encerrar a conexão SSL no nível do balanceador de carga para que você não precise lidar com certificados na própria aplicação.

  • Encaminhamento avançado: um Application Load Balancer pode ter vários nomes de host do DNS. Ele também tem recursos avançados de encaminhamento para enviar solicitações HTTP de entrada a destinos diferentes com base em métricas, como o nome do host ou o caminho da solicitação. Isso significa que você pode usar um único Application Load Balancer como entrada em vários serviços internos diferentes ou até mesmo em microsserviços em caminhos diferentes de uma API REST.

  • Suporte a gRPC e WebSockets: um Application Load Balancer pode processar mais recursos além de HTTP. Ele também pode balancear a carga de serviços baseados em gRPC e WebSocket, com suporte a HTTP/2.

  • Segurança: um Application Load Balancer ajuda a proteger sua aplicação contra tráfego malicioso. Ele inclui recursos como mitigações de sincronização HTTP, sendo integrado ao AWS Web Application Firewall (AWS WAF). O AWS WAF filtra ainda mais o tráfego malicioso que pode conter padrões de ataque, como injeção de SQL ou cross-site scripting.

Network Load Balancer

Um Network Load Balancer funciona na quarta camada do modelo Open Systems Interconnection (OSI - interconexão de sistemas abertos). É adequado em protocolos não HTTP ou cenários em que a criptografia de ponta a ponta é necessária, mas não tem os mesmos recursos específicos de HTTP de um Application Load Balancer. Portanto, um Network Load Balancer é mais adequado para aplicações que não usam HTTP. Para obter mais informações, consulte What is a Network Load Balancer? no Guia do usuário para Network Load Balancers.

Diagrama mostrando a arquitetura de uma rede usando um Network Load Balancer.

Quando um Network Load Balancer é usado como entrada, ele funciona de maneira semelhante a um Application Load Balancer. Isso ocorre porque ele é criado em uma sub-rede pública e tem um endereço IP público que pode ser acessado na Internet. Em seguida, o Network Load Balancer abre uma conexão com o endereço IP privado do host que executa o contêiner e envia os pacotes do lado público para o privado.

Recursos do Network Load Balancer

Como o Network Load Balancer opera em um nível inferior da pilha de rede, ele não tem o mesmo conjunto de recursos que o Application Load Balancer. No entanto, ele tem os recursos importantes descritos a seguir.

  • Criptografia de ponta a ponta: como um Network Load Balancer opera na quarta camada do modelo OSI, ele não lê o conteúdo dos pacotes. Isso o torna adequado para comunicações de balanceamento de carga que precisam de criptografia de ponta a ponta.

  • Criptografia TLS: além da criptografia de ponta a ponta, o Network Load Balancer pode encerrar conexões TLS. Dessa forma, as aplicações de backend não precisam implementar o próprio TLS.

  • Suporte a UDP: como um Network Load Balancer opera na quarta camada do modelo OSI, ele é adequado para workloads e protocolos não HTTP que não sejam de TCP.

Encerramento de conexões

Como o Network Load Balancer não observa o protocolo da aplicação nas camadas superiores do modelo OSI, ele não pode enviar mensagens de encerramento aos clientes nesses protocolos. Diferentemente do Application Load Balancer, essas conexões precisam ser encerradas pela aplicação ou você pode configurar o Network Load Balancer para encerrar as conexões da quarta camada quando uma tarefa for interrompida ou substituída. Consulte a configuração de encerramento da conexão para os grupos de destino do Network Load Balancer na documentação do Network Load Balancer.

Permitir que o Network Load Balancer encerre conexões na quarta camada pode fazer com que os clientes exibam mensagens de erro indesejadas, se o cliente não processá-las. Consulte a Builders Library para obter mais informações sobre a configuração recomendada do cliente aqui .

Os métodos para encerrar conexões variam de acordo com a aplicação, no entanto, uma maneira é garantir que a meta de atraso no cancelamento de registro do Network Load Balancer seja maior do que o tempo limite de conexão do cliente. O cliente atingiria o tempo limite primeiro e se reconectaria normalmente à próxima tarefa por meio do Network Load Balancer, enquanto a tarefa antiga esgotaria lentamente todos os clientes. Para obter mais informações sobre a meta de atraso no cancelamento de registro do Network Load Balancer, consulte a documentação do Network Load Balancer.

API HTTP do Amazon API Gateway

O Amazon API Gateway é adequado para aplicações HTTP com expansões repentinas nos volumes de solicitações ou baixos volumes de solicitações. Para obter mais informações, consulte What is Amazon API Gateway? no Guia do desenvolvedor do Amazon API Gateway.

Diagrama mostrando a arquitetura de uma rede usando o API Gateway.

O modelo de preços do Application Load Balancer e do Network Load Balancer inclui um preço por hora para manter os balanceadores de carga sempre disponíveis para aceitar conexões de entrada. Por outro lado, o API Gateway cobra por cada solicitação separadamente. Dessa forma, se nenhuma solicitação for recebida, não há cobranças. Sob cargas de alto tráfego, um Application Load Balancer ou Network Load Balancer pode processar um volume maior de solicitações a um preço mais barato por solicitação do que o API Gateway. No entanto, caso tenha um número baixo de solicitações em geral ou períodos de baixo tráfego, o preço cumulativo proveniente do uso do API Gateway é mais econômico do que pagar uma taxa por hora para manter um balanceador de carga que está sendo subutilizado. O API Gateway também armazena em cache as respostas da API, o que pode resultar em menores taxas de solicitação de backend.

Funções do API Gateway que usam um link de VPC que permite ao serviço gerenciado da AWS se conectar a hosts na sub-rede privada da sua VPC, usando o próprio endereço IP privado. Ele pode detectar esses endereços IP privados examinando os registros de descoberta de serviços do AWS Cloud Map gerenciados pela descoberta de serviços do Amazon ECS.

O API Gateway é compatível com os recursos a seguir.

  • A operação do API Gateway é semelhante a um balanceador de carga, mas tem recursos adicionais exclusivos para o gerenciamento de API

  • O API Gateway fornece recursos adicionais relacionados à autorização do cliente, aos níveis de uso e à modificação da solicitação ou resposta. Para obter mais informações, consulte Recursos do Amazon API Gateway.

  • O API Gateway é compatível com endpoints de gateway de API de borda, regionais e privados. Os endpoints de borda estão disponíveis por meio de uma distribuição gerenciada do CloudFront. Os endpoints regionais e privados são locais de uma região.

  • Encerramento de SSL e TLS

  • Roteamento de caminhos HTTP diferentes para diferentes microsserviços de backend

Além dos recursos anteriores, o API Gateway também oferece suporte a autorizadores do Lambda personalizados que você pode usar para proteger a API contra o uso não autorizado. Para obter mais informações, consulte Field Notes: Serverless Container-based APIs with Amazon ECS and Amazon API Gateway.