Usar o Elastic Beanstalk com a Amazon VPC - AWS Elastic Beanstalk

Usar o Elastic Beanstalk com a Amazon VPC

É possível usar uma Amazon Virtual Private Cloud (Amazon VPC) para criar uma rede segura para seu aplicativo do Elastic Beanstalk e recursos relacionados da AWS. Ao criar seu ambiente, você escolhe a VPC, as sub-redes e os security groups que serão usados ​​nas suas instâncias de aplicativo e no load balancer. Você pode usar qualquer configuração de VPC que desejar, desde que ela atenda aos seguintes requisitos.

Requisitos da VPC

  • Acesso à Internet – as instâncias podem ter acesso à Internet por meio de um dos métodos a seguir.

    • Sub-rede pública – as instâncias têm um endereço IP público e usam um gateway da Internet para acessar a Internet.

    • Sub-rede privada – as instâncias usam um dispositivo NAT para acessar a Internet.

    nota

    Se você configurar VPC endpoints em sua VPC para se conectar aos serviços elasticbeanstalk e elasticbeanstalk-healthd, o acesso à Internet será opcional e será necessário somente se o aplicativo precisar especificamente dele. Sem VPC endpoints, sua VPC deve ter acesso à Internet.

    A VPC padrão, que o Elastic Beanstalk configura para você, fornece acesso à Internet.

    O Elastic Beanstalk não oferece suporte a configurações de proxy, como HTTPS_PROXY para configurar um proxy da web.

  • NTP – as instâncias em seu ambiente Elastic Beanstalk usam o NTP (Network Time Protocol, Protocolo de horário de rede) para sincronizar o relógio do sistema. Caso as instâncias não consigam se comunicar na porta UDP 123, o relógio pode estar fora de sincronia, causando problemas de relatórios de integridade do Elastic Beanstalk. Certifique-se de que os security groups da VPC e as ACLs de rede permitem o tráfego de entrada e saída de UDP na porta 123 para evitar esses problemas.

O repositório elastic-beanstalk-samples fornece modelos do AWS CloudFormation que você pode usar para criar uma VPC para uso com seus ambientes do Elastic Beanstalk.

Para criar recursos com um modelo do AWS CloudFormation

  1. Clone o repositório de amostras ou faça download de um modelo usando os links no arquivo README.

  2. Abra o console do AWS CloudFormation.

  3. Selecione Create stack.

  4. Escolha Upload a template to Amazon S3.

  5. Escolha Upload file e faça upload do arquivo de modelo da sua máquina local.

  6. Escolha Next e siga as instruções para criar uma pilha com os recursos no modelo.

Quando a criação da pilha for concluída, marque a guia Outputs (Saídas) para encontrar o ID da VPC e os IDs de sub-rede. Use-os para configurar a VPC no novo assistente de ambiente categoria de configuração de rede.

VPC pública

Modelo do AWS CloudFormationvpc-public.yaml

Configurações (balanceamento de carga)

  • Visibilidade do load balancer – público

  • Sub-redes do load balancer – ambas sub-redes públicas

  • IP público da instância – ativado

  • Sub-redes da instância – ambas sub-redes públicas

  • Grupos de segurança de instância – adicione o grupo de segurança padrão

Configurações (instância única)

  • Sub-redes da instância – uma das sub-redes públicas

  • Grupos de segurança de instância – adicione o grupo de segurança padrão

Um layout somente público da VPC inclui uma ou mais sub-redes públicas, um gateway da Internet e um grupo de segurança padrão que permite o tráfego entre recursos na VPC. Quando você cria um ambiente na VPC, o Elastic Beanstalk cria recursos adicionais que variam dependendo do tipo de ambiente.

Recursos da VPC

  • Instância única – o Elastic Beanstalk cria um grupo de segurança para a instância do aplicativo que permite o tráfego na porta 80 da Internet e atribui à instância um IP elástico para fornecer um endereço IP público. O nome de domínio do ambiente é resolvido para o endereço IP público da instância.

  • Balanceamento de carga – o Elastic Beanstalk cria um grupo de segurança para o load balancer que permite o tráfego na porta 80 da Internet e um grupo de segurança para as instâncias do aplicativo que permite o tráfego do grupo de segurança do load balancer. O nome de domínio do ambiente é resolvido para o nome de domínio público do load balancer.

Isso é semelhante ao modo como o Elastic Beanstalk gerencia a rede quando você usa a VPC padrão. A segurança em uma sub-rede pública depende do load balancer e dos security groups da instância criados pelo Elastic Beanstalk. É a configuração mais econômica, porque não requer um gateway NAT.

VPC pública/privada

Modelo do AWS CloudFormationvpc-privatepublic.yaml

Configurações (balanceamento de carga)

  • Visibilidade do load balancer – público

  • Sub-redes do load balancer – ambas sub-redes públicas

  • IP público da instância – desativado

  • Sub-redes da instância – ambas sub-redes privadas

  • Grupos de segurança de instância – adicione o grupo de segurança padrão

Para mais segurança, adicione sub-redes privadas à sua VPC para criar um layout público-privado. Esse layout requer um load balancer e um gateway NAT nas sub-redes públicas e permite que você execute instâncias do aplicativo, banco de dados e quaisquer outros recursos nas sub-redes privadas. Instâncias em sub-redes privadas podem se comunicar apenas com a Internet por meio do load balancer e do gateway NAT.

VPC privada

Modelo do AWS CloudFormationvpc-private.yaml

Configurações (balanceamento de carga)

  • Visibilidade do load balancer – privado

  • Sub-redes do load balancer – as duas sub-redes privadas

  • IP público da instância – desativado

  • Sub-redes da instância – ambas sub-redes privadas

  • Grupos de segurança de instância – adicione o grupo de segurança padrão

Para aplicativos internos que não devem ter acesso da Internet, é possível executar tudo em sub-redes privadas e configurar o load balancer para ser interno (altere Load balancer visibility (Visibilidade do load balancer) para Internal (Interno)). Esse modelo cria uma VPC sem sub-redes públicas e sem um gateway da Internet. Use esse layout para aplicativos que só devem ser acessados a partir da mesma VPC ou de uma VPN conectada.

Executar um ambiente do Elastic Beanstalk em uma VPC privada

Quando você cria o ambiente do Elastic Beanstalk em uma VPC privada, o ambiente não tem acesso à Internet. Seu aplicativo pode precisar de acesso ao serviço do Elastic Beanstalk ou a outros serviços. Seu ambiente pode usar relatórios de integridade avançada, e, nesse caso, as instâncias do ambiente enviam informações de integridade para o serviço de integridade avançada. E o código do Elastic Beanstalk em instâncias do ambiente envia tráfego para outros serviços da AWS e outro tráfego para endpoints que não são da AWS (por exemplo, para fazer download de pacotes de dependência para seu aplicativo). Veja a seguir algumas etapas que podem ser necessárias para execução nesse caso, a fim de garantir que seu ambiente funcione corretamente.

  • Configurar VPC endpoints para o Elastic Beanstalk – o Elastic Beanstalk e seu serviço de integridade avançada oferecem suporte a VPC endpoints, que garantem que o tráfego para esses serviços permaneça dentro da rede da Amazon e não exija acesso à Internet. Para obter mais informações, consulte Usar o Elastic Beanstalk com VPC endpoints.

  • Configurar VPC endpoints para serviços adicionais – as instâncias do Elastic Beanstalk enviam tráfego para vários outros serviços da AWS em seu nome: Amazon Simple Storage Service (Amazon S3), Amazon Simple Queue Service (Amazon SQS), e AWS CloudFormation. É necessário configurar VPC endpoints para esses serviços também. Para obter informações detalhadas sobre VPC endpoints, incluindo links por serviço, consulte VPC endpoints no Guia do usuário da Amazon VPC.

    nota

    Alguns serviços da AWS, incluindo o Elastic Beanstalk, oferecem suporte a VPC endpoints em um número limitado de regiões da AWS. Ao criar sua solução de VPC privada, verifique se o Elastic Beanstalk e os outros serviços dependentes mencionados aqui oferecem suporte a VPC endpoints na região da AWS escolhida.

  • Fornecer uma imagem privada do Docker – em um ambiente Docker, o código nas instâncias do ambiente pode tentar extrair sua imagem configurada do Docker da Internet durante a criação do ambiente e falhar. Para evitar essa falha, crie uma imagem personalizada do Docker em seu ambiente ou use uma imagem do Docker armazenada em Amazon Elastic Container Registry (Amazon ECR) e configure um VPC endpoint para o serviço do Amazon ECR.

  • Habilitar nomes DNS – o código do Elastic Beanstalk em instâncias do ambiente envia tráfego para todos os serviços da AWS usando seus endpoints públicos. Para garantir que esse tráfego passe, escolha a opção Enable DNS name (Habilitar nome DNS) ao configurar todos os VPC endpoints de interface. Isso adiciona uma entrada DNS em sua VPC, que mapeia o endpoint público de serviço para o VPC endpoint de interface.

    Importante

    Se sua VPC não for privada e tiver acesso público à Internet e se Enable DNS name (Habilitar nome DNS) estiver desabilitado para qualquer VPC endpoint, o tráfego para o respectivo serviço será enviado pela Internet pública. Isso provavelmente não é o que você pretende. É fácil detectar esse problema com uma VPC privada, pois impede que esse tráfego passe e você receba erros. No entanto, com uma VPC voltada para o público, você não recebe nenhuma indicação.

  • Incluir dependências de aplicativos – se seu aplicativo tiver dependências como pacotes de tempo de execução de linguagem, ele poderá tentar fazer download deles e instalá-los da Internet durante a criação do ambiente e falhar. Para evitar essa falha, inclua todos os pacotes de dependência no pacote de origem do aplicativo.

  • Usar uma versão da plataforma atual – certifique-se de que seu ambiente use uma versão da plataforma lançada em 24 de fevereiro de 2020 ou posterior. Especificamente, use uma versão da plataforma que foi lançada a partir de uma dessas duas atualizações: Linux Update 2020-02-28, Windows Update 2020-02-24.

    nota

    O motivo da necessidade de uma versão atualizada da plataforma é que as versões mais antigas tinham um problema que impediria que as entradas DNS criadas pela opção Enable DNS name (Habilitar nome DNS) funcionassem corretamente para o Amazon SQS.