QuickStart: Implante um aplicativo Docker Compose no Elastic Beanstalk - 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á.

QuickStart: Implante um aplicativo Docker Compose no Elastic Beanstalk

Este QuickStart tutorial mostra o processo de criação de um aplicativo Docker Compose com vários contêineres e sua implantação em um ambiente. AWS Elastic Beanstalk Você criará uma aplicação Web Flask com um proxy reverso nginx para demonstrar como o Docker Compose simplifica a orquestração de vários contêineres.

Não é para uso em produção

Os exemplos são destinados apenas para demonstração. Não use aplicações de exemplo na produção.

Sua AWS conta

Se você ainda não é AWS cliente, precisa criar uma AWS conta. A inscrição permite que você acesse o Elastic Beanstalk AWS e outros serviços de que você precisa.

Se você já tem uma AWS conta, você pode passar paraPré-requisitos.

Inscreva-se para um Conta da AWS

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

Para se inscrever em um Conta da AWS
  1. Abra a https://portal.aws.amazon.com/billing/inscrição.

  2. Siga as instruções online.

    Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

    Quando você se inscreve em um Conta da AWS, um Usuário raiz da conta da AWSé criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar tarefas que exigem acesso de usuário-raiz.

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando https://aws.amazon.com/e escolhendo Minha conta.

Criar um usuário com acesso administrativo

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

Proteja seu Usuário raiz da conta da AWS
  1. Faça login Console de gerenciamento da AWScomo proprietário da conta escolhendo Usuário raiz e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

    Para obter ajuda ao fazer login usando o usuário-raiz, consulte Fazer login como usuário-raiz no Guia do usuário do Início de Sessão da AWS .

  2. Habilite a autenticação multifator (MFA) para o usuário-raiz.

    Para obter instruções, consulte Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia do usuário do IAM.

Criar um usuário com acesso administrativo
  1. Habilita o Centro de Identidade do IAM.

    Para obter instruções, consulte Habilitar o Centro de Identidade do AWS IAM no Guia do usuário do Centro de Identidade do AWS IAM .

  2. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

    Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM no Guia Centro de Identidade do AWS IAM do usuário.

Iniciar sessão como o usuário com acesso administrativo
  • Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

    Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como fazer login no portal de AWS acesso no Guia Início de Sessão da AWS do usuário.

Atribuir acesso a usuários adicionais
  1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

    Para obter instruções, consulte Criar um conjunto de permissões no Guia do usuário do Centro de Identidade do AWS IAM .

  2. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

    Para obter instruções, consulte Adicionar grupos no Guia do usuário do Centro de Identidade do AWS IAM .

Pré-requisitos

Para seguir os procedimentos neste manual, você precisa de um terminal de linha de comando ou de um shell para executar os comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado.

~/eb-project$ this is a command this is output

No Linux e no macOS, você pode usar seu gerenciador de pacotes e de shell preferido. No Windows, você pode instalar o subsistema Windows para Linux para obter uma versão do Ubuntu e Bash integrada ao Windows.

EB CLI

Este tutorial também usa a Interface de Linhas de Comando do Elastic Beanstalk (CLI do EB). Para obter detalhes sobre a instalação e configuração da CLI do EB, consulte Instalar a EB CLI com script de configuração (recomendado) e Configurar a EB CLI.

Docker e Docker Compose

Para seguir este tutorial, você precisará de uma instalação local funcional do Docker e do Docker Compose. Para obter mais informações, consulte Obter o Docker e Instalar o Docker Compose no site de documentação do Docker.

Verifique se o Docker e o Docker Compose estão instalados e em execução executando os seguintes comandos.

~$ docker info ~$ docker compose version

Etapa 1: Crie uma aplicação Docker Compose

Neste exemplo, criamos um aplicação de vários contêineres usando o Docker Compose que consiste em um aplicação web Flask e um proxy reverso nginx. Isso demonstra como o Docker Compose simplifica a orquestração de vários contêineres que funcionam juntos.

A aplicação inclui uma configuração de monitoramento de integridade que permite que o Elastic Beanstalk colete métricas detalhadas da aplicação a partir do seu proxy nginx.

A aplicação tem a seguinte estrutura:

~/eb-docker-compose-flask/ |-- docker-compose.yml |-- web/ | |-- Dockerfile | |-- app.py | `-- requirements.txt |-- proxy/ | |-- Dockerfile | `-- nginx.conf `-- .platform/ `-- hooks/ `-- postdeploy/ `-- 01_setup_healthd_permissions.sh

Crie a estrutura de diretórios e adicione os seguintes arquivos:

Primeiro, crie o arquivo principal docker-compose.yml que define os serviços e seus relacionamentos.

exemplo~/eb-docker-compose-flask/docker-compose.yml
services: web: build: ./web expose: - "5000" nginx-proxy: build: ./proxy ports: - "80:80" volumes: - "/var/log/nginx:/var/log/nginx" depends_on: - web

Crie a aplicação web Flask no diretório web. Adicione o seguinte conteúdo ao seu arquivo app.py.

exemplo~/eb-docker-compose-flask/web/app.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello Elastic Beanstalk! This is a Docker Compose application'

Adicione o seguinte conteúdo ao seu serviço Web Dockerfile.

exemplo~/eb-docker-compose-flask/web/Dockerfile
FROM public.ecr.aws/docker/library/python:3.12 COPY . /app WORKDIR /app RUN pip install Flask==3.1.1 EXPOSE 5000 CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

Crie o proxy reverso nginx no diretório proxy. Adicione o seguinte conteúdo ao seu arquivo nginx.conf.

Essa configuração inclui a configuração de monitoramento da integridade, que permite ao Elastic Beanstalk coletar métricas detalhadas da aplicação. Para obter mais informações sobre como personalizar os formatos dos logs de monitoramento da integridade, consulte Formato de log de integridade aprimorado.

exemplo~/eb-docker-compose-flask/proxy/nginx.conf
events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; map $http_upgrade $connection_upgrade { default "upgrade"; } # Health monitoring log format for Elastic Beanstalk log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for'; upstream flask_app { server web:5000; } server { listen 80 default_server; root /usr/share/nginx/html; # Standard access log access_log /var/log/nginx/access.log; # Health monitoring log for Elastic Beanstalk if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://flask_app; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }

Adicione o seguinte conteúdo ao seu serviço proxy Dockerfile.

exemplo~/eb-docker-compose-flask/proxy/Dockerfile
FROM public.ecr.aws/nginx/nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80

Por fim, crie um script de gancho de plataforma para configurar os diretórios de log e as permissões necessárias para o monitoramento da integridade. Hooks de plataforma permitem que você execute scripts personalizados durante o processo de implantação. Para obter mais informações sobre hooks de plataforma, consulte Hooks de plataforma.

exemplo~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh
#!/bin/bash set -ex NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q) if [ -z "$NGINX_CONTAINER" ]; then echo "Error: No nginx-proxy container found running" exit 1 fi NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx) NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx) mkdir -p /var/log/nginx/healthd chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx

Etapa 2: executar a aplicação localmente

Use o comando docker compose up para criar e executar sua aplicação de vários contêiner localmente. O Docker Compose criará as duas imagens de contêiner e iniciará os serviços definidos no seu arquivo docker-compose.yml.

~/eb-docker-compose-flask$ docker compose up --build

A opção --build garante que o Docker Compose crie as imagens do contêiner antes de iniciar os serviços. Você deve ver a saída mostrando a inicialização do serviço Web e do serviço nginx-proxy.

Navegue até http://localhost no navegador. Você verá o texto "Hello Elastic Beanstalk! Esta é uma aplicação do Docker Compose". O proxy nginx recebe sua solicitação na porta 80 e a encaminha para a aplicação Flask executada na porta 5000.

Quando terminar o teste, interrompa a aplicação pressionando Ctrl+C no terminal ou execute o seguinte comando em um terminal separado:

~/eb-docker-compose-flask$ docker compose down

Etapa 3: implantar a aplicação do Docker Composer com a EB CLI

Execute os seguintes comandos para criar um ambiente Elastic Beanstalk para essa aplicação.

Para criar um ambiente e implantar a aplicação do Docker Compose
  1. Inicialize o repositório da EB CLI com o comando eb init:

    ~/eb-docker-compose-flask$ eb init -p docker docker-compose-tutorial --region us-east-2 Application docker-compose-tutorial has been created.

    Este comando cria uma aplicação docker-compose-tutorial e configura seu repositório local para criar ambientes com a versão mais recente da plataforma do Docker.

  2. (Opcional) Execute eb init novamente para configurar um par de chaves padrão para que você possa usar o SSH para se conectar à EC2 instância que executa seu aplicativo.

    ~/eb-docker-compose-flask$ eb init Do you want to set up SSH for your instances? (y/n): y Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]

    Selecione um par de chaves se você já tiver um, ou siga os as instruções na tela para criar um. Se nenhum prompt aparecer ou se for necessário alterar as configurações posteriormente, execute eb init -i.

  3. Crie um ambiente e implante o aplicativo nele com eb create. O Elastic Beanstalk docker-compose.yml detecta automaticamente seu arquivo e implanta sua aplicação de vários contêineres.

    ~/eb-docker-compose-flask$ eb create docker-compose-tutorial

    O Elastic Beanstalk leva cerca de cinco minutos para criar seu ambiente e realizar a implantação de sua aplicação com vários contêineres.

Etapa 4: testar a aplicação no Elastic Beanstalk

Quando o processo de criação de seu ambiente for concluído, abra seu site com eb open.

~/eb-docker-compose-flask$ eb open

Ótimo! Você fez a implantação de uma aplicação do Docker Compose com vários contêineres usando o Elastic Beanstalk! Isso abre uma janela do navegador usando o nome de domínio criado para o seu aplicativo. Você deve ver a mensagem da sua aplicação Flask, servida por meio do proxy reverso nginx.

Etapa 5: limpar

Você pode encerrar o ambiente quando terminar de trabalhar com a aplicação. O Elastic Beanstalk AWS encerra todos os recursos associados ao seu ambiente.

Para encerrar seu ambiente do Elastic Beanstalk com a CLI do EB, execute o seguinte comando.

~/eb-docker-compose-flask$ eb terminate

AWS recursos para seu aplicativo

Você acabou de criar uma aplicação de instância única executando vários contêineres. Ele serve como um aplicativo de amostra simples com uma única EC2 instância, portanto, não requer balanceamento de carga ou escalonamento automático. Para aplicativos de instância única, o Elastic Beanstalk cria os seguintes recursos: AWS

  • EC2 instância — Uma máquina EC2 virtual da Amazon configurada para executar aplicativos web na plataforma que você escolher.

    Cada plataforma executa um conjunto diferente de software, arquivos de configuração e scripts para oferecer suporte a uma versão de linguagem, framework, contêiner da Web específicos ou a uma combinação deles. A maioria das plataformas usa o Apache ou nginx como um proxy reverso que processa tráfego da web na frente do aplicativo web, encaminha solicitações para ele, atende ativos estáticos e gera logs de acesso e de erro.

  • Grupo de segurança da instância — Um grupo EC2 de segurança da Amazon configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do balanceador de carga chegue à EC2 instância que executa seu aplicativo web. Por padrão, o tráfego não é permitido em outras portas.

  • Bucket do Amazon S3: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.

  • CloudWatch Alarmes da Amazon — Dois CloudWatch alarmes que monitoram a carga nas instâncias em seu ambiente e são acionados se a carga for muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.

  • CloudFormation stack — O Elastic CloudFormation Beanstalk usa para lançar os recursos em seu ambiente e propagar as alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no console do CloudFormation.

  • Nome de domínio — Um nome de domínio que é direcionado para seu aplicativo da web no formulário subdomain. region.elasticbeanstalk.com.

O Elastic Beanstalk gerencia todos esses recursos. Quando você encerra o ambiente, o Elastic Beanstalk encerra todos os recursos dele. Seu aplicativo Docker Compose executa vários contêineres em uma única EC2 instância, com o Elastic Beanstalk gerenciando a orquestração automaticamente.

Próximas etapas

Depois que um ambiente estiver executando um aplicativo, você poderá implantar uma nova versão do aplicativo ou um aplicativo diferente a qualquer momento. A implantação de uma nova versão do aplicativo é muito rápida porque não exige provisionamento ou reinicialização de instâncias. EC2 Também é possível explorar o novo ambiente usando o console do Elastic Beanstalk. Para conhecer as etapas detalhadas, consulte Explore seu ambiente, no capítulo Primeiros passos deste guia.

Depois de implantar uma ou duas aplicações demonstrativas, quando você estiver pronto para começar a desenvolver e executar aplicações Docker Compose localmente, consulte Preparar a imagem do Docker para implantação no Elastic Beanstalk.

Implantar com o console do Elastic Beanstalk

Você também pode usar o console Elastic Beanstalk para iniciar uma aplicação do Docker Compose. Crie um arquivo ZIP contendo seu arquivo docker-compose.yml e todos os diretórios e arquivos associados e, em seguida, carregue-o ao criar uma nova aplicação. Para conhecer as etapas detalhadas, consulte Criar uma aplicação de exemplo, no capítulo Primeiros passos deste guia.