July 31, 2025

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ónDescripción
FargateServerless (no gestionas servidores)
EC2Tú gestionas el clúster de instancias EC2
External (ECS Anywhere)Corre contenedores en on-premise o VMs externas

🧱 Componentes principales

ComponenteDescripción
ClusterAgrupa recursos (EC2 o Fargate) donde se ejecutan tareas
Task DefinitionPlantilla JSON que describe el contenedor, recursos y configuración
ServiceMantiene un número constante de tareas en ejecución
TaskInstancia específica de ejecución de una Task Definition
ContainerContenedor individual (Docker) que corre dentro de una tarea
Capacity ProviderEstrategia 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ísticaFargateEC2
Serverless✅ Sí❌ No
Gestión de infraestructura❌ No✅ Sí (tú gestionas instancias)
CostoMás alto por segundoMás controlado con Spot o Savings
Uso idealSimplicidad y tareas dinámicasAlto control o requisitos especiales

🧰 Integraciones clave

ServicioFunción
ECRAlmacén de imágenes Docker para tus contenedores
CloudWatchLogs y métricas de tareas y contenedores
IAM RolesPermisos por tarea (taskRoleArn) o para ECS Agent (executionRoleArn)
ELB (ALB/NLB)Balanceo de carga para distribuir tráfico entre tareas
Secrets Manager / SSMInyección de secretos y parámetros al contenedor
Auto ScalingEscalado 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

ServicioProveedorComplejidadComentario
ECSAWSBajaIdeal si estás solo en AWS
EKS (Kubernetes)AWS (K8s)AltaRequiere experiencia en Kubernetes
FargateAWS (subservicio)Muy bajaServerless ECS (o EKS)
Lightsail ContainersAWSMuy bajaPara proyectos simples
Docker SwarmDockerMediaMenos escalable y menos soporte

🎓 Preguntas tipo certificación

  1. ¿Cuál es la diferencia entre taskRole y executionRole?

    • taskRole: permisos del contenedor.

    • executionRole: permisos del agente ECS (ej. para obtener secretos, logs).

  2. ¿ECS puede integrarse con un balanceador de carga?

    • ✅ Sí, ALB y NLB están soportados.
  3. ¿Puedes correr ECS sin gestionar servidores?

    • ✅ Sí, usando Fargate.
  4. ¿Dónde defines cuántas CPU y memoria usará un contenedor?

    • ✅ En la Task Definition.
  5. ¿ECS puede lanzar tareas en máquinas locales?

    • ✅ Sí, con ECS Anywhere.

📚 Recursos útiles