intermediate Por Mathias Paulenko

Optimización de Costos Cloud

Guía práctica para la optimización de costos cloud: dimensionamiento correcto, instancias reservadas, instancias spot, estrategias de etiquetado y prácticas FinOps que reducen gasto manteniendo rendimiento.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Overview

La optimización de costos cloud es la práctica de reducir el gasto en infraestructura manteniendo o mejorando el rendimiento y confiabilidad de las aplicaciones. Combina decisiones técnicas (tipos de instancia, clases de almacenamiento) con prácticas organizacionales (etiquetado, chargeback, cultura FinOps).

A continuación: estrategias comprobadas para reducir facturas cloud sin recortar esquinas.

When to Use

  • For alternatives, see FinOps — Cloud Cost Optimization and Financial Operations.

  • Tu factura cloud crece más rápido que tu base de usuarios o ingresos

  • Tienes recursos sin usar o subutilizados ejecutándose 24/7

  • Quieres introducir responsabilidad por gastos cloud entre equipos

  • Estás preparando una revisión o auditoría de presupuesto de infraestructura

  • Estás migrando cargas de trabajo y quieres optimizar desde el día uno

Core Concepts

ConceptoDescripción
Dimensionamiento CorrectoCoincidir capacidad de recursos con requerimientos reales de carga
Instancias Reservadas (RI)Capacidad prepagada con descuento (compromiso 1-3 años)
Instancias SpotCapacidad cloud no usada vendida con descuentos fuertes (hasta 90%)
Savings PlansModelos de compromiso flexibles para uso de computación
Jerarquización de AlmacenamientoMover datos menos accedidos a clases de almacenamiento más baratas
EtiquetadoEtiquetar recursos con centro de costo, entorno, propietario
FinOpsPráctica cultural de traer responsabilidad financiera al gasto cloud

Step-by-Step Cost Optimization

1. Entender tu Gasto Actual

Antes de optimizar, sabe dónde va el dinero:

# Ejemplo: AWS Cost Explorer CLI
aws ce get-cost-and-usage \
  --time-period Start=2026-01-01,End=2026-06-01 \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --group-by Type=DIMENSION,Key=SERVICE

# Ejemplo: Consulta Azure Cost Management
az costmanagement query \
  --type ActualCost \
  --timeframe MonthToDate \
  --dataset-granularity Daily

Reportes clave para generar:

  • Gasto por servicio (computación, almacenamiento, red, base de datos)
  • Gasto por entorno (producción, staging, desarrollo)
  • Gasto por equipo o centro de costo
  • Reporte de recursos ociosos (volúmenes sin adjuntar, balanceadores sin usar)

2. Dimensionar Correctamente Recursos de Computación

Coincidir tamaños de instancia con necesidades reales de carga:

# Ejemplo: Analizar utilización de CPU y memoria para dimensionar
import pandas as pd

# Cargar métricas de CloudWatch/Azure Monitor
df = pd.read_csv('instance_metrics.csv')

# Identificar instancias subutilizadas (<30% CPU promedio)
underutilized = df[df['cpu_avg'] < 30]
print(f"Instancias subutilizadas: {len(underutilized)}")

# Recomendar tipos de instancia más pequeños
for _, row in underutilized.iterrows():
    current = row['instance_type']
    cpu = row['cpu_avg']
    mem = row['memory_avg']
    print(f"{current} -> Considerar reducir tamaño (CPU: {cpu:.1f}%, Memoria: {mem:.1f}%)")

Pautas de dimensionamiento:

  • Revisar utilización de instancias mensualmente; apuntar a 40-70% de CPU promedio
  • Usar instancias burst (serie T, serie B) para cargas variables
  • Reducir agresivamente entornos de desarrollo y staging
  • Considerar instancias basadas en ARM (AWS Graviton, Azure Ampere) para ahorros de 20-40%

3. Comprar Capacidad Reservada

Comprometer uso base para descuentos significativos:

Tipo de CompraDescuentoFlexibilidadMejor Para
RI EstándarHasta 72%Baja (región/instancia específica)Cargas de producción estables
RI ConvertibleHasta 54%Media (cambiar familia de instancia)Cargas predecibles pero en evolución
Savings PlansHasta 72%Alta (cualquier instancia en familia)Cargas mixtas y flexibles
# Ejemplo: Calcular punto de equilibrio de RI
# Costo on-demand: $0.192/hora = ~$140/mes
# Costo RI 1 año: $85/mes (todo anticipado) o $90/mes (parcial anticipado)
# Punto de equilibrio: 7-8 meses

Reglas de oro:

  • Solo reservar recursos ejecutándose >70% del tiempo
  • Empezar con pago parcial anticipado para preservar flujo de caja
  • Usar RI convertibles o savings plans si la carga puede cambiar
  • Revisar capacidad reservada trimestralmente

4. usar Instancias Spot y Preemptibles

Usar capacidad con descuento para cargas tolerantes a fallos:

# Ejemplo: Configuración de node pool spot de Kubernetes
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: spot-workloads
spec:
  template:
    spec:
      requirements:
        - key: karpenter.sh/capacity-type
          operator: In
          values: ["spot"]
      nodeClassRef:
        name: default
  limits:
    cpu: 1000
    memory: 1000Gi

Casos de uso para instancias spot:

  • Procesamiento por lotes y análisis de datos
  • Agentes de builds CI/CD
  • Servicios web sin estado con auto-escalado
  • Cargas de entrenamiento de machine learning
  • Entornos de desarrollo y prueba

Importante: Las instancias spot pueden ser interrumpidas con poca anticipación. Diseña cargas de trabajo para manejar interrupciones gracefulmente.

5. Optimizar Costos de Almacenamiento

El almacenamiento es a menudo el costo cloud de más rápido crecimiento:

EstrategiaDescripciónAhorros Potenciales
JerarquizaciónMover datos fríos a clases de almacenamiento más baratas50-80%
CompresiónComprimir logs y backups antes de almacenar60-90%
DesduplicaciónEliminar datos duplicados entre backups30-50%
Políticas de ciclo de vidaAuto-eliminar o archivar datos después de N díasVariable
Dimensionar volúmenesReducir tamaños de discos sobreaprovisionados20-40%
# Ejemplo: Política de ciclo de vida de AWS S3 para archivado de logs
{
  "Rules": [
    {
      "ID": "LogArchive",
      "Status": "Enabled",
      "Filter": { "Prefix": "logs/" },
      "Transitions": [
        { "Days": 30, "StorageClass": "STANDARD_IA" },
        { "Days": 90, "StorageClass": "GLACIER" }
      ],
      "Expiration": { "Days": 365 }
    }
  ]
}

6. Implementar Etiquetado y Chargeback

La responsabilidad financiera impulsa comportamiento consciente de costos:

Etiquetas requeridas:

  • Environment: producción, staging, desarrollo
  • CostCenter: equipo o departamento responsable
  • Owner: contacto individual o de equipo
  • Project: proyecto o aplicación asociada
  • AutoShutdown: sí/no para recursos no productivos
# Ejemplo: AWS CLI para forzar política de etiquetado
aws resourcegroupstaggingapi get-resources \
  --tag-filters Key=Environment,Values=development \
  --resource-type-filters ec2:instance

# Identificar recursos sin etiquetar
aws resourcegroupstaggingapi get-resources \
  --resources-per-page 100 | \
  jq '.ResourceTagMappingList[] | select(.Tags | length == 0) | .ResourceARN'

7. Configurar Monitoreo y Alertas de Costos

El monitoreo proactivo previene sustos de facturación:

Tipo de AlertaUmbralAcción
Anomalía de gasto diario>20% sobre promedio de 30 díasInvestigar inmediatamente
Umbral de presupuesto80% del presupuesto mensualNotificar líder de equipo
Crecimiento de recursosNuevos recursos >$500/díaRequerir flujo de aprobación
Recursos ociosos<5% CPU por 7 díasAuto-etiquetar para revisión

Lo que funciona

  • Optimiza continuamente, no anualmente. Revisa costos mensualmente y actúa sobre hallazgos.
  • Empieza con el gasto más grande. Enfócate en computación, luego almacenamiento, luego red.
  • Involucra equipos de ingeniería. La optimización de costos requiere cambios de código y arquitectura.
  • Mide ahorros. Rastrea reducciones reales, no solo recomendaciones.
  • Equilibra costo y confiabilidad. Nunca sacrifiques disponibilidad por ahorros marginales.
  • Automatiza donde sea posible. Usa policy-as-code para etiquetado, apagado y reglas de ciclo de vida.

Common Mistakes

  • Comprar capacidad reservada para cargas variables. Los RI solo ahorran dinero si la utilización es alta.
  • Ignorar costos de transferencia de datos. Tráfico cross-AZ y egress puede ser sorprendentemente costoso.
  • Sobreaprovisionar almacenamiento. Muchos volúmenes se crean al tamaño máximo y nunca se reducen.
  • Descuidar entornos de desarrollo. Dev/test puede consumir 30-50% del gasto total.
  • Optimizar sin medir. Siempre establece línea base antes y después para confirmar ahorros.

Variants

  • Específico AWS: Enfocarse en Savings Plans, instancias Graviton, S3 Intelligent-Tiering
  • Específico Azure: Usar Hybrid Benefit, Reserved VM Instances, Spot VMs
  • Específico GCP: usar Committed Use Discounts, Preemptible VMs, Sustained Use Discounts
  • Multi-cloud: Comparar precios entre proveedores para cada tipo de carga

Conclusion

La optimización de costos cloud es una disciplina continua, no un proyecto de una sola vez. Combina tácticas técnicas (dimensionamiento, capacidad reservada, instancias spot) con prácticas culturales (etiquetado, chargeback, FinOps) para construir infraestructura sostenible y eficiente en costos.

Temas Avanzados

Escenario: Optimizacion de Costos Cloud para Startup

Sistema: Startup en AWS, $8K/mes, 5 servicios
Objetivo: Reducir 40% sin impacto en usuarios

Fase 1: Inventario y visibilidad
  | Servicio | Costo/mes | % del total | Tags |
  |----------|-----------|-------------|------|
  | EC2 (8 instancias) | $3,200 | 40% | Parcial |
  | RDS PostgreSQL | $1,500 | 19% | Si |
  | ElastiCache | $800 | 10% | No |
  | S3 (10TB) | $600 | 8% | Si |
  | ALB + NAT | $500 | 6% | No |
  | Lambda | $400 | 5% | Si |
  | Otros | $1,000 | 12% | No |
  | Total | $8,000 | 100% | |

Fase 2: Optimizacion (priorizar por impacto)
  Accion 1: Right-size EC2
    - Analizar CPU/memoria (CloudWatch, 30 dias)
    - 4 instancias < 20% CPU -> reducir tipo
    - 2 instancias < 10% CPU -> terminar
    - Ahorro: $1,200/mes

  Accion 2: Reserved Instances
    - 3 instancias always-on -> 1yr RI (40% descuento)
    - Ahorro: $600/mes

  Accion 3: S3 lifecycle
    - Objetos > 30 dias -> S3 IA
    - Objetos > 90 dias -> Glacier
    - Ahorro: $300/mes

  Accion 4: Spot instances para batch
    - 2 workers de procesamiento -> Spot (70% descuento)
    - Ahorro: $400/mes

  Accion 5: NAT Gateway optimization
    - Mover S3 access a VPC endpoint (sin NAT)
    - Ahorro: $200/mes

  Accion 6: Lambda optimization
    - Reducir memory de 1GB a 512MB (medir duracion)
    - Ahorro: $100/mes

Fase 3: Resultados
  | Accion | Ahorro/mes |
  |--------|------------|
  | Right-size EC2 | $1,200 |
  | Reserved Instances | $600 |
  | S3 lifecycle | $300 |
  | Spot instances | $400 |
  | NAT optimization | $200 |
  | Lambda memory | $100 |
  | Total | $2,800 (35%) |

Fase 4: Gobernanza continua
  - Tags obligatorios: team, env, project, cost-center
  - Alertas de budget: 80% y 100%
  - Reporte semanal de costos por equipo
  - Quarterly cost review
  - FinOps dashboard: Cost Explorer + tags

Lecciones:
  - Visibilidad primero: no puedes optimizar lo que no ves
  - Right-sizing es el win mas rapido
  - Reserved Instances para cargas always-on
  - S3 lifecycle es set-and-forget
  - La gobernanza continua previene el cost creep

Como asigno costos a equipos sin tags?

Para recursos sin tags, usa heuristicas: divide por numero de servicios por equipo, o por uso de CPU/memoria. Para EKS, usa Kubecost para asignar costos por namespace. Para RDS, divide por queries por schema. Implementa tags obligatorios via CI/CD: bloquea creacion de recursos sin tags usando Service Control Policies (SCP) en AWS Organizations.

Preguntas frecuentes

¿Cómo empiezo con esto en un proyecto existente?
Empieza con una parte pequeña y aislada de tu codebase. Aplica los conceptos de esta guía a un módulo o servicio. Mide el impacto, luego expande a otras áreas.
¿Qué herramientas necesito?
Las herramientas mencionadas throughout esta guía se listan en cada sección. La mayoría son open-source y ampliamente adoptadas. Consulta los recursos relacionados para instrucciones de setup.
¿Cómo mido el éxito después de implementar esto?
Define métricas claras antes de empezar: benchmarks de rendimiento, tasas de error o indicadores de mantenibilidad. Compara antes y después. Itera basándote en datos, no en suposiciones.