Servicio de orquestación de contenedores de AWS que ejecuta y escala aplicaciones Docker sin gestionar la infraestructura de cluster subyacente.
Amazon ECS (Elastic Container Service) es el servicio de orquestación de contenedores nativo de AWS. Ejecuta contenedores Docker a escala con dos modos de lanzamiento: EC2 (gestionas las instancias) y Fargate (serverless, AWS gestiona la infraestructura).
ECS abstrae la complejidad de la orquestación de contenedores mientras mantiene integración profunda con el ecosistema AWS. A diferencia de Kubernetes, ECS está diseñado específicamente para AWS, lo que resulta en menos configuración y mejor integración con servicios como IAM, CloudWatch y Application Load Balancer.
Su arquitectura se basa en cuatro conceptos fundamentales: task definitions (blueprints), tasks (instancias en ejecución), services (mantenimiento de estado deseado) y clusters (agrupación lógica). Esta simplicidad conceptual permite a los equipos enfocarse en sus aplicaciones en lugar de la complejidad operacional del orquestador.
| Concepto | Función | Equivalente en K8s |
|---|---|---|
| Task Definition | Blueprint del contenedor (imagen, CPU, memoria, puertos) | Pod spec |
| Task | Instancia en ejecución de una task definition | Pod |
| Service | Mantiene N tasks corriendo con load balancing | Deployment + Service |
| Cluster | Agrupación lógica de tasks y services | Cluster + Namespace |
{
"family": "web-app",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
"containerDefinitions": [
{
"name": "web-server",
"image": "nginx:latest",
"portMappings": [
{
"containerPort": 80,
"protocol": "tcp"
}
],
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/web-app",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"environment": [
{
"name": "ENV",
"value": "production"
}
],
"secrets": [
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:db-password"
}
]
}
]
}Los Capacity Providers determinan dónde y cómo se ejecutan las tasks, con diferentes tradeoffs de costo y control:
{
"capacityProviders": ["FARGATE", "FARGATE_SPOT", "EC2"],
"defaultCapacityProviderStrategy": [
{
"capacityProvider": "FARGATE",
"weight": 1,
"base": 2
},
{
"capacityProvider": "FARGATE_SPOT",
"weight": 4
}
]
}minimumHealthyPercent y maximumPercent# CodeDeploy configuration
DeploymentConfiguration:
BlueGreenDeploymentConfiguration:
TerminateBlueInstancesOnDeploymentSuccess:
Action: TERMINATE
TerminationWaitTimeInMinutes: 5
DeploymentReadyOption:
ActionOnTimeout: CONTINUE_DEPLOYMENT
GreenFleetProvisioningOption:
Action: COPY_AUTO_SCALING_GROUP{
"deploymentConfiguration": {
"deploymentCircuitBreaker": {
"enable": true,
"rollback": true
},
"maximumPercent": 200,
"minimumHealthyPercent": 50
}
}{
"serviceRegistries": [
{
"registryArn": "arn:aws:servicediscovery:us-east-1:123456789012:service/srv-xyz",
"containerName": "web-server",
"containerPort": 80
}
]
}| Dimensión | ECS | EKS |
|---|---|---|
| Complejidad operacional | Baja — AWS gestiona control plane | Alta — requiere expertise K8s |
| Tamaño de equipo ideal | 2-10 ingenieros | 10+ ingenieros con dedicación K8s |
| Costo mensual (10 services) | ~$200 (solo compute) | ~$270 ($72 control plane + compute) |
| Tiempo hasta producción | 1-2 semanas | 4-8 semanas |
| Portabilidad | Lock-in AWS | Multi-cloud, on-premises |
| Ecosistema | AWS tools nativo | Helm, operators, CNCF ecosystem |
| Curva de aprendizaje | Moderada | Empinada |
Permite ejecutar comandos dentro de contenedores en ejecución, similar a kubectl exec:
# Habilitar ECS Exec en task definition
aws ecs execute-command \
--cluster my-cluster \
--task arn:aws:ecs:us-east-1:123456789012:task/abc123 \
--container web-server \
--interactive \
--command "/bin/bash"# CloudWatch Alarms recomendadas
CPUUtilization: >80% por 5 minutos
MemoryUtilization: >85% por 5 minutos
TaskCount: <desired_count por 2 minutos
TargetResponseTime: >500ms por 3 minutosECS representa el sweet spot entre simplicidad y capacidad para la mayoría de equipos que ejecutan contenedores en AWS. Mientras Kubernetes ofrece más flexibilidad y portabilidad, ECS reduce significativamente la complejidad operacional — no hay control plane que gestionar, actualizaciones que planificar, o certificados que rotar. Para equipos que no necesitan la portabilidad multi-cloud de Kubernetes, ECS permite entregar valor más rápido con menos overhead operacional. La integración nativa con IAM, CloudWatch y otros servicios AWS elimina la fricción típica de configurar observabilidad y seguridad que existe en ecosistemas Kubernetes.
Plataforma de contenedores que empaqueta aplicaciones con todas sus dependencias en unidades portables y consistentes que se ejecutan igual en cualquier entorno.
Motor de cómputo serverless para contenedores que elimina la necesidad de gestionar servidores, permitiendo ejecutar contenedores Docker pagando solo por los recursos consumidos.
Estilo arquitectónico que estructura una aplicación como colección de servicios pequeños, independientes y desplegables, cada uno con su propia lógica de negocio y datos.
Colección de 13 módulos Terraform publicados en el Terraform Registry para desplegar arquitecturas serverless en AWS, con 12 ejemplos que cubren desde ECS básico hasta CRUD full-stack con DynamoDB y AgentCore con MCP.