CodePipeline: primeiro fluxo de CI/CD na AWS com Docker e GitHub
Um pipeline de CI/CD tira o deploy da máquina do desenvolvedor: você faz o push no GitHub e a AWS entrega a nova versão sozinha. Abaixo eu monto o primeiro fluxo do zero com o AWS CodePipeline, para um projeto em Node com React que roda em Docker e vai para o Elastic Beanstalk.
Gravei a aula em fevereiro de 2024. As telas do CodePipeline e do Beanstalk, os tipos de pipeline e os preços mudam com o tempo. Confira os tipos de pipeline na documentação oficial e os valores na página de preços.
O que o pipeline faz
Sem pipeline, o deploy sai da sua máquina direto para o ambiente na AWS. No dia a dia isso não escala, e por isso as empresas procuram um processo de deploy automatizado que não dependa da máquina do desenvolvedor.
O fluxo que montei é este: o projeto fica no GitHub; quando chega um push, o CodePipeline dispara, faz a integração contínua e a entrega contínua, e a nova versão chega ao Elastic Beanstalk. O CodePipeline é o serviço da AWS para essa finalidade.
Como o projeto usa Docker, o build da imagem acontece dentro do Beanstalk. A versão da aplicação sobe para a área Application Versions, e quando ela é baixada na instância o Beanstalk faz o build com base no seu Dockerfile. Por isso o pipeline deste exemplo não tem etapa de build.
1Criar o ambiente no Elastic Beanstalk
Primeiro o ambiente, depois o pipeline. Os passos de criação eu cobri em outra aula, e o texto Elastic Beanstalk com Docker mostra o caminho com zip. O que escolhi aqui:
- Aplicação:
bia. O ambiente é para aplicação web, chamadoBia-pipeline-youtube. - Plataforma: Docker, na versão mais recente. Nos quadros aparece "Docker running on 64bit Amazon Linux 2023/4.2.1".
- Preset: Single Instance, com capacidade 1.
- Perfil da instância: uma role com a policy
AWSElasticBeanstalkWebTier(você cria a role e escolhe essa policy). A minha se chamaEC2 Beanstalk. - Rede: a rede padrão, com IP público e as zonas A, B e C.
- Security group: o meu,
BIA Web, que só tem regra de entrada na porta 80. - Instância: T3 Medium. O build acontece dentro da EC2, e uma máquina menor não aguenta. Não é uma instância da camada gratuita.
Monitoramento ficou no padrão, sem log stream e sem notificação, e o deploy acontece em 100% das instâncias de uma vez.
2O que o projeto precisa ter
O projeto é um fork da aplicação BIA, em Node com React, e já traz Dockerfile e docker-compose.yml. O Compose é peça fundamental para este pipeline:
services:
server:
build: .
container_name: bia
ports:
- 80:8080
O serviço server faz o build do contexto atual, lê o Dockerfile e publica a porta 80 do ambiente na 8080 do container. Em um deploy manual você usaria um script, o eb deploy ou um zip. Aqui quero que cada alteração no repositório dispare o deploy sozinha.
3Criar o pipeline
No console do CodePipeline, clique em Create pipeline e configure:
- Nome:
bia-pipeline-youtube. - Tipo: V2.
- Modo de execução: Superseded. É o padrão do console. Se vier outro push antes de o deploy terminar, a execução mais recente passa por cima da mais antiga. Queued executa uma de cada vez, em fila, e Parallel executa ao mesmo tempo.
- Service role: nova. Deixe o CodePipeline criar a role que ele precisa. Variáveis e configurações avançadas dos artefatos ficam no padrão.

4Ligar o GitHub
Em Source provider, escolha o GitHub (versão 2). Em Connection, use uma conexão que já exista ou clique em conectar: abre uma janela, você cria o application, avança e escolhe os repositórios da sua conta que podem ser usados. Eu já tinha a conexão e já havia liberado alguns repositórios.
Depois escolha o repositório (o meu é bia-pipeline-yt) e o branch main. Em saída dos artefatos, deixei o padrão, CodePipeline default. Em trigger, não coloquei filtro.
5Pular o build e configurar o deploy
Na etapa Build provider você colocaria testes e build. No meu caso o build da imagem acontece no Beanstalk, então ignorei essa etapa.
No Deploy provider, escolha o AWS Elastic Beanstalk, a região, a aplicação bia e o ambiente Bia-pipeline-youtube. Confira o resumo e clique em Create pipeline.
O pipeline nasce com duas etapas, Source e Deploy, e já dispara sozinho: ele pegou o último commit que eu tinha feito no GitHub e fez o deploy para o Beanstalk. Esse primeiro deploy é sem push, só a criação do pipeline.
6Testar com um push
Na aplicação, o botão de adicionar era verde e o de fechar, preto. Alterei o Header.js: é um botão só, que alterna de estado: o texto de Fechar virou Close e o de adicionar virou Add, com o Add em azul e o Close em vermelho. Fiz commit e push com a mensagem "mudando para inglês".
O pipeline iniciou na hora: a etapa Source concluiu e o Deploy começou. O CodePipeline fica acompanhando o Beanstalk até o ambiente informar que a atualização terminou.

Quando o deploy terminou, abri a aplicação: o botão "Add" azul no lugar do verde. O histórico mostrou os dois deploys, o do primeiro disparo e o do push, ambos com sucesso.

7Desligar o que cobra
Acabou o teste, desalocar o ambiente: apague o pipeline e, no Beanstalk, encerre o ambiente para a instância parar de gerar custo.
Na aula eu disse que a camada gratuita traz 100 minutos de execução e que, passando disso, o custo por projeto é baixo (na gravação, em fevereiro de 2024, eu disse que achava que ficava em 1 ou 2 dólares por projeto). Esse número pode ter mudado: confira na página de preços.
Checklist
- Ambiente do Elastic Beanstalk criado com plataforma Docker, Single Instance e uma instância com memória para o build (T3 Medium).
- Projeto com Dockerfile e
docker-compose.ymlpublicando a porta 80. - Pipeline V2 criado, com a service role nova e o modo de execução escolhido.
- Conexão com o GitHub, repositório e branch
mainselecionados. - Etapa de build ignorada e deploy configurado para o Elastic Beanstalk.
- Um push de teste que disparou o pipeline e mudou a aplicação.
- Pipeline apagado e ambiente encerrado depois do teste.
Esse é o primeiro fluxo, o mais simples: quem quer ir além acrescenta etapas de build e testes ao mesmo desenho.
O que os alunos dizem

“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
“O melhor curso que eu fiz até hoje é o seu.”
Jorge Bastos, Desenvolvedor Java Sênior (AWS + IA)
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 (26 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

