ECS
📘 ¿Qué es Amazon ECS?
Amazon ECS es un servicio de orquestación de contenedores totalmente gestionado. Permite ejecutar, escalar y administrar contenedores Docker fácilmente en un clúster de instancias EC2 o en entornos serverless con Fargate.
👉 Similar a Kubernetes, pero gestionado por AWS y sin necesidad de instalar un orquestador.
🧩 Casos de uso
-
🧬 Microservicios en contenedores
-
⚙️ Backend APIs con escalado automático
-
🧠 Tareas programadas y trabajos por lotes
-
🧪 Entornos de prueba o staging
-
🧰 CI/CD pipelines con despliegue automático
🚀 Modos de lanzamiento
| Modo de Ejecución | Descripción |
|---|---|
| Fargate | Serverless (no gestionas servidores) |
| EC2 | Tú gestionas el clúster de instancias EC2 |
| External (ECS Anywhere) | Corre contenedores en on-premise o VMs externas |
🧱 Componentes principales
| Componente | Descripción |
|---|---|
| Cluster | Agrupa recursos (EC2 o Fargate) donde se ejecutan tareas |
| Task Definition | Plantilla JSON que describe el contenedor, recursos y configuración |
| Service | Mantiene un número constante de tareas en ejecución |
| Task | Instancia específica de ejecución de una Task Definition |
| Container | Contenedor individual (Docker) que corre dentro de una tarea |
| Capacity Provider | Estrategia para decidir cómo ECS utiliza Fargate, Spot o EC2 |
🔄 Flujo básico ECS
1. Defines una Task Definition (imagen, puertos, vCPU, memoria, env vars, etc.)
2. Creas un Cluster (EC2 o Fargate)
3. Lanzas una tarea o servicio (manual o automatizado)
4. ECS programa el contenedor en la infraestructura seleccionada
5. Puedes escalar, monitorear, actualizar (rolling update)
🧾 Task Definition
Incluye:
-
Imagen Docker
-
Recursos: vCPU y RAM
-
Puertos expuestos
-
Variables de entorno
-
Volúmenes y montajes
-
IAM Role para el contenedor
{
"family": "mi-app",
"containerDefinitions": [
{
"name": "web",
"image": "mi-repo.dkr.ecr.us-east-1.amazonaws.com/web",
"cpu": 256,
"memory": 512,
"essential": true,
"portMappings": [{ "containerPort": 80 }],
"environment": [{ "name": "NODE_ENV", "value": "production" }]
}
]
}
🔁 Service
-
Mantiene las tareas activas y reinicia si fallan
-
Permite despliegues automáticos (rolling updates)
-
Admite load balancing (ALB, NLB)
-
Escalado automático con Application Auto Scaling
⚙️ Cluster
-
En Fargate: abstracto, no gestionas instancias
-
En EC2:
-
Debes crear y administrar instancias EC2
-
Agregar agentes ECS (automático con AMIs ECS-Optimized)
-
Pueden usar Auto Scaling Group (ASG)
-
🛠️ Fargate vs EC2 en ECS
| Característica | Fargate | EC2 |
|---|---|---|
| Serverless | ✅ Sí | ❌ No |
| Gestión de infraestructura | ❌ No | ✅ Sí (tú gestionas instancias) |
| Costo | Más alto por segundo | Más controlado con Spot o Savings |
| Uso ideal | Simplicidad y tareas dinámicas | Alto control o requisitos especiales |
🧰 Integraciones clave
| Servicio | Función |
|---|---|
| ECR | Almacén de imágenes Docker para tus contenedores |
| CloudWatch | Logs y métricas de tareas y contenedores |
| IAM Roles | Permisos por tarea (taskRoleArn) o para ECS Agent (executionRoleArn) |
| ELB (ALB/NLB) | Balanceo de carga para distribuir tráfico entre tareas |
| Secrets Manager / SSM | Inyección de secretos y parámetros al contenedor |
| Auto Scaling | Escalado de servicios por CPU, memoria o métricas personalizadas |
| Service Discovery (Cloud Map) | Registro automático de tareas por DNS |
📈 Monitoreo
-
CloudWatch Logs para cada contenedor
-
CloudWatch Metrics para:
-
CPU y memoria por tarea
-
Cantidad de tareas activas/pending
-
-
X-Ray para trazabilidad distribuida
🔐 Seguridad
-
Seguridad a nivel de tarea: IAM roles, VPC, subredes, SGs
-
Seguridad en red: Reglas de Security Groups y NACLs
-
Imagen segura: Usa imágenes desde ECR con escaneo
-
Least privilege: Asigna solo permisos mínimos necesarios a las tareas
🧪 Comparación rápida con otros orquestadores
| Servicio | Proveedor | Complejidad | Comentario |
|---|---|---|---|
| ECS | AWS | Baja | Ideal si estás solo en AWS |
| EKS (Kubernetes) | AWS (K8s) | Alta | Requiere experiencia en Kubernetes |
| Fargate | AWS (subservicio) | Muy baja | Serverless ECS (o EKS) |
| Lightsail Containers | AWS | Muy baja | Para proyectos simples |
| Docker Swarm | Docker | Media | Menos escalable y menos soporte |
🎓 Preguntas tipo certificación
-
¿Cuál es la diferencia entre taskRole y executionRole?
-
taskRole: permisos del contenedor. -
executionRole: permisos del agente ECS (ej. para obtener secretos, logs).
-
-
¿ECS puede integrarse con un balanceador de carga?
- ✅ Sí, ALB y NLB están soportados.
-
¿Puedes correr ECS sin gestionar servidores?
- ✅ Sí, usando Fargate.
-
¿Dónde defines cuántas CPU y memoria usará un contenedor?
- ✅ En la Task Definition.
-
¿ECS puede lanzar tareas en máquinas locales?
- ✅ Sí, con ECS Anywhere.