Entendendo a Tríade CI/CD da AWS
A integração contínua e deployment contínuo (CI/CD) é a espinha dorsal do desenvolvimento moderno. A AWS oferece três serviços nativos que funcionam em conjunto: CodeCommit (repositório), CodeBuild (compilação e testes) e CodeDeploy (entrega em produção). Eles formam um pipeline completo onde mudanças de código disparam automaticamente todo o ciclo de validação e entrega. Diferente de ferramentas terceiras como GitHub Actions ou GitLab CI, esses serviços integram-se profundamente com o ecossistema AWS, oferecendo segurança, escalabilidade e custos previsíveis.
O que cada serviço faz
CodeCommit é um repositório Git gerenciado (equivalente ao GitHub, mas nativo AWS). CodeBuild executa compilações, testes e análises estáticas em contêineres isolados. CodeDeploy orquestra o lançamento do código em instâncias EC2, on-premises ou Lambda. Juntos, eles eliminam processos manuais e reduzem erros humanos. O grande diferencial é a integração automática com IAM, CloudWatch, SNS e outros serviços AWS.
CodeCommit: Seu Repositório Gerenciado
CodeCommit é um serviço Git totalmente gerenciado. Você não precisa manter servidores, apenas criar repositórios e configurar permissões via IAM. É ideal para equipes que já usam AWS e querem evitar a complexidade de gerenciar infraestrutura Git.
Configuração Inicial
# Clone um repositório CodeCommit
git clone codecommit://seu-usuario@seu-repositorio.git
# Configure credenciais Git (use AWS Credentials)
# No arquivo ~/.aws/credentials, coloque suas chaves AWS
# O CodeCommit usa as credenciais AWS para autenticação
# Faça um push
git add .
git commit -m "Primeira mudança"
git push origin main
Para usar CodeCommit, configure credenciais HTTPS com Git Credentials ou use AWS CLI com programmatic access. A autenticação é feita via IAM, garantindo que apenas usuários autorizados acessem os repositórios. Você também pode configurar triggers que disparam eventos quando código é pushado, iniciando automáticamente o pipeline CI/CD.
# Use o AWS CLI para criar um repositório
aws codecommit create-repository \
--repository-name meu-app \
--description "Aplicação Node.js"
CodeBuild: Compilação e Testes Automatizados
CodeBuild executa seus scripts de build em contêineres Docker gerenciados. Você define as etapas em um arquivo buildspec.yml que fica na raiz do repositório. Cada build roda em um ambiente limpo e isolado, garantindo consistência e reprodutibilidade.
Estrutura do buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
commands:
- echo "Instalando dependências..."
- npm install
pre_build:
commands:
- echo "Executando testes..."
- npm run test
- echo "Rodando linter..."
- npm run lint
build:
commands:
- echo "Compilando aplicação..."
- npm run build
- echo "Build concluído em `date`"
post_build:
commands:
- echo "Gerando artefatos..."
- zip -r app.zip dist/ node_modules/
artifacts:
files:
- app.zip
name: BuildArtifact
cache:
paths:
- '/root/.npm/**/*'
reports:
coverage:
files:
- coverage/cobertura-coverage.xml
file-format: COBERTURAXML
Este arquivo define quatro fases: install (prepara ambiente), pre_build (testes), build (compilação) e post_build (gera artefatos). Os artefatos são salvos em S3 e utilizados posteriormente pelo CodeDeploy. CodeBuild integra-se com CloudWatch Logs, enviando todos os logs do build automaticamente, facilitando debugging. Você também pode executar builds manualmente via AWS CLI ou disparar automaticamente por commits.
# Inicie um build manualmente
aws codebuild start-build \
--project-name meu-app-build \
--source-version main
CodeDeploy: Entrega Controlada em Produção
CodeDeploy automatiza o deployment de seu código em servidores. Ele suporta estratégias como Blue/Green (sem downtime) e Canary (rollout gradual). Diferente de ferramentas simples de SCP, CodeDeploy oferece health checks, rollbacks automáticos e coordenação de múltiplas instâncias.
Configuração com appspec.yml
version: 0.0
Resources:
- TargetService:
Type: AWS::EC2::Instance
Properties:
Name: !Ref AWS::StackName
Hooks:
BeforeInstall:
- Location: scripts/before_install.sh
Timeout: 300
RunAs: root
ApplicationStart:
- Location: scripts/start_server.sh
Timeout: 300
RunAs: root
ApplicationStop:
- Location: scripts/stop_server.sh
Timeout: 300
RunAs: root
ValidateService:
- Location: scripts/validate.sh
Timeout: 300
RunAs: root
O appspec.yml define hooks (scripts executados em momentos específicos) que controlam todo o ciclo de vida do deployment. Antes de instalar, você para a aplicação; durante o deployment, copia arquivos; e após instalar, valida a saúde da aplicação. CodeDeploy aguarda o sucesso de todos os hooks antes de considerar o deployment bem-sucedido.
# Script de validação (scripts/validate.sh)
#!/bin/bash
set -e
# Aguarda a aplicação ficar pronta
for i in {1..30}; do
if curl -f http://localhost:3000/health; then
echo "Aplicação está saudável"
exit 0
fi
sleep 2
done
echo "Erro: Aplicação não respondeu"
exit 1
Ao integrar os três serviços em um CodePipeline, o fluxo automático fica assim: commit dispara CodeBuild → testes e compilação → artefatos vão para S3 → CodeDeploy puxa artefatos e faz deploy → health checks validam sucesso. Tudo sem intervenção manual.
Conclusão
Três aprendizados principais: (1) CodeCommit + CodeBuild + CodeDeploy formam um pipeline nativo robusto e integrado, eliminando ferramentas externas desnecessárias para quem já usa AWS. (2) O arquivo buildspec.yml é a chave do CodeBuild; defina fases claras e use caching para acelerar builds. (3) CodeDeploy com appspec.yml e health checks garante deployments seguros; sempre inclua scripts de validação que testam a saúde real da aplicação. Dominar esses três serviços torna você capaz de implementar CI/CD profissional e escalável em qualquer projeto AWS.