Usar a ramificação da plataforma Amazon ECS - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar a ramificação da plataforma Amazon ECS

Este tópico aborda tanto a ramificação da plataforma Amazon ECS no Amazon Linux 2 quanto a ramificação da plataforma que ele substitui, Docker de vários contêineres on AL1 (também gerenciada pelo ECS). Salvo indicação em contrário, todas as informações neste tópico se aplicam a ambas as ramificações da plataforma.

nota

Em 18 de julho de 2022, o Elastic Beanstalk definiu o status de todas as ramificações de plataforma baseadas no Amazon Linux AMI (AL1) como descontinuadas.

Migrar do Docker de vários contêineres no AL1

Se você estiver usando atualmente o Docker de vários contêineres desativado em execução na ramificação da plataforma AL1, poderá migrar para a mais recente ramificação da plataforma ECS em execução no AL2023. A ramificação mais recente da plataforma é compatível com todos os recursos da ramificação da plataforma que foi retirada. Não é necessária nenhuma alteração no código-fonte. Para obter mais informações, consulte Migrar o Docker de vários contêineres em execução no Amazon Linux para o ECS no Amazon Linux 2023.

Plataforma Docker gerenciada pelo ECS

O Elastic Beanstalk usa o Amazon Elastic Container Service (Amazon ECS) para coordenar implantações de contêiner em ambientes do Docker gerenciado pelo ECS. O Amazon ECS fornece ferramentas para gerenciar um cluster de instâncias executando contêineres do Docker. O Elastic Beanstalk cuida das tarefas do Amazon ECS, incluindo criação de cluster, definição de tarefas e execução. Cada uma das instâncias do ambiente executa o mesmo conjunto de contêineres que são definidos em um arquivo Dockerrun.aws.json v2. Para tirar o máximo proveito do Docker, o Elastic Beanstalk permite criar um ambiente no qual as instâncias do Amazon EC2 executam vários contêineres do Docker, lado a lado.

O diagrama a seguir mostra um ambiente demonstrativo do Elastic Beanstalk configurado com três contêineres do Docker em execução em cada instância do Amazon EC2 em um grupo de Auto Scaling:

nota

O Elastic Beanstalk oferece recursos de extensibilidade para todas as plataformas que você pode usar para personalizar a implantação e execução das aplicações. Para a ramificação da plataforma ECS em execução no Amazon Linux 2, a implementação do fluxo de trabalho de implantação de instâncias desses recursos é diferente de outras plataformas. Para obter mais informações, consulte Fluxo de trabalho de implantação de instâncias para o ECS em execução no Amazon Linux 2 e versões posteriores.

Dockerrun.aws.json file

Instâncias de contêiner: instâncias do Amazon EC2 executando o Docker gerenciado pelo ECS em um ambiente do Elastic Beanstalk exigem um arquivo de configuração denominado Dockerrun.aws.json. Esse arquivo é específico do Elastic Beanstalk e pode ser usado individualmente ou combinado com código-fonte e conteúdo em um pacote de fonte para criar um ambiente na plataforma Docker.

nota

A versão 1 do formato Dockerrun.aws.json é usada para iniciar um único contêiner do Docker em um ambiente do Elastic Beanstalk em execução no Amazon Linux AMI (a versão anterior ao Amazon Linux 2). O ambiente é baseado na ramificação de plataforma Docker em execução no Amazon Linux de 64 bits, que será retirada em 18 de junho de 2022. Para saber mais sobre o formato Dockerrun.aws.json v1, consulte Configuração da plataforma Docker - sem Docker Compose.

O formado do Dockerrun.aws.json versão 2 adiciona suporte a vários contêineres por instância do Amazon EC2 e só pode ser usado com a plataforma Docker gerenciada pelo ECS. O formato difere significativamente da versão anterior.

Consulte Dockerrun.aws.json v2 para detalhes sobre o formato atualizado e um exemplo de arquivo.

Imagens de Docker

A plataforma Docker gerenciada pelo ECS para o Elastic Beanstalk exige que as imagens criadas previamente e armazenadas em um repositório de imagens online público ou privado.

nota

A criação de imagens personalizadas durante a implantação com um Dockerfile não é compatível com a plataforma Docker gerenciada pelo ECS no Elastic Beanstalk. Crie suas imagens e implante-as em um repositório online antes de criar um ambiente do Elastic Beanstalk.

Especifique as imagens por nome em Dockerrun.aws.json v2. Observe as seguintes convenções:

  • As imagens em repositórios oficiais no Docker Hub usam um único nome (por exemplo, ubuntu ou mongo).

  • As imagens em outros repositórios no Docker Hub são qualificadas com um nome de organização (por exemplo, amazon/amazon-ecs-agent).

  • As imagens em outros registros online são ainda mais qualificadas por um nome de domínio (por exemplo, quay.io/assemblyline/ubuntu).

Para configurar o Elastic Beanstalk para autenticar em um repositório privado, inclua o parâmetro authentication no arquivo Dockerrun.aws.json v2.

Função de instância de contêiner

O Elastic Beanstalk usa uma AMI otimizada para Amazon ECS com um agente de contêiner do Amazon ECS que é executado em um contêiner do Docker. O agente se comunica com o Amazon ECS para coordenar as implantações de contêiner. Para se comunicar com o Amazon ECS, cada instância do Amazon EC2 deve ter as permissões correspondentes no IAM. Estas permissões são anexadas ao perfil da instância padrão quando você cria um ambiente no Console de Gerenciamento do Elastic Beanstalk:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

Se você criar seu próprio perfil da instância, poderá anexar a política gerenciada AWSElasticBeanstalkMulticontainerDocker para garantir que as permissões estejam atualizadas. Para obter instruções sobre como criar políticas e funções no IAM, consulte Criar funções do IAM no Guia do usuário do IAM.

Recursos do Amazon ECS criados pelo Elastic Beanstalk

Quando você cria um ambiente usando a plataforma Docker gerenciada pelo ECS, o Elastic Beanstalk cria e configura automaticamente vários recursos do Amazon Elastic Container Service enquanto cria o ambiente. Fazendo isso, ele cria os contêineres necessários em cada instância do Amazon EC2.

  • Cluster do Amazon ECS: as instâncias de contêiner no Amazon ECS são organizadas em clusters. Quando é ele usado com o Elastic Beanstalk, sempre é criado um cluster para cada ambiente do Docker gerenciado pelo ECS.

  • Definição de tarefas do Amazon ECS: o Elastic Beanstalk usa o arquivo Dockerrun.aws.json v2 no projeto para gerar a definição de tarefas do Amazon ECS que é usada para configurar instâncias de contêiner no ambiente.

  • Tarefa do Amazon ECS: o Elastic Beanstalk se comunica com o Amazon ECS para executar uma tarefa em todas as instâncias do ambiente para coordenar a implantação de contêineres. Em um ambiente escalável, o Elastic Beanstalk inicia uma nova tarefa sempre que uma instância é adicionada ao cluster. Em casos raros, pode ser necessário aumentar o espaço reservado para contêineres e imagens. Saiba mais na seção Configurar ambientes do Docker.

  • Agente de contêiner do Amazon ECS: o agente é executado em um contêiner do Docker nas instâncias do ambiente. O agente consulta o serviço do Amazon ECS e aguarda uma tarefa para executar.

  • Volumes de dados do Amazon ECS: o Elastic Beanstalk insere definições de volumes (além dos volumes que você define no Dockerrun.aws.json v2) na definição de tarefas para facilitar a coleta de logs.

    O Elastic Beanstalk cria volumes de log na instância de contêiner, um para cada contêiner, em /var/log/containers/containername. Esses volumes são denominados awseb-logs-containername e são fornecidos para os contêineres que devem ser montados. Consulte Formato de definição de contêiner para detalhes sobre como montá-los.

Usar vários listeners do Elastic Load Balancing

Você pode configurar vários listeners do Elastic Load Balancing em um ambiente do Docker gerenciado pelo ECS para acomodar o tráfego de entrada para proxies ou outros serviços que não são executados na porta HTTP padrão.

Crie uma pasta .ebextensions no seu pacote de origem e adicione um arquivo com a extensão .config. O exemplo a seguir mostra um arquivo de configuração que cria um listener do Elastic Load Balancing na porta 8080.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

Se o seu ambiente estiver sendo executado em uma Amazon Virtual Private Cloud (Amazon VPC) personalizada criada por você, o Elastic Beanstalk cuidará do restante. Em uma VPC padrão, é preciso configurar o grupo de segurança da instância para permitir a entrada do balanceador de carga. Adicione um segundo arquivo de configuração que inclui uma regra de entrada no security group:

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

Para obter mais informações sobre o formato de arquivo de configuração, consulte Adicionar e personalizar recursos do ambiente do Elastic Beanstalk e Configurações de opção.

Além de adicionar um listener à configuração do Elastic Load Balancing e abrir uma porta no grupo de segurança, é preciso mapear a porta na instância do host para uma porta no contêiner do Docker, na seção containerDefinitions do arquivo Dockerrun.aws.json v2. O trecho a seguir mostra um exemplo:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Consulte Dockerrun.aws.json v2 para obter detalhes sobre o formato do arquivo Dockerrun.aws.json v2.

Falha nas implantações de contêiner

Se uma tarefa do Amazon ECS falhar, um ou mais contêineres em seu ambiente Elastic Beanstalk não serão iniciados. O Elastic Beanstalk não reverte ambientes de vários contêineres devido a falha em uma tarefa do Amazon ECS. Se um contêiner não for iniciado no ambiente, implante novamente a versão atual ou uma versão funcional anterior do console do Elastic Beanstalk.

Para implantar uma versão existente
  1. Abra o console do Elastic Beanstalk na região do seu ambiente.

  2. Clique em Actions, à direita do nome do aplicativo, e depois clique em View application versions.

  3. Selecione uma versão do aplicativo e clique em Deploy.