Task Definition
Definição de tarefa ECS — blueprint do container
A Task Definition no ECS é o documento que descreve como cada container deve rodar: qual imagem do ECR, quanto de CPU e memória, variáveis de ambiente, portas expostas, volumes e para onde vão os logs. Cada alteração gera uma nova revisão (ex.: crm-api:47); o ECS Service aponta para a revisão ativa no deploy.
Estrutura de uma definição
| Seção | Conteúdo típico no CRM |
|---|---|
| Family | Nome estável, ex. crm-api-prod |
| Network mode | awsvpc (cada task tem IP na VPC) |
| Requires compatibilities | FARGATE ou EC2 |
| CPU / Memory | Ex.: 512 CPU (0.5 vCPU) e 1024 MiB — devem ser combinações válidas no Fargate |
| Execution role | Permite pull ECR, enviar logs ao CloudWatch |
| Task role | Permissões da aplicação (S3, SQS, Secrets Manager, etc.) |
| Container definitions | Um ou mais containers na mesma task |
Container definition (campos importantes)
| Campo | Função |
|---|---|
name | Identificador do container na task |
image | URI completa no ECR + tag ou digest |
essential | Se true, task morre se este container parar |
portMappings | Ex.: container 8080 → protocolo TCP para o ALB |
environment | Variáveis em texto (URLs públicas, flags) |
secrets | Referência a Secrets Manager ou SSM Parameter Store |
logConfiguration | Driver awslogs → grupo de log CloudWatch |
healthCheck | Comando interno opcional (além do TG/ALB) |
Exemplo conceitual (API)
| Recurso Fargate | Valor exemplo | Observação |
|---|---|---|
| CPU | 1024 (1 vCPU) | Ajustar conforme carga |
| Memory | 2048 MiB | Deve ser par válido com CPU no Fargate |
| Porta | 80 ou 8080 | Deve bater com Target Group e app |
| Env | ASPNETCORE_ENVIRONMENT=Production | Outras via secrets |
Variáveis sensíveis
| Abordagem | Quando usar |
|---|---|
| Secrets Manager / SSM | Connection strings, API keys — referenciados em secrets na TD |
| Environment plain | Apenas valores não sensíveis |
| Arquivo em S3 | Raro; preferir secrets |
Nunca commitar secrets na task definition em JSON versionado no Git sem criptografia; use ARN de secret na definição.
Revisões e rollback
- Cada registro de nova imagem ou mudança de env cria revisão N+1.
- Rollback no ECS = voltar o service para revisão anterior conhecida estável.
- Tasks antigas em execução continuam na revisão antiga até serem substituídas.
Compatibilidade com ALB e Target Group
| Item | Deve alinhar com |
|---|---|
portMappings.containerPort | Porta do health check e do listener do TG |
| Protocolo | HTTP/HTTPS no app; TG faz check HTTP na porta do container |
hostPort em awsvpc | Igual ao containerPort (modo awsvpc) |
Sidecars (quando há mais de um container)
Em alguns setups a mesma task inclui:
| Container | Papel |
|---|---|
| app | API principal |
| agent | Coleta de métricas (ex. CloudWatch agent) |
| proxy | Envoy/nginx local — menos comum se ALB termina TLS |
Para a API simples do CRM, um container essential é o padrão.
Se o container reinicia em loop, abra o log da primeira task que falhou: erros de CannotPullContainerError indicam ECR/IAM; ResourceInitializationError costuma ser rede ou secrets; exit code da app indica crash na inicialização (config/banco).