Praticar de graça

🚀Entenda o AWS CodeDeploy

O CodeDeploy é o entregador de versão: você diz qual pacote (um .zip no S3) e pra quais máquinas (as que têm uma tag), e ele passa em cada uma parando a aplicação, instalando a versão nova, subindo de novo e conferindo se ficou de pé — uma, metade ou todas de uma vez.

Pra que serve

É o "CD" do CI/CD: o CodeBuild monta e testa, o CodeDeploy põe no ar. Ele substitui o "entrar por SSH em cada servidor e copiar arquivo", que não escala e não tem volta. E tem volta: se a versão nova falhar na validação, ele reinstala sozinho a última que funcionava (rollback automático).

Onde se usa no mundo real

Vocabulário

Aplicação
o nome que agrupa os ambientes e o histórico de deploys.
Deployment group
pra onde vai: as máquinas (por tag), a role e quantas por vez. Normalmente um por ambiente (homolog, produção).
Revisão
o pacote da versão: um .zip no S3 com o código e o appspec.yml.
appspec.yml
o roteiro dentro do pacote: que script roda em cada etapa (instalar, iniciar, validar).
Etapas (lifecycle events)
ApplicationStop, DownloadBundle, BeforeInstall, Install, AfterInstall, ApplicationStart, ValidateService.
Rollback
reinstalar a última versão boa quando a nova falha — o CodeDeploy faz sozinho se você ligar.
💰 Como cobra: Pra EC2 e Lambda, o CodeDeploy não cobra nada — você paga as máquinas e o S3, que já pagaria. Pra servidor fora da AWS (on-premises), cobra por atualização de máquina. Comparando: CodeDeploy x copiar por SSH — os dois colocam o arquivo lá; só o CodeDeploy faz em lotes, confere se ficou de pé e volta atrás sozinho.

Comandos que você aprende nesta trilha

Cada um deles roda de verdade no terminal do CLImb, com a mesma saída e as mesmas mensagens de erro que a AWS devolve.

aws deploy list-applications

USO

aws deploy list-applications

aws deploy create-application

USO

aws deploy create-application --application-name <nome> [--compute-platform Server|Lambda|ECS]

aws deploy get-application

USO

aws deploy get-application --application-name <nome>

aws deploy list-deployment-configs

USO

aws deploy list-deployment-configs

aws s3 mb

make bucket (criar bucket)

aws s3 mb s3://<nome-do-bucket>

aws s3 cp

copiar arquivos de/para o S3

aws s3 cp <origem> <destino>

aws ec2 run-instances

criar instâncias

aws ec2 run-instances --image-id <ami> --instance-type <tipo>
[--count N] [--key-name <chave>] [--security-groups <sg>]

aws ec2 create-tags

USO

aws ec2 create-tags --resources i-0abc --tags Key=Time,Value=plataforma Key=Ambiente,Value=producao

aws deploy create-deployment-group

USO

aws deploy create-deployment-group --application-name <app> --deployment-group-name <grupo> \
--service-role-arn arn:aws:iam::<conta>:role/<role> \
--ec2-tag-filters Key=<tag>,Value=<valor>,Type=KEY_AND_VALUE \
[--deployment-config-name CodeDeployDefault.OneAtATime] \
[--auto-rollback-configuration enabled=true,events=DEPLOYMENT_FAILURE]

aws deploy list-deployment-groups

USO

aws deploy list-deployment-groups --application-name <app>

aws deploy get-deployment-group

USO

aws deploy get-deployment-group --application-name <app> --deployment-group-name <grupo>

aws deploy create-deployment

USO

aws deploy create-deployment --application-name <app> --deployment-group-name <grupo> \
--s3-location bucket=<bucket>,key=<pacote.zip>,bundleType=zip \
[--deployment-config-name ...] [--description <texto>]

aws deploy get-deployment

USO

aws deploy get-deployment --deployment-id <d-XXXXXXXXX>

aws deploy list-deployment-targets

USO

aws deploy list-deployment-targets --deployment-id <id> [--target-filters '{"TargetStatus":["Failed"]}']

aws deploy get-deployment-target

USO

aws deploy get-deployment-target --deployment-id <id> --target-id <i-...>

aws deploy list-deployments

USO

aws deploy list-deployments [--application-name <app> [--deployment-group-name <grupo>]] [--include-only-statuses Failed ...]

aws deploy update-deployment-group

USO

aws deploy update-deployment-group --application-name <app> --current-deployment-group-name <grupo> \
[--deployment-config-name ...] [--auto-rollback-configuration enabled=true,events=DEPLOYMENT_FAILURE] \
[--ec2-tag-filters ...] [--service-role-arn ...] [--new-deployment-group-name ...]

aws deploy stop-deployment

USO

aws deploy stop-deployment --deployment-id <id>

aws deploy delete-deployment-group

USO

aws deploy delete-deployment-group --application-name <app> --deployment-group-name <grupo>

aws deploy delete-application

USO

aws deploy delete-application --application-name <nome>

O que você pratica (31 atividades)

Cada atividade é um pedido de trabalho, do jeito que ele chega no dia a dia — você resolve digitando os comandos, não escolhendo alternativa.

Quem entrega o código nos servidores?

Hoje o portal do RH vai pro ar com alguém entrando por SSH e copiando arquivo — e ninguém sabe voltar atrás quando dá errado. O time vai usar o CodeDeploy. Comece vendo quais aplicações ele já entrega nesta conta.

A aplicação do portal

Crie a aplicação portal-rh no CodeDeploy. É o marco da trilha: o fim do deploy por SSH começa aqui.

Pra que plataforma ela entrega?

Confira a aplicação portal-rh que você criou: o id e a plataforma (computePlatform).

Só a plataforma, pro inventário

A planilha de inventário tem uma coluna "plataforma". Traga só o computePlatform da portal-rh, em texto puro.

Uma, metade ou todas?

Antes de configurar, o time quer entender as opções de ritmo: atualizar uma máquina por vez, metade ou todas juntas. Liste as configurações de deploy que existem.

O balde dos pacotes

O CodeDeploy busca cada versão num bucket do S3. Crie o bucket portal-rh-pacotes — é lá que as versões do portal vão morar.

A versão 1 vai pro balde

O build gerou o pacote app.zip (ele está na sua pasta — confira com ls). Envie pro bucket com o nome portal-rh-v1.zip.

O servidor do portal

O portal precisa de um servidor. Suba uma instância com a AMI ami-0abcd1234ef567890 no tipo t3.micro e anote o InstanceId.

A etiqueta que o CodeDeploy procura

O CodeDeploy não recebe lista de IPs: ele acha as máquinas pela tag. Marque a instância que você acabou de subir com App=portal-rh.

O ambiente de produção

Crie o deployment group portal-rh-producao na aplicação portal-rh: as máquinas são as com a tag App=portal-rh (tipo KEY_AND_VALUE) e a role é arn:aws:iam::123456789012:role/codedeploy-servico.

Quais ambientes o portal tem?

Liste os deployment groups da aplicação portal-rh.

O que o ambiente de produção faz?

Confira o portal-rh-producao: filtro de tag, role e configuração de deploy (qual é o padrão?).

Que tag ele procura mesmo?

Alguém subiu uma máquina e ela não recebeu deploy. Antes de culpar o CodeDeploy, traga só o filtro de tag do portal-rh-producao.

O primeiro deploy

Tudo pronto. Entregue a versão portal-rh-v1.zip (bucket portal-rh-pacotes, tipo zip) no portal-rh-producao. Anote o deploymentId.

Subiu?

O deploy está rodando. Consulte pelo id — e consulte de novo até o status sair de InProgress.

Só o veredito, pro chat

O bot do chat do time avisa quando o deploy termina. Traga só o status do último deploy, em texto puro.

Em quais máquinas ele passou?

Liste as máquinas (alvos) que o último deploy atualizou.

Etapa por etapa

Veja o que o deploy fez na sua instância, etapa por etapa: parar, baixar, instalar, iniciar, validar.

O histórico de entregas

O gestor quer ver todas as entregas do portal-rh-producao. Liste os deploys desse grupo.

A frota cresceu

O portal ganhou um segundo servidor. Suba outra instância (mesma AMI e tipo), marque com App=portal-rh e entregue de novo a portal-rh-v1.zip — repare que agora o deploy passa em duas máquinas sem você mudar nada no grupo.

A versão 2

A versão 2 do portal saiu do build como app.zip. Envie pro bucket como portal-rh-v2.zip, entregue no portal-rh-producao e acompanhe até terminar.

Se quebrar, volta sozinho

Nenhum plantonista quer ser acordado às 3h pra reinstalar a versão anterior. Ligue o rollback automático no portal-rh-producao: deploy que falhar volta pra última versão boa.

Metade de cada vez

Com duas máquinas, dá pra atualizar uma enquanto a outra atende. Confira o nome exato da configuração de metade por vez e troque o ritmo do portal-rh-producao pra ela.

Simulado de incidente

Hoje é dia de simulado: o QA preparou a versão portal-rh-v3-quebrado.zip, que quebra o health check de propósito. Envie o app.zip pro bucket com esse nome, entregue no portal-rh-producao e acompanhe até o fim. O deploy vai falhar — confira que o rollback automático disparou (rollbackInfo).

Onde exatamente quebrou?

O rollback salvou a noite, mas o relatório do incidente precisa da causa. Liste as máquinas do deploy que falhou e veja, numa delas, a etapa que quebrou e o logTail do script.

Só os que falharam

Pro relatório mensal de incidentes, liste só os deploys com status Failed do portal-rh.

Deploy no grupo errado da hora errada

Alguém disparou de novo a portal-rh-v2.zip no portal-rh-producao às 11h de segunda, pico de acesso. Dispare pra ver o cenário e pare o deploy antes de ele terminar.

Descrição errada, versão certa

Um deploy da portal-rh-v1.zip saiu com a descrição hotfix folha — mas a v1 é antiga e não tem o hotfix. Dispare pra ver o cenário (com --description) e pare antes de ele chegar nas máquinas.

O ambiente de homologação saiu

O time vai testar em outra conta. Crie o grupo portal-rh-homolog na portal-rh (tag App=portal-rh-homolog, mesma role) pra ver o cenário, apague e confira os grupos que sobraram.

O portal antigo

O portal-rh-legado foi desligado ano passado e a aplicação dele ficou no CodeDeploy. Crie pra ver o cenário e apague.

A faxina da intranet

A intranet-antiga sai de vez. Crie a aplicação e o grupo intranet-antiga-prod dela (tag App=intranet-antiga, mesma role) pra ver o cenário; depois apague o grupo, apague a aplicação e confira a lista de aplicações.

Continue por aqui

Ler explica. Digitar fixa. No CLImb você roda os comandos de verdade num terminal AWS simulado — o estado persiste entre eles, como na nuvem real.

As 3 primeiras atividades desta trilha são abertas; o resto faz parte do plano Pro.

Começar — 3 atividades grátis
Todas as lições · Instalar a AWS CLI · Comandos básicos · Erros comuns · Praticar no terminal · Sobre