Amazon DOP-C02: Pipelines de CI/CD e Estratégias de Implantação — Guia de estudos
Faz parte do AWS DevOps Engineer Professional DOP-C02 — Guia de estudos. Pratique com respostas verificadas no centro de exames da Amazon, ou faça testes cronometrados no ExamRoll.io.
Visão Geral
Um sistema de CI/CD robusto na AWS integra controle de versão, compilação (build), teste, governança de artefatos, orquestração de implantação e estratégias de lançamento seguras entre múltiplas contas e Regiões. Os principais serviços gerenciados — CodeCommit, CodeArtifact, CodeBuild, CodePipeline e CodeDeploy — eliminam a manutenção de servidores, integram-se fortemente com o IAM e o KMS, e fornecem suporte de primeira classe para implantações blue/green, canary, contínuas (rolling) e no local (in-place) para EC2/Auto Scaling, ECS e Lambda. Pipelines eficazes também dependem de gatilhos precisos (webhooks, EventBridge, agendamentos), gerenciamento disciplinado de artefatos, armazenamento em cache de compilação para velocidade e desvio de tráfego direcionado com alarmes de saúde para reversão automática. Para empresas, padrões entre contas (cross-account) e entre Regiões (cross-Region) são obrigatórios, exigindo a assunção de roles, repositórios de artefatos regionais e políticas de criptografia consistentes.
Orquestração com as AWS Developer Tools
Use o CodeCommit como um serviço Git privado e de alta disponibilidade. Ele se integra com o EventBridge para eventos de repositório e de pull request, suporta modelos de regras de aprovação e usa o IAM para autorização detalhada. Para Git de terceiros (GitHub/Bitbucket), configure ações de origem (source actions) do CodePipeline com webhooks para gatilhos quase em tempo real.
O CodeArtifact centraliza o gerenciamento de pacotes para múltiplos ecossistemas (npm, Maven, PyPI, NuGet). Ele suporta conexões upstream com registros públicos com armazenamento em cache, criptografia KMS por repositório e tokens de autenticação com escopo definido que expiram automaticamente. Integre no CodeBuild invocando
undefined
durante o
undefined
para configurar gerenciadores de pacotes sem incorporar segredos de longa duração.
O CodeBuild fornece compilações efêmeras e em contêineres sem gerenciar workers. Capacidades principais:
- Isolamento de ambiente e suporte a VPC para dependências privadas. Habilite o modo privilegiado para compilações Docker e ative o cache local de camadas Docker para acelerar a criação de imagens.
- Variáveis de ambiente de três fontes: texto simples (plaintext), SSM Parameter Store e Secrets Manager (seguro por padrão, sem segredos codificados). Você também pode passar variáveis do CodePipeline.
- Armazenamento em cache para reduzir os tempos de compilação:
- Cache local: cache de código-fonte, cache de camadas Docker e diretórios personalizados no host de compilação.
- Cache S3: conjuntos de dependências reutilizáveis compartilhados entre as compilações.
- Gerenciamento de artefatos: especifique
undefined
e
undefined
para publicar múltiplas saídas (por exemplo, pacote da aplicação e template do CloudFormation). Criptografe artefatos com chaves KMS e evite ACLs públicas.
- Relatórios: envie logs para o CloudWatch Logs/S3. Use relatórios para resultados de testes e selos (badges) do CodeBuild para feedback em PRs.
O CodePipeline é o orquestrador. Defina estágios (source, build, test, deploy, approval) com ações que podem ser executadas em paralelo ou em sequência. Melhores práticas:
- Gatilhos:
- Webhooks para fontes do GitHub/Bitbucket.
- Regras do EventBridge para alterações de branch no CodeCommit; verifique a existência da regra quando os pipelines não iniciarem.
- Pipelines agendados via regras de agendamento do EventBridge que chamam
undefined
.
- Repositórios de artefatos (Artifact stores): um bucket S3 por Região usada pelo pipeline; use uma chave KMS gerenciada pelo cliente. Para ações entre Regiões (cross-Region), adicione repositórios de artefatos regionais.
- Aprovações manuais com SNS ou EventBridge para integrar chat/webhooks para notificações quase em tempo real.
- IAM detalhado: uma service role para o pipeline com o menor privilégio; roles por ação são assumidas para operações entre contas (cross-account).
O CodeDeploy é o motor de implantação que suporta alvos EC2/on-prem, ECS e Lambda. Ele gerencia ganchos de ciclo de vida (lifecycle hooks), desvio de tráfego, verificações de saúde e reversão automática por meio de alarmes do CloudWatch. Garanta que as instâncias EC2 executem o agente do CodeDeploy, tenham um instance profile e conectividade de saída para os endpoints do CodeDeploy (ou egresso via NAT). Eventos ignorados e implantações sem operação (no-op) geralmente indicam problemas de agente, permissão ou conectividade.
Estratégias de Implantação e Ciclo de Vida do CodeDeploy
Escolha a estratégia com base no risco, capacidade e plataforma:
- In-place (EC2/on-prem): Atualiza a aplicação nas instâncias existentes. Combine com as configurações de implantação OneAtATime, HalfAtATime ou AllAtOnce. Anexe um ELB para drenar e registrar novamente as instâncias.
- Rolling (ECS): Substitui tarefas em lotes no mesmo serviço. Pode ser o rolling nativo do ECS ou gerenciado via CodeDeploy como blue/green com desvio controlado.
- Blue/green:
- EC2/Auto Scaling: Provisiona um ASG verde, valida e, em seguida, transfere o tráfego do ambiente azul para o verde. Opcionalmente, encerre ou mantenha o ambiente azul.
- ECS: Cria um conjunto de tarefas de substituição (replacement task set) atrás de um segundo grupo de destino (target group); valida e, em seguida, alterna os listeners.
- Lambda: Desvia o tráfego de um alias para uma nova versão da função e monitora.
- Canary: Desvia uma pequena porcentagem primeiro (ex: 10%), observa por um período e depois conclui.
- Linear: Aumenta o tráfego em etapas iguais (ex: 10% a cada 5 minutos).
O appspec.yml do CodeDeploy define o que instalar e quando executar scripts:
- Para EC2/On-Prem (YAML):
- files: onde colocar os arquivos.
- permissions: atualizações de propriedade/modo de arquivo sem scripts personalizados.
- hooks (comuns): ApplicationStop, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.
- Hooks de controle de tráfego (ao usar um load balancer): BeforeBlockTraffic, AfterBlockTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- Use variáveis de ambiente predefinidas (ex: DEPLOYMENT_GROUP_NAME, DEPLOYMENT_ID, LIFECYCLE_EVENT) para modificar o comportamento dinamicamente sem revisões separadas, como alternar os níveis de log do Apache por grupo de implantação.
- Para ECS:
- resources: TargetService com TaskDefinition e LoadBalancerInfo.
- hooks: BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic.
- O hook AfterAllowTestTraffic é ideal para testes de fumaça (smoke tests)/integração no conjunto de tarefas verde com um listener de teste.
- Para Lambda:
- resources define a função, a versão e o alias para o qual o tráfego será desviado.
- hooks: BeforeAllowTraffic e AfterAllowTraffic.
Desvio de tráfego e rollback:
- Configure as configurações de implantação:
- Lambda/ECS: Canary10Percent15Minutes, Canary10Percent5Minutes, Linear10PercentEvery1Minute, AllAtOnce ou personalizadas.
- EC2 Blue/Green: Redirecionamento de tráfego do tipo all-at-once, canary ou linear através dos listeners/grupos de destino do load balancer.
- Adicione alarmes do CloudWatch ao grupo de implantação para fazer o rollback automático em caso de erros, 5xx ou métricas personalizadas. Para o ECS, os alarmes podem monitorar erros 5xx do grupo de destino ou métricas do serviço; para o Lambda, monitore Errors/Throttles da função com dimensões de alias/versão.
- Use hooks de ciclo de vida (ex: AfterAllowTestTraffic) para executar validação via Lambda ou SSM; saídas diferentes de zero causam rollback.
Blue/Green e Desvio de Tráfego para EC2, ECS e Lambda
EC2/Auto Scaling:
- O blue/green com CodeDeploy provisiona um novo Auto Scaling group para o ambiente verde, associa-o a um grupo de destino separado e, em seguida, alterna os listeners do ALB. Você pode optar por encerrar o ambiente azul automaticamente ou mantê-lo para um rollback rápido.
- Para implantações in-place no EC2, combine com um ELB para cancelar/registrar o registro de instâncias de forma gradual (gracefully) e proteger a disponibilidade. A configuração de implantação dita os tamanhos dos lotes e o ritmo.
ECS:
- O CodeDeploy se integra com serviços ECS usando dois grupos de destino atrás de um ALB. Um conjunto de tarefas de substituição (verde) é criado com a nova definição de tarefa.
- O tráfego de teste flui para o grupo de destino verde através de um listener de teste dedicado; o tráfego de produção permanece no azul até a promoção.
- Desvios do tipo canary ou linear movem o tráfego progressivamente para o ambiente verde enquanto monitoram os alarmes do CloudWatch. Use o hook AfterAllowTestTraffic para executar a validação (por exemplo, uma função Lambda que chama verificações sintéticas) antes da transição final da produção.
Lambda:
- O CodeDeploy atualiza um alias de função para uma nova versão com roteamento ponderado. Padrões canary e linear movem gradualmente a porcentagem de tráfego. Alarmes do CloudWatch no alias acionam o rollback automático.
- Com o AWS SAM ou CDK, defina AutoPublishAlias e DeploymentPreference nos templates para codificar a política canary/linear e os alarmes por função.
Roteamento ponderado além do CodeDeploy:
- Para balanceamento multi-Region ou multi-stack, os registros ponderados (weighted records) do Route 53 com verificações de saúde (health checks) fornecem divisão de tráfego regional (por exemplo, 1% para uma região secundária) e failover. Isso complementa, mas não substitui, o desvio de tráfego por serviço do CodeDeploy.
Entrega Multi-Account e Multi-Region
Pipelines empresariais geralmente residem em uma conta centralizada de “ferramentas” (tooling), fazendo deploy para contas de dev/test/prod em múltiplas Regiões:
- Cross-account:
- Nas ações do CodePipeline, especifique um RoleArn na conta de destino que confia no principal da role do pipeline. Use permissões de privilégio mínimo por ação (CloudFormation, CodeDeploy, ECS, Lambda).
- Para o CodeBuild que precisa acessar recursos da conta de destino, faça com que o build assuma uma role (STS) ou use uma role de ação por conta, em vez de um amplo AdministratorAccess.
- Para o CodeDeploy no EC2, a conta de destino gerencia a aplicação/grupo de deployment e a service role; o pipeline assume uma role para chamar a ação CreateDeployment.
- Cross-Region:
- Adicione um repositório de artefatos (artifact store) por Região na configuração do pipeline (um bucket S3 com uma chave KMS regional). Atualize as políticas do bucket para permitir que a role do pipeline e as roles por ação leiam/escrevam.
- Crie artefatos específicos da região quando necessário (por exemplo, empacotando código Lambda com
aws cloudformation packagevisando um bucket S3 local da Região). - Ações de deploy do CloudFormation em uma Região remota devem referenciar o repositório de artefatos da Região e podem especificar uma role de execução da stack na conta de destino para privilégio mínimo.
Segurança, artefatos e governança:
- Mantenha os buckets de artefatos privados; evite ACLs públicas como
authenticated-read. Confie em políticas de bucket com escopo para as roles do pipeline e de ação, com criptografia KMS. - Padronize os buildspecs para enviar artefatos de forma previsível (ex: pacote da aplicação para EC2/CodeDeploy,
taskdef.jsoneappspecpara ECS, templates empacotados para Lambda). - Promova a imutabilidade com o pre-baking de AMIs para EC2 para que o agente do CodeDeploy e o runtime base sejam consistentes; isso reduz o drift e o tempo de deployment.
- Use regras do EventBridge para espelhar eventos do pipeline em notificações, ChatOps ou sistemas de tickets, e para orquestrar aprovações manuais.
Cenário de Problema Prático
O Spotify precisa de releases mais seguros para centenas de microsserviços com um substrato de computação misto (ECS no Fargate, serviços baseados em EC2 e Lambda). Eles exigem deployments canary e blue/green com testes automatizados antes do tráfego de produção, governança de artefatos e promoção multi-Region, mantendo a produção em uma conta separada.
- Estabelecer repositórios e pacotes
- Use o CodeCommit para repositórios privados e automação de PR/testes orientada pelo EventBridge. O CodeArtifact hospeda dependências npm, Maven e PyPI com upstreams e criptografia KMS para padronizar os controles da cadeia de suprimentos. Por quê: Integração central com IAM/KMS e sem necessidade de webhooks externos para repositórios críticos; o CodeArtifact fornece pacotes em cache e com curadoria.
- Build e teste
- Crie projetos CodeBuild por serviço com integração VPC, cache local (camada Docker e código-fonte) e variáveis de ambiente obtidas do Secrets Manager/Parameter Store. Construa imagens e envie para o ECR; gere artefatos secundários (
taskdef.json/appspec.yamlou templates CloudFormation empacotados). Por quê: Builds efêmeros e isolados, gerenciamento robusto de segredos, ciclos mais rápidos via cache e múltiplas saídas que suportam tanto empacotamento de contêineres quanto serverless.
- Orquestrar pipelines
- Crie um CodePipeline centralizado em uma conta de ferramentas com os estágios: Source, Build, Unit Tests, Deploy-to-Staging, Automated Tests, Manual Approval, Deploy-to-Prod. Os gatilhos vêm do EventBridge em atualizações do CodeCommit; uma regra agendada noturna do EventBridge inicia os testes de integração. Por quê: Fluxo opinativo e auditável com gates e execuções orientadas tanto a eventos quanto agendadas.
- Deployments blue/green e canary
- Serviços ECS usam CodeDeploy blue/green com dois target groups e desvio de tráfego canary; a validação é executada em
AfterAllowTestTrafficpor meio de um Lambda que executa testes de contrato e verificações sintéticas. Serviços EC2 usam CodeDeploy in-place comOneAtATimeou trocas de ASG blue/green quando a capacidade permite. Funções Lambda fazem deploy com CodeDeploy usandoCanary10Percent15Minutese alarmes do CloudWatch para Erros e 5xx do API Gateway. Por quê: Controles de tráfego de primeira classe por runtime e rollback automático em caso de violação de alarmes minimizam o impacto no cliente.
- Promoção cross-account e cross-Region
- O pipeline assume roles por ambiente nas contas de dev/test/prod. Para
us-east-1eeu-west-1, configure repositórios de artefatos regionais e chaves KMS regionais; o CodeBuild produz templates empacotados específicos da região e faz upload dos artefatos para buckets locais da Região. Ações do CloudFormation em cada conta/Região usam roles de execução da stack; ações do CodeDeploy visam aplicações/grupos de deployment específicos do ambiente. Por quê: Forte isolamento de prod, privilégio mínimo via assunção de role e criptografia em conformidade com baixo overhead operacional.
- Governança e segurança de artefatos
- Imponha o uso de buckets S3 de artefatos privados com políticas restritivas e remova quaisquer ACLs públicas. Assine imagens de contêiner e templates; armazene SBOMs como artefatos de build. Use chaves de condição do IAM para limitar as ações de produção aos pipelines na conta de ferramentas. Por quê: Previne o vazamento de dados, melhora a proveniência e se alinha com as melhores práticas da cadeia de suprimentos.
- Observabilidade e notificações
- Anexe alarmes do CloudWatch a todos os grupos de deployment; regras do EventBridge encaminham eventos de execução e aprovação do CodePipeline para um tópico SNS e um Lambda que posta no Slack. Por quê: Feedback mais rápido, rollbacks automatizados e aprovações com intervenção humana onde necessário.
Este design unifica runtimes heterogêneos sob uma única toolchain gerenciada, fornece estratégias de rollout seguras com verificação automatizada, reduz a manutenção eliminando a infraestrutura de CI/CD auto-hospedada e escala globalmente com uma clara separação de responsabilidades.
Todos os domínios · Infraestrutura como Código e Gerenciamento de Configuração →
Pratique estas questões → · Prática cronometrada no ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Passe no seu exame →