AWS Admin

O que Todo Dev Deve Saber sobre CodeCommit, CodeBuild e CodeDeploy: CI/CD Nativo da AWS Já leu

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

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.


Referências


Artigos relacionados