Fundamentos do ECS com Fargate: Arquitetura e Componentes
O Amazon ECS (Elastic Container Service) é um serviço gerenciado para orquestração de containers que simplifica o deployment de aplicações Docker em produção. Quando você usa Fargate, a AWS cuida da infraestrutura subjacente — você paga apenas pelos recursos que consome, sem gerenciar instâncias EC2. Três pilares sustentam essa arquitetura: Task Definitions (o blueprint do seu container), Services (que mantém tarefas rodando continuamente) e Service Discovery (o mecanismo que permite que seus serviços se encontrem).
Uma Task Definition é essencialmente um arquivo de configuração que descreve como rodar uma imagem Docker no ECS. Ela especifica qual imagem usar, quanto CPU e memória alocar, variáveis de ambiente, volumes e muito mais. Um Service, por sua vez, garante que um número específico de task definitions esteja sempre em execução, reiniciando automaticamente qualquer tarefa que falhe. O Service Discovery resolve o problema clássico de microsserviços: como um container sabe onde encontrar outro quando os endereços IP podem mudar dinamicamente?
Criando Task Definitions Profissionais
Uma Task Definition bem estruturada é crucial para a confiabilidade em produção. Você define a memória mínima (soft limit) e máxima (hard limit), configurando assim a elasticidade dos seus containers. Para Fargate, as combinações de CPU e memória são específicas — por exemplo, 256 CPU (0.25 vCPU) requer entre 512MB e 3GB de memória.
{
"family": "meu-app-api",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "512",
"memory": "1024",
"containerDefinitions": [
{
"name": "app-container",
"image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/meu-app:v1.0",
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [
{
"name": "NODE_ENV",
"value": "production"
},
{
"name": "LOG_LEVEL",
"value": "info"
}
],
"secrets": [
{
"name": "DATABASE_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:db-pass"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/meu-app-api",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"dependsOn": [
{
"containerName": "cloudwatch-agent",
"condition": "START"
}
]
}
],
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole"
}
Observe que separamos executionRoleArn (permissões para o ECS puxar imagens e logs) de taskRoleArn (permissões para sua aplicação acessar AWS services). Use secrets via AWS Secrets Manager em vez de variáveis de ambiente simples para dados sensíveis. O logDriver: awslogs envia logs diretamente para CloudWatch, essencial para debugging em produção.
Configurando Services com Auto Scaling e Service Discovery
Um ECS Service mantém suas tarefas saudáveis e gerencia balanceamento de carga. Para produção, você deve usar um Application Load Balancer (ALB) para distribuir tráfego e configurar health checks rigorosos. Service Discovery permite que seus microsserviços se comuniquem sem hardcoding de IPs — use AWS Cloud Map para isso.
{
"serviceName": "meu-app-service",
"cluster": "producao",
"taskDefinition": "meu-app-api:2",
"desiredCount": 3,
"launchType": "FARGATE",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": [
"subnet-0a1b2c3d4e5f",
"subnet-1f2e3d4c5b6a"
],
"securityGroups": ["sg-0987654321"],
"assignPublicIp": "DISABLED"
}
},
"loadBalancers": [
{
"targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/meu-app/abcdef1234567890",
"containerName": "app-container",
"containerPort": 3000
}
],
"deploymentConfiguration": {
"maximumPercent": 200,
"minimumHealthyPercent": 100,
"deploymentCircuitBreaker": {
"enable": true,
"rollback": true
}
},
"serviceRegistries": [
{
"registryArn": "arn:aws:servicediscovery:us-east-1:123456789012:service/srv-abcd1234"
}
],
"enableECSManagedTags": true,
"enableExecuteCommand": true
}
A chave aqui é a estratégia de deployment: maximumPercent: 200 permite lançar containers novos antes de remover os antigos (blue-green), enquanto minimumHealthyPercent: 100 garante que nunca ficamos sem serviço. O deploymentCircuitBreaker com rollback automático previne deployments ruins de derrubarem sua produção. Para Service Discovery, registre seu serviço com Cloud Map — seus containers serão automaticamente descobertos via http://meu-app-service.producao.local.
Service Discovery em Produção
Service Discovery resolve um problema fundamental em arquiteturas de microsserviços: como você encontra outro serviço quando tudo é dinâmico? AWS Cloud Map integrado ao ECS fornece descoberta automática baseada em DNS — quando uma tarefa inicia, ela se registra automaticamente; quando termina, é removida do DNS.
# Exemplo de configuração CloudFormation para Service Discovery
ServiceDiscoveryService:
Type: AWS::ServiceDiscovery::Service
Properties:
Name: meu-app-service
NamespaceId: !Ref PrivateNamespace
DnsConfig:
RoutingPolicy: MULTIVALUE
DnsRecords:
- TTL: 60
Type: A
- TTL: 60
Type: SRV
HealthCheckCustomConfig:
FailureThreshold: 3
PrivateNamespace:
Type: AWS::ServiceDiscovery::PrivateDnsNamespace
Properties:
Name: producao.local
Vpc: vpc-0123456789abcdef0
Em sua aplicação, use simplesmente http://meu-app-service.producao.local:3000 para chamar outro serviço. A resolução DNS retorna todos os IPs saudáveis dinamicamente. Para auto scaling, configure políticas baseadas em CPU ou memória usando AWS Application Auto Scaling — defina target tracking de 70% de CPU para manter performance sem over-provisioning.
Conclusão
Você domina agora os três pilares do ECS com Fargate em produção: (1) Task Definitions bem estruturadas com separação clara de roles IAM e gerenciamento de secrets via Secrets Manager; (2) Services com deployment strategies seguras, health checks rigorosos e integração com ALB; (3) Service Discovery automático via Cloud Map para comunicação confiável entre microsserviços. O próximo passo é implementar observabilidade completa com CloudWatch Logs, X-Ray para tracing distribuído e alertas via SNS para mudanças críticas.