Se um desenvolvedor tivesse que fazer upload manualmente para o servidor, executar testes e implantar toda vez que fizesse uma alteracao no codigo, seria extremamente tedioso. CI/CD e a forma de automatizar todo esse processo. Voce simplesmente envia seu codigo para o Git e o restante — compilar, testar e implantar — acontece automaticamente.
As perguntas do exame DVA-C02 nessa area focam em como compilar, testar e implantar alteracoes de codigo automaticamente.
O que e CI/CD?
CI (Integracao Continua): Compila e testa o codigo automaticamente toda vez que varios desenvolvedores integram suas alteracoes. CD (Implantacao Continua): Implanta automaticamente em um servidor o codigo que passou nos testes.
Em termos simples, e um pipeline onde alteracao de codigo leva a teste automatico leva a implantacao automatica, tudo em sequencia.
Cadeia de servicos CI/CD da AWS
A AWS tem servicos dedicados para cada etapa do CI/CD, todos conectados pelo CodePipeline.
Fonte (CodeCommit/GitHub) → Compilacao (CodeBuild) → Implantacao (CodeDeploy) = Pipeline (CodePipeline)
CodeCommit
Um repositorio de codigo-fonte baseado em Git. E muito similar ao GitHub, mas totalmente gerenciado dentro da AWS. Suporta branches, pull requests (PRs), revisoes de codigo e gatilhos de eventos.
CodeBuild
Um servico de compilacao totalmente gerenciado. E responsavel por transformar codigo em executaveis ou pacotes de implantacao (compilar, executar testes, empacotar, etc.). Nao e necessario gerenciar servidores.
As fases de compilacao sao definidas em um arquivo buildspec.yml. install: Instalar ferramentas e bibliotecas necessarias pre_build: Tarefas de preparacao antes da compilacao (login Docker, configuracao do ambiente) build: Compilacao real e execucao de testes post_build: Tarefas pos-compilacao (envio de notificacoes, etiquetagem de imagens) artifacts: Especificar onde armazenar a saida da compilacao
CodeDeploy
Implanta o codigo compilado em servidores reais. O codigo pode ser implantado em instancias EC2, funcoes Lambda ou conteineres ECS.
O metodo de implantacao e definido em um arquivo appspec.yml. EC2/on-premises: Definir scripts de hook para executar antes e depois da instalacao Lambda: Definir quanto trafego transferir para a nova versao de cada vez (ex. incrementos graduais de 10%) ECS: Definicao de tarefa e configuracao do balanceador de carga
CodePipeline
Conecta todos os servicos acima (fonte, compilacao, implantacao) em um pipeline automatizado unificado. Pense nele como a esteira transportadora de uma fabrica automatizada.
Vincula automaticamente cada etapa: fonte → compilacao → teste → implantacao Etapas de aprovacao manual podem ser adicionadas quando necessario (ex. revisao de um responsavel antes de implantar em producao) Integra-se com EventBridge para acionar automaticamente o pipeline quando eventos especificos ocorrem
SAM (Serverless Application Model)
SAM e um framework para definir e implantar aplicacoes serverless como Lambda usando codigo (arquivos YAML). Em vez de clicar no console para configurar a infraestrutura, voce a define como codigo. Essa abordagem e chamada de IaC (Infraestrutura como Codigo).
sam build: Compila o codigo e prepara um pacote de implantacao. sam deploy: Implanta na AWS via CloudFormation. sam local invoke: Testa funcoes Lambda na sua maquina local sem implantar na AWS. Extremamente util durante o desenvolvimento. template.yaml: Um arquivo de configuracao que define declarativamente funcoes Lambda, API Gateway, tabelas DynamoDB e mais.
Pontos-chave do exame
"Arquivo que define as fases de compilacao" -- buildspec.yml (CodeBuild)
"Arquivo que define o metodo de implantacao" -- appspec.yml (CodeDeploy)
"Automacao Fonte para Compilacao para Implantacao" -- CodePipeline
"IaC serverless e testes locais" -- SAM
"Repositorio de codigo-fonte AWS baseado em Git" -- CodeCommit
"Empacotar saida de compilacao" -- CodeBuild artifacts
"Adicionar aprovacao manual ao pipeline" -- Etapa de aprovacao manual do CodePipeline
Entender a diferenca precisa entre buildspec.yml (como compilar) e appspec.yml (como implantar)