Saltar al contenido

lección 12

Control de costes: cómo no arruinarte (historias de terror)

Billing alerts, budgets, reservas, Spot, rightsizing y las historias de terror que todo ingeniero de datos debería conocer antes de tocar producción.

50 min

Voy a empezar esta lección con tres historias reales que me han contado colegas o he vivido yo mismo. Primera: un equipo dejó un clúster EMR de 20 nodos corriendo un viernes por la tarde. El lunes descubrieron una factura de $3,200 por 60 horas de compute inútil. Segunda: un desarrollador publicó un bucket S3 con Transfer Acceleration activado y una Lambda que se trigger recursiva (Lambda escribe en S3, S3 triggerea Lambda, Lambda escribe en S3...). 200 millones de invocaciones en 4 horas. $8,000. Tercera: un data engineer configuró Kinesis con 100 shards "por si acaso" para un proyecto que recibía 10 eventos/segundo. $3,600/mes por capacidad que nunca usó.

AWS puede ser muy barato o muy caro. La diferencia no es suerte — es diseño. Un pipeline bien diseñado que procesa 1TB/día puede costar $30/mes. El mismo pipeline mal diseñado puede costar $3,000/mes. Esta lección es sobre cómo estar en el grupo de los $30.

### Regla #1: Configura alertas de facturación ANTES de hacer nada

Lo primero que debes hacer en CUALQUIER cuenta AWS — antes de crear un solo recurso — es configurar alertas de billing. AWS te envía un email cuando tu gasto supera un umbral. Configura alertas a $10, $50, $100 y $500. Así nunca te llevarás una sorpresa.

1# Ejemplo conceptual: crear presupuesto con alertas
2# (En AWS real usarías la API de Budgets)
3import boto3
4
5def crear_presupuesto_alerta(limite_mensual: float, emails: list):
6 """Crea un presupuesto con alertas al 50%, 80% y 100%."""
7 budget = {
8 'nombre': 'limite-equipo-datos',
9 'limite_usd': limite_mensual,
10 'alertas': [
11 {'umbral': 50, 'mensaje': f'⚠️ 50% del presupuesto (${limite_mensual*0.5})'},
12 {'umbral': 80, 'mensaje': f'🚨 80% del presupuesto (${limite_mensual*0.8})'},
13 {'umbral': 100, 'mensaje': f'🔴 LÍMITE ALCANZADO (${limite_mensual})'},
14 ],
15 'destinatarios': emails
16 }
17 print(f"✅ Presupuesto configurado: ${limite_mensual}/mes")
18 for alerta in budget['alertas']:
19 print(f" Alerta al {alerta['umbral']}%: {alerta['mensaje']}")
20 return budget
21
22crear_presupuesto_alerta(200, ['data-team@empresa.com'])

Configura alertas ANTES de crear recursos — no después de la factura

### Los 5 mayores ladrones de dinero en pipelines de datos

  1. 01.Recursos olvidados: clústeres EMR, instancias EC2, endpoints VPC que nadie apagó. Solución: tags obligatorios + scripts de limpieza automática.
  2. 02.Sobredimensionamiento: Glue con 20 DPUs cuando 5 bastaban. Redshift con nodos ra3.4xlarge cuando dc2.large era suficiente. Solución: empieza pequeño y escala.
  3. 03.Formato incorrecto en S3: consultar CSV sin comprimir con Athena en vez de Parquet particionado. 100x más caro. Solución: SIEMPRE Parquet para analítica.
  4. 04.Lambdas recursivas: Lambda → S3 → Lambda → S3... loop infinito. Solución: prefijos diferentes para input/output, nunca escribas donde lees.
  5. 05.Transfer innecesario: mover datos entre regiones ($0.02/GB), usar NAT Gateway para tráfico S3 ($0.045/GB). Solución: VPC Endpoints para S3, todo en la misma región.

### Estrategias de ahorro por servicio

  • S3: Intelligent-Tiering para datos con acceso impredecible. Lifecycle rules para mover a Glacier. Borrar versiones antiguas.
  • EMR: Clústeres efímeros + Spot instances. Nunca dejar clústeres 24/7 para batch nocturno.
  • Glue: Ajustar DPUs al mínimo necesario. Usar push-down predicates para leer menos datos.
  • Athena: Parquet + particionado + workgroup con límite de scan. CTAS para crear tablas optimizadas.
  • Lambda: Ajustar memoria al mínimo (128MB si es posible). ARM64 en vez de x86 (20% más barato).
  • Redshift: Pausar clúster fuera de horario laboral. Reserved Instances para cargas predecibles.

Consejo de senior: crea un "cost dashboard" semanal que muestre gasto por servicio y equipo. Cuando la gente VE cuánto cuesta lo que usa, se vuelve más cuidadosa naturalmente. Los tags de AWS (equipo=data-engineering, proyecto=fashionstore) son esenciales para atribuir costes.

### Reserved Instances y Savings Plans

Si sabes que vas a usar un recurso durante 1 o 3 años (Redshift, EMR core nodes, RDS), puedes pagar por adelantado y ahorrar 30-60%. Es como pagar la matrícula del gimnasio anual en vez de mensual. AWS te da un descuento por comprometerte. Pero cuidado: si no lo usas, pagas igual.

NUNCA compres Reserved Instances sin al menos 3 meses de datos de uso real. He visto equipos comprar reservas de Redshift ra3.16xlarge para 3 años y darse cuenta a los 2 meses de que ra3.xlarge era suficiente. $50,000 tirados a la basura. Empieza On-Demand, mide, y DESPUÉS optimiza.

Aplicar estas 6 optimizaciones puede reducir tu factura AWS un 80-90%

Consejo de senior: incluye el coste como una métrica más de tu pipeline, al mismo nivel que la latencia o la calidad de datos. Añade un paso al final de tu pipeline que registre cuánto costó la ejecución (compute time * precio). Si un día el coste se dispara, investiga.

## ejercicios

[01]

Calculadora de coste de un pipeline completo

Crea una calculadora que estime el coste mensual de un pipeline típico: ingesta con Lambda, transformación con Glue, consulta con Athena, almacenamiento en S3.

Cargando editor...
[02]

Detector de recursos olvidados

Escribe un script que busque recursos potencialmente olvidados: buckets vacíos, roles sin usar, Lambdas sin invocaciones recientes.

Cargando editor...
[03]

Calcular ahorro por migrar CSV a Parquet

Tu equipo ejecuta 200 queries diarias sobre datos CSV en S3. Calcula cuánto ahorrarían migrando a Parquet particionado y cuánto tiempo tardaría en "pagarse" la migración.

💡 Resultado esperado

📊 Análisis de ROI:
   Coste actual (CSV): $146.48/mes
   Coste futuro (Parquet): $2.44/mes
   Ahorro: $144.04/mes (98.3%)
Cargando editor...
[04]

Generar policy de tags obligatorios

Crea una función que genere una SCP (Service Control Policy) que obligue a taggear todos los recursos con equipo, proyecto y entorno.

Cargando editor...

Regístrate para guardar tu progreso.

## comentarios

Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.

Inicia sesión para comentar y responder.

cargando comentarios...