Elastic Beanstalk com Docker: sua primeira aplicação no ar
Dá para colocar uma aplicação em container no ar na AWS sem criar a instância EC2 nem montar o deploy. Com o AWS Elastic Beanstalk você sobe um arquivo zip com o docker-compose.yml e ele lança a máquina, faz o build da imagem e entrega uma URL pública. Este texto mostra o caminho completo, do clone do projeto ao deploy.
Gravei a aula em junho de 2022, e o console da AWS e as plataformas do Elastic Beanstalk mudam com o tempo. As versões e as telas que aparecem aqui são as daquele dia: confira as plataformas Docker atuais na documentação oficial.
O que o Elastic Beanstalk faz por você
O Elastic Beanstalk é o serviço da AWS que roda e gerencia aplicações. Ele conversa com vários outros serviços para automatizar o que você faria na mão.
Quando você sobe a aplicação, ela vai para a área Application Versions, e por baixo dos panos a versão fica guardada no S3. Em seguida ele dispara o deploy para uma instância EC2, e é ele mesmo quem lança essa instância. Também entrega um endpoint válido para a aplicação e deixa você controlar quantas instâncias ficam disponíveis durante o deploy.
O serviço em si não tem custo. Você paga só pelos recursos que ele usa, no exemplo o S3 com a versão da aplicação e a instância onde ela roda.
1Baixar o projeto e ajustar o docker-compose.yml
Usei a aplicação da BIA, em Node com React, que já roda em container. O projeto é público no GitHub. Clone com HTTPS e abra no VS Code:
git clone <url-https-do-projeto>
code bia
O Elastic Beanstalk consegue ler vários arquivos de configuração, e um deles é o Docker Compose. Por isso a adaptação é no docker-compose.yml. Eu queria rodar só a aplicação web, então:
- Tirei o banco. O arquivo tinha dois serviços,
serveredatabase. Deixei só oserver. - Tirei o
links, que apontava para o banco e não funcionaria sem ele. - Troquei a porta. Localmente a aplicação expõe a 3001 (
3001:8080). Na AWS ela precisa sair na porta 80 (80:8080), que é a que vou abrir para o mundo.

Com isso o Elastic Beanstalk lê o server, vê que ele tem um build no contexto atual, procura o Dockerfile e roda o projeto.
2Gerar o zip
Selecione todos os arquivos do projeto, clique com o botão direito e comprima em formato zip. Dei o nome bia-youtube.zip.
Os arquivos precisam estar na raiz do zip, não dentro de uma pasta. É na raiz que o Elastic Beanstalk procura o docker-compose.yml.
3Criar a aplicação
No console, pesquise por Elastic Beanstalk e crie uma aplicação.
- Nome:
bia-youtube. As tags de aplicação são opcionais, e eu não usei. - Plataforma: Docker. Na aula, a branch era "Docker running on 64bit Amazon Linux 2" e a versão da plataforma, a 3.4.16, a recomendada. Cada atualização de versão traz mais recursos: quando a AWS lança uma família de instâncias nova, em geral você precisa atualizar a plataforma para ela aparecer na lista do Elastic Beanstalk.
- Código da aplicação: deixei o exemplo, porque o upload do zip vem depois.

Clique em Configure more options e escolha o preset Single Instance, uma aplicação só com uma instância, para não trazer complexidade. Software, X-Ray, logs e propriedades do ambiente ficam no padrão. Em Instância, mantive o padrão e mexi só no security group.
4Liberar a porta 80 no security group
Quero a instância acessível para o mundo na porta 80. Na aba de EC2, crie um security group (o meu chama BIA Web) com uma regra de entrada HTTP, porta 80, origem Anywhere. No meu já havia também uma regra de SSH, só para o meu IP, para o caso de eu precisar me conectar. Como não vou me conectar, a porta 80 bastaria.
Volte ao Elastic Beanstalk, escolha esse security group e salve. Depois configure:
- Rede: a configuração padrão, com IP público habilitado para a instância. Em zona de disponibilidade posso escolher A, B ou C, e ele usa a que estiver disponível.
- Banco: não configurei.
- Capacidade: só a
t2.micro, que na aula estava na camada gratuita.
Salve e crie a aplicação. Ele também cria um ambiente para ela, o bia-youtube-env, e leva alguns minutos. Dentro de uma aplicação cabem vários ambientes, e você cria os que precisar.
Quando o ambiente ficou com status Ok, abri a URL que ele liberou: carregou a página de exemplo do Elastic Beanstalk, a Sample Application que escolhi no passo 3.

5Subir o zip e fazer o deploy
Com o ambiente verde e a página de exemplo no ar, clique em Upload and deploy, escolha o zip e coloque o version label V1. Clique em Deploy.
O Elastic Beanstalk envia o zip para o ambiente, lê o docker-compose.yml, faz o build na própria instância e manda rodar. Leva de um a dois minutos. Na aula o processo todo, com os eventos, levou 4 minutos.
Sem eu fazer nada, ele criou a instância EC2 e também um Elastic IP para ela. Com uma instância só, se ela morrer e uma nova for lançada, o Elastic Beanstalk associa o mesmo IP à nova. O IP do ambiente não muda.
Em Application Versions aparece a versão em execução e a que está sendo implantada. Se precisar voltar, escolha a versão anterior e mande fazer o deploy dela. Quando o evento de deploy na instância conclui com sucesso e o ambiente fica verde, abra a URL que ele forneceu.

6Encerrar o ambiente
Terminada a prática, termine o ambiente. Sem ele, você fica livre de qualquer custo desse processo. Hoje isso pesa mais do que na gravação: desde 1º de fevereiro de 2024 a AWS cobra por todo endereço IPv4 público, inclusive o da instância e o Elastic IP que o ambiente usa.
O banco ficou de fora: aqui só roda a aplicação web. Se quiser levar adiante, o próximo passo é criar um banco no RDS e conectar à aplicação. Outro desafio é mudar algum arquivo do código, gerar um novo zip e fazer o deploy para ver a alteração no ambiente.
Checklist
- Projeto clonado e
docker-compose.ymlsó com o serviço da aplicação web, semlinkspara o banco. - Porta publicada como 80 no
docker-compose.yml. - Zip com os arquivos na raiz.
- Aplicação criada com a plataforma Docker e o preset Single Instance.
- Security group liberando HTTP na porta 80, com SSH só para o seu IP, e IP público na instância.
- Zip enviado em Upload and deploy, com um version label.
- URL do ambiente aberta com a aplicação rodando.
- Ambiente terminado ao final do teste.
O que os alunos dizem

“Depois do layoff, percebi que o mercado exigia AWS e eu não sabia nem por onde começar.”
Gisele, Desenvolvedora Java Sênior
Ver depoimento
“A metodologia da Formação AWS mudou tudo pra mim. Foi ela que consolidou meu conhecimento, me deu segurança e me levou a conquistar a vaga de Engenheiro de Cloud dentro da minha própria empresa.”
Harnon Ramalho, Engenheiro de Cloud
Ver depoimento
“A Formação AWS me deu a prática, a segurança e a clareza que eu nunca encontrei em nenhum outro curso.”
Jhon Wilame, SRE / DevOps Engineer
Ver depoimento
Formação AWS
Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.
Agende uma conversaPrefere assistir?
A aula completa (24 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

