Ya tienes tus imágenes guardadas en ECR (subcapítulo 17.2). Ahora llega el momento de ejecutarlas: poner tus contenedores a funcionar en producción, escalarlos y mantenerlos sanos. Para eso AWS ofrece ECS (Elastic Container Service), su servicio para orquestar contenedores. En este subcapítulo entenderás sus conceptos clave y una decisión importante: Fargate o EC2.

El problema: ejecutar contenedores en serio

Ejecutar un contenedor en tu portátil es fácil (docker run). Pero en producción necesitas mucho más:

  • Ejecutar muchos contenedores repartidos en varios servidores.
  • Reiniciarlos automáticamente si se caen.
  • Escalarlos según la demanda (más copias en hora punta).
  • Repartir el tráfico entre ellos (con un balanceador, Capítulo 13).

Hacer todo esto a mano sería inviable. Un orquestador de contenedores lo automatiza. ECS es el orquestador de AWS.

Analogía: un orquestador es como el director de una orquesta. Los músicos son los contenedores; el director se asegura de que toquen en armonía, que entre quien tiene que entrar, que si uno falla otro lo cubra, y que el conjunto suene bien. Tú das la partitura (la configuración) y el director (ECS) coordina todo.

Los conceptos clave de ECS

Task Definition (definición de tarea)

Una task definition es la «receta» de cómo ejecutar tu contenedor: qué imagen usar (de ECR), cuánta CPU y memoria necesita, qué puertos abre, qué variables de entorno tiene, etc. Es un plano que describe cómo debe correr tu aplicación.

Task Definition "mi-api":
  - Imagen: mi-api:v2.0 (de ECR)
  - CPU: 0.5 vCPU
  - Memoria: 1 GB
  - Puerto: 8080
  - Variables: ENTORNO=produccion

Task (tarea)

Una task es una task definition en ejecución: una instancia viva de tu contenedor (o grupo de contenedores) corriendo según esa receta. Es a ECS lo que el contenedor era a la imagen.

Service (servicio)

Un service se encarga de mantener en marcha el número de tareas que quieres y de conectarlas con un balanceador. Le dices «quiero siempre 3 copias de mi API corriendo», y el service se asegura de que así sea: si una se cae, arranca otra; si quieres escalar, añade más.

Service "mi-api" (deseadas: 3 tareas)
 ├── Task 1 ✓
 ├── Task 2 ✓
 └── Task 3 ✗ (se cae) ──► el service arranca una Task 4 automáticamente

¿Te suena? Es el mismo concepto que el Auto Scaling Group del Capítulo 13, pero para contenedores en vez de instancias EC2. El service mantiene el número deseado de tareas y las repara. Y, como con el ASG, se integra con un balanceador de carga para repartir el tráfico entre las tareas.

La gran decisión: Fargate vs EC2

ECS necesita máquinas donde ejecutar los contenedores. Aquí tienes dos modos, y elegir bien es importante:

Modo EC2: tú pones los servidores

En el modo EC2, tú gestionas un grupo de instancias EC2 (Capítulo 4) donde ECS coloca los contenedores. Tienes control total sobre esos servidores (tipo de instancia, configuración), pero también la responsabilidad de gestionarlos: parchearlos, escalarlos, mantenerlos.

Modo EC2:
  Tú gestionas las instancias EC2 ──► ECS coloca contenedores en ellas
  + Control total    - Tú mantienes los servidores

Modo Fargate: sin servidores que gestionar

En el modo Fargate, AWS pone y gestiona los servidores por ti. Tú solo dices «ejecuta esta tarea con esta CPU y memoria», y Fargate se encarga de todo lo demás. No ves ni gestionas ninguna instancia EC2: es serverless para contenedores.

Modo Fargate:
  Tú solo defines la tarea ──► AWS ejecuta el contenedor (sin servidores visibles)
  + Cero gestión de servidores    - Menos control de bajo nivel

Conexión con el Capítulo 14: Fargate es a los contenedores lo que Lambda es a las funciones: en ambos, AWS oculta y gestiona los servidores. Te olvidas de la infraestructura y solo te ocupas de tu aplicación.

¿Cuál elijo?

Modo EC2 Modo Fargate
Quién gestiona los servidores AWS
Control Total (tipo de instancia, etc.) Limitado (solo CPU/memoria)
Esfuerzo operativo Alto (mantener servidores) Mínimo
Coste Puede ser menor a gran escala constante Pagas por tarea; simple
Ideal para Cargas grandes y constantes, control fino Simplicidad, cargas variables, empezar

Recomendación para empezar: usa Fargate. Te quita el peso de gestionar servidores y te dejas de complicaciones. El modo EC2 tiene sentido cuando creces mucho, tienes cargas muy constantes (donde puede salir más barato) o necesitas un control especial sobre los servidores. Para la mayoría de equipos, Fargate es la opción por defecto hoy en día.

Cómo encaja todo

Juntando los tres subcapítulos de contenedores hasta ahora:

1. Docker: construyes la imagen           (subcap. 17.1)
2. ECR: guardas la imagen                 (subcap. 17.2)
3. ECS:
   - Task Definition: receta de ejecución (usa la imagen de ECR)
   - Service: mantiene N tareas corriendo, repara y escala
   - Fargate: AWS ejecuta todo sin servidores que gestiones
   + Balanceador: reparte el tráfico entre las tareas (Cap. 13)

Lo que debes recordar

  • ECS (Elastic Container Service) es el orquestador de contenedores de AWS: ejecuta, repara, escala y reparte el tráfico de tus contenedores automáticamente (el «director de orquesta»).
  • Task Definition: la «receta» de cómo ejecutar tu contenedor (imagen, CPU, memoria, puertos). Task: una receta en ejecución. Service: mantiene el número deseado de tareas, las repara y escala (como un Auto Scaling Group, pero para contenedores).
  • Dos modos de ejecución: EC2 (tú gestionas los servidores, más control y esfuerzo) y Fargate (AWS gestiona los servidores, serverless para contenedores, mínimo esfuerzo).
  • Fargate es Lambda para contenedores: olvídate de los servidores. Es la opción recomendada para empezar; EC2 tiene sentido a gran escala constante o con necesidades de control especiales.

En el último subcapítulo del capítulo (y de la Parte IV) veremos la alternativa más potente y compleja: EKS (Kubernetes en AWS), y cuándo merece la pena frente a ECS.

Cloud, AWS & Terraform — De cero a experto

Capítulo 1 · Qué es el cloud computing

Capítulo 2 · El mercado cloud y los grandes proveedores

Capítulo 3 · Regiones, zonas de disponibilidad y edge

Capítulo 4 · Cómputo: EC2

Capítulo 5 · Almacenamiento: S3

Capítulo 6 · Redes: VPC

Capítulo 7 · Identidad y acceso: IAM

Capítulo 8 · Bases de datos gestionadas

Capítulo 9 · Por qué Infraestructura como Código

Capítulo 10 · HCL: el lenguaje de Terraform

Capítulo 11 · Providers y estado

Capítulo 12 · Tu primera infraestructura real en Terraform

Capítulo 13 · Balanceo de carga y autoescalado

Capítulo 14 · Serverless con Lambda

Capítulo 15 · Mensajería y eventos

Capítulo 16 · Entrega de contenido y DNS

Capítulo 17 · Contenedores en AWS

Capítulo 18 · Módulos: reutilización y composición

Capítulo 19 · Workspaces y gestión de entornos

Capítulo 20 · Backends remotos y locking

Capítulo 21 · Testing de infraestructura

Capítulo 22 · Terraform en CI/CD

Capítulo 23 · Seguridad en profundidad

Capítulo 24 · Observabilidad: logs, métricas y trazas

Capítulo 25 · Optimización de costes

Capítulo 26 · Alta disponibilidad y disaster recovery

Capítulo 27 · Well-Architected Framework de AWS

Capítulo 28 · Arquitecturas serverless a escala

Capítulo 29 · Plataformas de datos en AWS

Capítulo 30 · Multi-cuenta y landing zones

Capítulo 31 · Platform Engineering e Internal Developer Platform

Capítulo 32 · Certificaciones AWS relevantes

Capítulo 33 · Proyectos para consolidar lo aprendido

Capítulo 34 · Recursos y comunidad

© Copyright 2024. Todos los derechos reservados