Amazon ECS (Elastic Container Service) es el servicio de AWS que orquesta contenedores: toma una definición de tarea y los ejecuta como tareas puntuales o como un servicio que mantiene una cantidad deseada de réplicas. ECS coordina dónde se ejecuta cada tarea; tú eliges la capacidad de cómputo, como AWS Fargate o instancias de Amazon EC2. AWS también ofrece ECS Managed Instances, donde administra las instancias EC2 usadas por las tareas.
La diferencia clave: Docker crea y ejecuta imágenes; Amazon ECR guarda imágenes; ECS las programa y las mantiene en ejecución; Fargate proporciona capacidad de cómputo sin que administres servidores. La guía de Amazon ECS describe estos componentes y opciones.
Cómo se relacionan clústeres, tareas y servicios
| Concepto | Qué significa | Cuándo lo usas |
|---|---|---|
| Imagen y contenedor | La imagen empaqueta la aplicación y sus dependencias; el contenedor es una instancia en ejecución de esa imagen. | Construyes una imagen con Docker o eliges una existente; puedes guardarla en Amazon ECR. |
| Definición de tarea | Un archivo JSON que declara los contenedores, imágenes, CPU y memoria, red, registros y roles de IAM. | Defines una vez cómo debe ejecutarse la aplicación. Cada registro crea una revisión numerada. |
| Clúster | Un ámbito lógico de ECS que agrupa tareas y servicios y permite asignarles capacidad de cómputo. | Organizas cargas de trabajo; un clúster puede usar Fargate, EC2 o proveedores de capacidad compatibles. |
| Tarea | Una ejecución de la definición. Puede terminar al completar un trabajo, como un proceso por lotes. | Ejecutas una tarea puntual o la usas como unidad de trabajo de un servicio. |
| Servicio | Un controlador que mantiene el número deseado de tareas y puede reemplazar las que se detienen o se detectan en mal estado. | Mantienes activa una aplicación de larga duración. Puedes agregar un balanceador de carga. |
Una tarea no equivale a un servicio: al iniciar una tarea puntual, ECS no la vuelve a crear cuando termina. Un servicio sí intenta mantener su recuento deseado. Para que una aplicación tolere fallos de infraestructura o una zona de disponibilidad, hacen falta varias tareas y una configuración distribuida; una sola tarea no garantiza alta disponibilidad.
Amazon ECS en Fargate o en EC2
ECS es el orquestador en ambas opciones. Fargate y EC2 indican dónde corre la tarea:
| Opción | Qué administras | Cuándo puede convenir |
|---|---|---|
| ECS con Fargate | Defines CPU, memoria y red por tarea; AWS administra los servidores subyacentes. | Para aprender ECS o ejecutar servicios sin mantener instancias, sistemas operativos y capacidad de clúster. |
| ECS con EC2 | Además de ECS, eliges, actualizas y escalas las instancias que aportan capacidad al clúster. | Cuando necesitas controlar el tipo de instancia, el sistema operativo o cómo se comparte capacidad entre tareas. |
Fargate no aumenta tareas por sí solo. El servicio mantiene el número que configures; para ajustarlo automáticamente debes configurar el escalado de servicios. Con EC2 también debes tener capacidad suficiente en las instancias para ubicar las tareas. ECS Managed Instances es otra opción: AWS aprovisiona, actualiza y escala las instancias EC2, con un cargo de administración adicional. La guía de servicios de ECS explica el recuento deseado, el escalado y el balanceo de carga.
Amazon EKS es el servicio administrado de AWS para Kubernetes. ECS usa el modelo propio de tareas y servicios de AWS; elige EKS cuando necesitas Kubernetes y sus herramientas o APIs. Fargate puede proporcionar capacidad para ECS y EKS.
Qué necesitas antes de ejecutar una tarea
- Una cuenta de AWS y una identidad con permisos para crear recursos de ECS y usar la VPC elegida. Evita credenciales de acceso con permisos amplios; usa el método de inicio de sesión aprobado para tu cuenta.
- Una definición de tarea compatible con la capacidad elegida. Para Fargate, declara el modo de red
awsvpcy valores compatibles de CPU y memoria. - Una VPC, subred y grupo de seguridad. Fargate asigna una interfaz de red a cada tarea. Para descargar una imagen pública desde una subred pública, esa interfaz necesita una IP pública y una ruta de salida a Internet; en una subred privada necesitas NAT o los endpoints de VPC que correspondan.
- Un rol de ejecución para acciones del agente de ECS, como descargar una imagen privada de ECR, enviar logs a CloudWatch Logs o leer secretos. Un rol de tarea es para los permisos que necesita el código dentro del contenedor, por ejemplo, leer una tabla de DynamoDB.
Fargate no exige dos subredes públicas. La red depende de cómo quieras recibir y enviar tráfico. Para una aplicación web de producción, lo habitual es mantener las tareas en subredes privadas y exponer un Application Load Balancer en subredes públicas. Para un ejercicio, también puedes usar una tarea con IP pública y limitar el grupo de seguridad al puerto de la aplicación y a tu IP de origen; no abras SSH (puerto 22) para este ejemplo. AWS detalla la red que requieren las tareas Fargate.
Ejemplo mínimo: un servicio web en Fargate
Antes de ejecutar los comandos, prepara una subred pública con ruta a Internet y un grupo de seguridad que permita TCP 80 solo desde tu dirección de prueba. El servicio mantendrá una tarea Fargate con una IP pública; Fargate factura desde que empieza la descarga de la imagen y la IP pública puede generar cargos adicionales. Este ejemplo crea recursos cuando ejecutas los comandos; no los ejecutes si no quieres aprovisionarlos.
El ejemplo registra una definición basada en la imagen pública de Apache HTTP Server que AWS usa en su tutorial de Fargate. El servicio mantendrá una tarea que escucha en el puerto 80. Primero guarda este JSON como ecs-intro.json:
{
"family": "ecs-intro",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "web",
"image": "public.ecr.aws/docker/library/httpd:latest",
"essential": true,
"portMappings": [
{ "containerPort": 80, "protocol": "tcp" }
]
}
]
}
Con el perfil de AWS CLI ya configurado y una subred pública con ruta a Internet, registra el clúster y la definición:
aws ecs create-cluster --cluster-name ecs-intro
aws ecs register-task-definition --cli-input-json file://ecs-intro.json
Luego crea el servicio, reemplazando los identificadores de ejemplo por una subred y un grupo de seguridad de tu VPC:
aws ecs create-service \
--cluster ecs-intro \
--service-name web \
--task-definition ecs-intro \
--desired-count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-REEMPLAZAR],securityGroups=[sg-REEMPLAZAR],assignPublicIp=ENABLED}"
Al indicar solo la familia ecs-intro, ECS usa su revisión activa más reciente. Si necesitas fijar una revisión concreta, utiliza la que devolvió register-task-definition; consulta los parámetros de definición de servicios.
En la consola de ECS, comprueba que el servicio alcance su estado estable y que la tarea esté RUNNING. Revisa los detalles de red de la tarea para encontrar su IP pública y abre esa dirección en el navegador.
El ejemplo sirve para entender el ciclo básico, no para publicar una aplicación real: usa una sola tarea, no crea un balanceador HTTPS y deja la tarea funcionando. Al terminar, reduce el servicio a cero y comprueba que no queden tareas en ejecución ni pendientes:
aws ecs update-service \
--cluster ecs-intro \
--service web \
--desired-count 0
aws ecs describe-services \
--cluster ecs-intro \
--services web \
--query "services[0].{deseadas:desiredCount,activas:runningCount,pendientes:pendingCount}"
aws ecs list-tasks \
--cluster ecs-intro \
--service-name web \
--desired-status STOPPED
Confirma que activas y pendientes sean cero. La última consulta muestra las tareas detenidas recientes del servicio. Luego, elimina el servicio y el clúster si ya no los necesitas; revisa también los recursos de red, balanceadores, logs y registros de imágenes que hayas creado.
Para desplegar tu propia aplicación, construye y prueba su imagen, súbela a Amazon ECR y reemplaza la imagen pública del ejemplo por la ruta del repositorio. Si el contenedor lee o escribe en otro servicio AWS, asocia un rol de tarea con permisos mínimos para esos recursos. El rol de ejecución y el rol de tarea resuelven necesidades distintas, como explica la guía de roles de IAM para ECS.
Comprobaciones de salud y errores frecuentes
Una comprobación de salud del contenedor ejecuta un comando dentro de la imagen. Debes declarar ese comando en la definición de tarea para que ECS lo supervise; no basta con que exista una comprobación en la imagen Docker. Un balanceador puede tener además su propia comprobación HTTP o HTTPS hacia el puerto y la ruta de la aplicación. Si ECS reemplaza tareas repetidamente, compara ambas comprobaciones, el puerto del contenedor y las reglas del grupo de seguridad. Consulta cómo determina ECS la salud de una tarea.
- La tarea no arranca o queda pendiente: revisa los eventos del servicio y la razón de detención. En EC2, confirma que las instancias tengan CPU y memoria disponibles; en cualquier modalidad, verifica la subred, el grupo de seguridad y la capacidad seleccionada.
- No puede descargar la imagen: confirma el nombre y la etiqueta de la imagen, los permisos del rol de ejecución si está en un repositorio privado y la ruta de salida a ECR o al registro elegido.
- El contenedor inicia y luego se detiene: revisa el código de salida, el comando de inicio y los logs de CloudWatch si configuraste el driver de logs.
- La tarea está activa, pero no recibe tráfico: compara el puerto y la ruta del balanceador con los de la aplicación, y comprueba que el grupo de seguridad permita tráfico desde el balanceador.
Empieza por los eventos del servicio; luego abre la tarea detenida y revisa su código de salida y mensaje de error. Los motivos como CannotPullContainerError o ResourceInitializationError ayudan a acotar si el problema está en la imagen, los permisos o el acceso de red. La referencia oficial de errores de tareas detenidas reúne los códigos y su diagnóstico.
Cuánto cuesta Amazon ECS
El costo depende de la capacidad y de los demás recursos que utilice tu aplicación. Para Fargate, AWS cobra por CPU y memoria solicitadas desde que empieza la descarga de la imagen hasta que se detiene la tarea; para Linux hay un mínimo de un minuto. En EC2 pagas las instancias, volúmenes y otros recursos que mantengas. La orquestación de ECS no tiene un cargo separado para las modalidades comunes de Fargate y EC2, pero ECS Managed Instances sí añade una tarifa de administración. Un balanceador, NAT Gateway, almacenamiento, logs, IP pública y transferencia de datos también pueden generar cargos. Las tarifas varían según región y configuración: consulta los precios actuales de Amazon ECS antes de desplegar.
Para una tarea que forma parte de un proceso con varios pasos, AWS Step Functions puede iniciar una tarea ECS y esperar a que termine. La integración oficial de Step Functions con ECS muestra ese patrón; como siguiente lectura, consulta AWS Step Functions: qué es y cómo elegir Standard o Express.
Recursos en español y comunidades para seguir aprendiendo
Para familiarizarte con ECS a través de grabaciones de comunidades AWS, puedes empezar por “Containers en AWS: Construyendo el ecosistema de contenedores en ECS”, publicada por AWS User Group Ecuador. Para ver un caso de aplicación, “Amazon ECS con Flask, Fargate y DynamoDB” es una grabación de Rossana Suárez sobre ese despliegue.
Si ya conoces lo básico, el repositorio Demo ECS Fargate con Flask y DynamoDB incluye una aplicación de ejemplo con Terraform y una opción local con Docker Compose. El laboratorio ECS Canary in Action aborda despliegues canary y reversión en ECS; tiene una modalidad local con Docker y otra que aprovisiona en AWS un balanceador, recursos de ECS, ECR, DynamoDB, CloudWatch y roles de IAM. La modalidad local no usa una cuenta AWS; si ejecutas la modalidad en AWS, revisa los cargos y destruye los recursos al finalizar.
También puedes aprender con otras personas y consultar agendas actualizadas. AWS User Group Ecuador organiza meetups y talleres sobre varios temas de AWS; publica sus próximas fechas en Meetup. AWS Women Colombia comparte grabaciones de su comunidad y enlaza sus encuentros próximos. Si estudias en Córdoba, revisa la agenda del AWS Student Builder Group de la UTN. Los temas, fechas, modalidad, cupos y condiciones de inscripción dependen de cada actividad: consulta la ficha vigente antes de planificar.
