Batch
📘 ¿Qué es AWS Batch?
AWS Batch es un servicio completamente gestionado que permite ejecutar cargas por lotes (batch jobs) en AWS. Se encarga de planificar, programar y ejecutar trabajos en contenedores según los recursos necesarios.
-
🛠️ Automatiza la provisión de recursos (EC2, Fargate)
-
🐳 Ejecuta jobs en contenedores Docker
-
🔄 Ideal para cargas transitorias, escalables y basadas en cola
🧩 Casos de uso
-
🧬 Análisis científico y procesamiento de datos genómicos
-
🎞️ Renderizado de video, imágenes y simulaciones 3D
-
📊 ETL de grandes volúmenes de datos
-
🧠 Entrenamiento por lotes de modelos ML
-
📝 Conversión de documentos, compresión masiva, etc.
⚙️ Componentes principales de AWS Batch
| Componente | Descripción |
|---|---|
| Job | Una tarea única a ejecutar |
| Job Definition | Plantilla que describe cómo ejecutar un job (imagen, CPU, memoria, comandos) |
| Job Queue | Cola que organiza los jobs según prioridad |
| Compute Environment (CE) | Donde se ejecutan los jobs (EC2, Fargate) |
🔄 Flujo de trabajo de AWS Batch
1. Creas un Compute Environment (puede ser EC2 On-Demand, Spot o Fargate)
2. Defines una Job Queue (con prioridad y vinculada al CE)
3. Creas una Job Definition (imagen, memoria, vCPU, comandos, IAM)
4. Envío de jobs (submit-job) a la cola → Batch los ejecuta automáticamente
🧱 Compute Environment
| Tipo de CE | Descripción |
|---|---|
| EC2 (Managed) | AWS aprovisiona instancias automáticamente |
| EC2 (Unmanaged) | Tú gestionas las instancias manualmente |
| Fargate | Serverless, sin necesidad de gestionar instancias |
-
Puedes usar instancias Spot para reducir costos.
-
Se pueden usar varios tipos de instancias (m3, c5, r5, etc.)
🧾 Job Definition
Incluye:
-
Imagen Docker
-
vCPUs y memoria requerida
-
Variables de entorno
-
Montaje de volúmenes (EFS, S3)
-
IAM role para permisos (por ejemplo, acceso a S3 o DynamoDB)
-
Retry strategies (para reintentos automáticos)
{
"jobDefinitionName": "procesamiento-lotes",
"type": "container",
"containerProperties": {
"image": "123456789.dkr.ecr.us-east-1.amazonaws.com/procesador",
"vcpus": 2,
"memory": 4096,
"command": ["python", "procesar.py"],
"jobRoleArn": "arn:aws:iam::123456789:role/BatchExecutionRole"
}
}
🚀 Envío de jobs (CLI / SDK)
aws batch submit-job \
--job-name job-prueba \
--job-queue cola-principal \
--job-definition procesamiento-lotes:1
Monitoreo de jobs
aws batch describe-jobs --jobs <jobId>
🧠 Job Queue
-
Puedes tener varias colas con diferentes prioridades.
-
Las colas se asocian a uno o más Compute Environments.
-
AWS Batch elige el CE más adecuado según recursos disponibles y prioridad.
📦 Integración con otros servicios
| Servicio | Integración |
|---|---|
| ECS / Fargate | Ejecuta contenedores en Batch |
| CloudWatch Logs | Logging por job |
| IAM | Control de permisos y ejecución de tareas |
| S3 / EFS | Fuente/destino de datos a procesar |
| Step Functions | Orquestación de jobs más complejos |
| EventBridge | Automatización por cron o eventos |
🔐 Seguridad
-
IAM Roles para ejecutar jobs y acceder a servicios como S3 o DynamoDB
-
Control de acceso por Resource Policies en job definitions o queues
-
VPCs privadas y subnets para aislar entornos Batch
📈 Monitoreo
| Herramienta | Uso |
|---|---|
| CloudWatch Logs | Registros de ejecución de cada job |
| CloudWatch Metrics | Seguimiento de jobs activos, fallidos, terminados |
| Batch Console | Vista de colas, entornos, jobs y su estado |
💡 Buenas prácticas
-
Usa instancias Spot para reducir costos hasta 90%
-
Utiliza Fargate para jobs pequeños o cargas impredecibles
-
Asocia EFS si necesitas compartir archivos entre jobs
-
Usa dependencias entre jobs (
dependsOn) para encadenarlos -
Orquesta múltiples jobs con Step Functions
-
Mantén imágenes optimizadas y seguras (usa ECR con escaneo)
📊 Comparación rápida: Batch vs otras opciones
| Servicio | Tipo | Ideal para… |
|---|---|---|
| AWS Batch | Batch por contenedor | Procesamiento por lotes escalable |
| Lambda | Serverless por evento | Tareas ligeras y eventos rápidos |
| Step Functions | Orquestación | Coordinación de múltiples tareas |
| Glue | ETL administrado | Procesamiento de datos estructurados |
| Fargate | Contenedores on-demand | Microservicios, APIs, tareas programadas |
🎓 Preguntas tipo certificación
-
¿AWS Batch requiere que administres servidores?
- ❌ No, puede ser serverless (Fargate) o gestionado
-
¿Dónde defines el número de CPUs para un job?
- ✅ En la Job Definition
-
¿Cómo controlas qué Compute Environment se usa?
- ✅ A través de la Job Queue
-
¿Puedes usar instancias Spot con AWS Batch?
- ✅ Sí, para reducir costos
-
¿Qué servicio usarías para programar la ejecución periódica de jobs?
- ✅ EventBridge (anteriormente CloudWatch Events)