Cloud & Infraestrutura

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

7 min de leitura

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

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

<h2>Entendendo a Tríade CI/CD da AWS</h2>

<p>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.</p>

<h3>O que cada serviço faz</h3>

<p><strong>CodeCommit</strong> é um repositório Git gerenciado (equivalente ao GitHub, mas nativo AWS). <strong>CodeBuild</strong> executa compilações, testes e análises estáticas em contêineres isolados. <strong>CodeDeploy</strong> 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.</p>

<p>---</p>

<h2>CodeCommit: Seu Repositório Gerenciado</h2>

<p>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.</p>

<h3>Configuração Inicial</h3>

<pre><code class="language-bash"># 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 &quot;Primeira mudança&quot;

git push origin main</code></pre>

<p>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.</p>

<pre><code class="language-bash"># Use o AWS CLI para criar um repositório

aws codecommit create-repository \

--repository-name meu-app \

--description &quot;Aplicação Node.js&quot;</code></pre>

<p>---</p>

<h2>CodeBuild: Compilação e Testes Automatizados</h2>

<p>CodeBuild executa seus scripts de build em contêineres Docker gerenciados. Você define as etapas em um arquivo <code>buildspec.yml</code> que fica na raiz do repositório. Cada build roda em um ambiente limpo e isolado, garantindo consistência e reprodutibilidade.</p>

<h3>Estrutura do buildspec.yml</h3>

<pre><code class="language-yaml">version: 0.2

phases:

install:

runtime-versions:

nodejs: 18

commands:

  • echo &quot;Instalando dependências...&quot;
  • npm install

pre_build:

commands:

  • echo &quot;Executando testes...&quot;
  • npm run test
  • echo &quot;Rodando linter...&quot;
  • npm run lint

build:

commands:

  • echo &quot;Compilando aplicação...&quot;
  • npm run build
  • echo &quot;Build concluído em date&quot;

post_build:

commands:

  • echo &quot;Gerando artefatos...&quot;
  • zip -r app.zip dist/ node_modules/

artifacts:

files:

  • app.zip

name: BuildArtifact

cache:

paths:

  • &#039;/root/.npm/*/&#039;

reports:

coverage:

files:

  • coverage/cobertura-coverage.xml

file-format: COBERTURAXML</code></pre>

<p>Este arquivo define quatro fases: <strong>install</strong> (prepara ambiente), <strong>pre_build</strong> (testes), <strong>build</strong> (compilação) e <strong>post_build</strong> (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.</p>

<pre><code class="language-bash"># Inicie um build manualmente

aws codebuild start-build \

--project-name meu-app-build \

--source-version main</code></pre>

<p>---</p>

<h2>CodeDeploy: Entrega Controlada em Produção</h2>

<p>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.</p>

<h3>Configuração com appspec.yml</h3>

<pre><code class="language-yaml">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</code></pre>

<p>O <code>appspec.yml</code> 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.</p>

<pre><code class="language-bash"># 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 &quot;Aplicação está saudável&quot;

exit 0

fi

sleep 2

done

echo &quot;Erro: Aplicação não respondeu&quot;

exit 1</code></pre>

<p>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.</p>

<p>---</p>

<h2>Conclusão</h2>

<p><strong>Três aprendizados principais</strong>: (1) CodeCommit + CodeBuild + CodeDeploy formam um pipeline nativo robusto e integrado, eliminando ferramentas externas desnecessárias para quem já usa AWS. (2) O arquivo <code>buildspec.yml</code> é a chave do CodeBuild; defina fases claras e use caching para acelerar builds. (3) CodeDeploy com <code>appspec.yml</code> 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.</p>

<p>---</p>

<h2>Referências</h2>

<ul>

<li><a href="https://docs.aws.amazon.com/codecommit/" target="_blank" rel="noopener noreferrer">AWS CodeCommit Documentation</a></li>

<li><a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html" target="_blank" rel="noopener noreferrer">AWS CodeBuild - Build Specifications Reference</a></li>

<li><a href="https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification.html" target="_blank" rel="noopener noreferrer">AWS CodeDeploy AppSpec Reference</a></li>

<li><a href="https://aws.amazon.com/devops/" target="_blank" rel="noopener noreferrer">AWS DevOps Competency Partner Program</a></li>

<li><a href="https://aws.amazon.com/devops/continuous-integration/" target="_blank" rel="noopener noreferrer">Continuous Integration and Continuous Delivery on AWS</a></li>

</ul>

Comentários

Mais em Cloud & Infraestrutura

Dominando Lambda Avançado: Layers, Extensions, SnapStart e Cold Start em Projetos Reais
Dominando Lambda Avançado: Layers, Extensions, SnapStart e Cold Start em Projetos Reais

Entendendo Lambda Layers: Organização e Reutilização Lambda Layers são pacote...

Como Usar Aurora: Global Database, Serverless v2 e Cluster Endpoints em Produção
Como Usar Aurora: Global Database, Serverless v2 e Cluster Endpoints em Produção

Aurora: Database Global, Serverless v2 e Endpoints em Produção Amazon Aurora...

Well-Architected Framework: Os Seis Pilares na Prática na Prática
Well-Architected Framework: Os Seis Pilares na Prática na Prática

Well-Architected Framework: Os Seis Pilares na Prática O AWS Well-Architected...