ECS Fargate pra dev: quando escolher vs Lambda
- ⬜🔐 Secrets Manager vs Parameter Store: escolha(AWS Developer Associate (DVA-C02))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Anatomia de um deployment
- Cluster: agrupamento lógico de services.
- Task Definition: JSON com container specs (revisões imutáveis).
- Service: mantém N tasks rodando; integra com ALB target group; deploy strategy (rolling/blue-green).
- Task: instância rodando a Task Def.
- → build e push
- → referencia a imagem
- → anexa
- → anexa
- → qual revisão rodar
- → cria e substitui
- → roteia
- Fora da AWS
- Compute
- Segurança e identidade
- Rede e entrega
- Gestão e governança
Cinco peças em cadeia: Dockerfile gera imagem, imagem entra na Task Definition, Task Definition é usada pelo Service, Service cria as tasks. As duas roles são o ponto que mais confunde — Execution é do ECS, Task é do seu código.
- Task Definition é o molde, não a execução. Ela descreve CPU, memória, imagem, portas e variáveis. Cada alteração cria uma REVISÃO nova — e o Service aponta para uma revisão específica. Deploy é apontar o Service para a revisão nova.
- Duas roles, e a prova troca as duas. Execution Role é do agente: puxar imagem do ECR e escrever log. Task Role é do SEU container: acessar S3, DynamoDB, Secrets. Colocar permissão de aplicação na Execution Role é o erro clássico.
- Service mantém a contagem. Ele garante N tasks rodando e faz rolling update respeitando minimumHealthyPercent e maximumPercent — os dois parâmetros que decidem se o deploy tem downtime ou custa capacidade extra.
- No Fargate cada task tem ENI e IP. Network mode awsvpc: a task ganha interface de rede própria, com Security Group próprio. Por isso o target group do ALB é do tipo IP, não instance.
- Log precisa ser configurado. O awslogs driver é declarado na Task Definition. Sem ele, o stdout do container não vai a lugar nenhum — e você fica depurando sem log, que é o pior lugar para estar.
{
"family": "api-pedidos",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "512", "memory": "1024",
"executionRoleArn": "arn:aws:iam::123:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123:role/apiPedidosTaskRole",
"containerDefinitions": [{
"name": "api",
"image": "123.dkr.ecr.us-east-1.amazonaws.com/api-pedidos:sha-a1b2c3",
"portMappings": [{ "containerPort": 8080 }],
"secrets": [
{ "name": "DB_SENHA", "valueFrom": "arn:aws:secretsmanager:...:prod/rds" }
],
"logConfiguration": {
"logDriver": "awslogs",
"options": { "awslogs-group": "/ecs/api-pedidos", "awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs" }
},
"healthCheck": {
"command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
"interval": 30, "timeout": 5, "retries": 3, "startPeriod": 60
}
}]
}Onde isso entra no exame
A questão típica separa task definition (o molde) de service (quem mantém N cópias rodando), e pergunta quando Fargate elimina o gerenciamento de capacidade. Saiba que o modo `awsvpc` dá ENI própria à task e que a task assume permissão via task role — instance profile é a alternativa errada em Fargate, porque não há instância sua.
Qual role o container usa para chamar a API do DynamoDB?
ECR — Elastic Container Registry
ECR hospeda imagens privadas. Lifecycle policies removem versões antigas automaticamente (manter últimas 10, ou < 30 dias). Scan on push detecta CVEs. CodeBuild pushes → Task Def referencia → Service faz deploy.
Perguntas frequentes
❓ Contêiner ou função: como decidir como desenvolvedor?
❓ O que é definição de tarefa?
❓ Como o contêiner recebe permissão da AWS?
Fixando
O deploy de um service ECS está causando indisponibilidade momentânea. Quais parâmetros controlam isso?
Por que o target group do ALB deve ser do tipo IP quando o network mode é awsvpc?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…