Skip to main content
Cristhian Villegas
Cloud12 min read1 views

10 Formas Prácticas de Reducir tu Factura de AWS en 2026

10 Formas Prácticas de Reducir tu Factura de AWS en 2026

Tu Factura de AWS Probablemente Es Más Alta de lo Necesario

Si alguna vez abriste tu factura de AWS y sentiste un nudo en el estómago, no estás solo. Estudios muestran que hasta el 35% del gasto en la nube se desperdicia en recursos ociosos, sobredimensionados u olvidados. ¿La buena noticia? La mayor parte de ese desperdicio se puede corregir con un enfoque sistemático.

En esta guía veremos 10 estrategias prácticas para reducir tus costos de AWS — desde victorias rápidas que puedes aplicar hoy hasta optimizaciones a largo plazo que acumulan ahorros con el tiempo.

Visualización de infraestructura cloud representando costos de AWS

Fuente: NASA — Unsplash

1. Audita lo que Realmente Estás Usando

Antes de optimizar cualquier cosa, necesitas visibilidad. El primer paso es entender qué estás pagando y si realmente se está utilizando.

AWS Cost Explorer

Cost Explorer es tu punto de partida. Es gratuito, viene integrado en la consola y te da un desglose del gasto por servicio, región y período de tiempo.

bash
1# Usa la CLI de AWS para obtener datos de costos de los últimos 30 días
2aws ce get-cost-and-usage \
3  --time-period Start=2026-03-01,End=2026-03-31 \
4  --granularity MONTHLY \
5  --metrics "BlendedCost" \
6  --group-by Type=DIMENSION,Key=SERVICE
7
8# Ejemplo de salida:
9# EC2-Instances:    $1,245.00
10# RDS:              $890.00
11# S3:               $156.00
12# NAT Gateway:      $312.00  <-- ¡a menudo una sorpresa!

AWS Trusted Advisor

Trusted Advisor escanea tu cuenta en busca de recursos ociosos y subutilizados. Incluso la capa gratuita verifica:

  • Load balancers ociosos sin instancias saludables
  • Elastic IPs no asociadas (¡te cobran por estas!)
  • Instancias EC2 de baja utilización corriendo por debajo del 10% de CPU
  • Instancias RDS ociosas sin conexiones activas
💡 Victoria rápida: Ejecuta Trusted Advisor ahora mismo. La mayoría de los equipos encuentran al menos $50-200/mes en recursos ociosos en el primer escaneo.

2. Right-Sizing: Ajusta el Tamaño de tus Instancias

Right-sizing significa ajustar tus tipos de instancia a los requerimientos reales de la carga de trabajo. Es la optimización con mayor impacto para la mayoría de los equipos.

¿Cómo Identificar Instancias Sobredimensionadas?

Usa AWS Compute Optimizer (gratuito) para obtener recomendaciones basadas en métricas de CloudWatch de los últimos 14 días:

bash
1# Obtener recomendaciones de right-sizing
2aws compute-optimizer get-ec2-instance-recommendations \
3  --filters name=Finding,values=OVER_PROVISIONED
4
5# Hallazgos comunes:
6# t3.xlarge (4 vCPU, 16GB) al 8% CPU → recomendar t3.medium (2 vCPU, 4GB)
7# m5.2xlarge corriendo una API ligera → recomendar t3.large
8# r5.large con 3GB de memoria usada de 16GB → recomendar t3.medium

El Proceso de Right-Sizing

  1. Habilita monitoreo detallado de CloudWatch (intervalos de 1 minuto) en tus instancias
  2. Recolecta al menos 2 semanas de datos para capturar patrones de pico y valle
  3. Usa Compute Optimizer o herramientas de terceros como Datadog/Spot.io para analizar
  4. Comienza con entornos no productivos — generalmente son los más sobredimensionados
  5. Reduce un paso a la vez y monitorea el impacto en rendimiento
⚠️ No sobre-optimices: Deja un 20-30% de margen de CPU para picos de tráfico. Right-sizing no significa subdimensionar.

3. Reserved Instances vs. Savings Plans

Si tienes cargas de trabajo predecibles y estables, estás dejando dinero sobre la mesa al pagar precios bajo demanda.

CaracterísticaReserved Instances (RI)Savings Plans (SP)
DescuentoHasta 72%Hasta 72%
FlexibilidadBloqueado a tipo de instancia + regiónCualquier tipo de instancia, cualquier región
Aplica aEC2, RDS, ElastiCache, RedshiftEC2, Fargate, Lambda
Término1 o 3 años1 o 3 años
Mejor paraCargas estables y predeciblesEquipos que cambian tipos de instancia seguido

¿Cuál Deberías Elegir?

bash
1# Verificar cobertura y utilización actual de RI
2aws ce get-reservation-utilization \
3  --time-period Start=2026-03-01,End=2026-03-31 \
4  --granularity MONTHLY
5
6# Verificar recomendaciones de Savings Plans
7aws ce get-savings-plans-purchase-recommendation \
8  --savings-plans-type COMPUTE_SP \
9  --term-in-years ONE_YEAR \
10  --payment-option NO_UPFRONT \
11  --lookback-period-in-days SIXTY_DAYS
📊 Regla general: Usa Savings Plans para EC2/Fargate/Lambda (más flexibilidad). Usa Reserved Instances para RDS y ElastiCache (los Savings Plans no los cubren).

4. Elimina Recursos Huérfanos

Los recursos huérfanos son recursos en la nube que ya no cumplen ningún propósito pero siguen generando cargos. Son las "suscripciones olvidadas" de AWS.

Recursos Huérfanos Comunes

bash
1# Encontrar volúmenes EBS no adjuntos (¡estás pagando por almacenamiento!)
2aws ec2 describe-volumes \
3  --filters Name=status,Values=available \
4  --query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,Created:CreateTime}' \
5  --output table
6
7# Encontrar Elastic IPs no asociadas ($3.65/mes cada una cuando están ociosas)
8aws ec2 describe-addresses \
9  --query 'Addresses[?AssociationId==null].{IP:PublicIp,AllocationId:AllocationId}' \
10  --output table
11
12# Encontrar snapshots EBS antiguos (ordenados por antigüedad)
13aws ec2 describe-snapshots --owner-ids self \
14  --query 'sort_by(Snapshots, &StartTime)[0:20].{ID:SnapshotId,Size:VolumeSize,Date:StartTime,Desc:Description}' \
15  --output table
16
17# Encontrar NAT Gateways sin usar (son caros — ~$32/mes + procesamiento de datos)
18aws ec2 describe-nat-gateways \
19  --filter Name=state,Values=available \
20  --query 'NatGateways[*].{ID:NatGatewayId,SubnetId:SubnetId,State:State}' \
21  --output table
🚨 Antes de borrar: Siempre verifica si un recurso está referenciado por infraestructura como código (Terraform, CloudFormation). Eliminar recursos administrados manualmente causará drift en el estado.

5. Optimiza el Almacenamiento S3 con Intelligent-Tiering

Los costos de S3 se acumulan sigilosamente, especialmente si tienes datasets grandes que rara vez se acceden. S3 Intelligent-Tiering mueve automáticamente los objetos entre niveles de acceso según los patrones de uso — sin costo de recuperación.

¿Cómo Funciona?

  • Acceso frecuente — nivel por defecto, precio estándar de S3
  • Acceso infrecuente — objetos no accedidos por 30 días, ~40% más barato
  • Acceso de archivo instantáneo — 90 días, ~68% más barato
  • Acceso de archivo — 90-180 días, ~71% más barato (opcional, minutos para restaurar)
  • Archivo profundo — 180+ días, ~95% más barato (opcional, horas para restaurar)
bash
1# Aplicar Intelligent-Tiering a un bucket existente vía política de ciclo de vida
2aws s3api put-bucket-lifecycle-configuration \
3  --bucket mi-bucket-datos \
4  --lifecycle-configuration '{
5    "Rules": [
6      {
7        "ID": "IntelligentTieringRule",
8        "Status": "Enabled",
9        "Filter": { "Prefix": "" },
10        "Transitions": [
11          {
12            "Days": 0,
13            "StorageClass": "INTELLIGENT_TIERING"
14          }
15        ]
16      }
17    ]
18  }'
19
20# Habilitar niveles de archivo opcionales
21aws s3api put-bucket-intelligent-tiering-configuration \
22  --bucket mi-bucket-datos \
23  --id "ArchiveConfig" \
24  --intelligent-tiering-configuration '{
25    "Id": "ArchiveConfig",
26    "Status": "Enabled",
27    "Tierings": [
28      { "AccessTier": "ARCHIVE_ACCESS", "Days": 90 },
29      { "AccessTier": "DEEP_ARCHIVE_ACCESS", "Days": 180 }
30    ]
31  }'

6. Apaga los Entornos de Dev/Staging Fuera de Horario

Tus entornos de desarrollo y staging probablemente corren 24/7, pero tu equipo solo trabaja 8-10 horas al día. Eso es un 60-70% de desperdicio.

Programación Automatizada con AWS Instance Scheduler

AWS provee una solución gratuita llamada Instance Scheduler on AWS que puede iniciar/detener instancias EC2 y RDS según un horario:

yaml
1# Ejemplo: programación basada en tags con CloudFormation
2# Etiqueta tus instancias de dev con: Schedule = horario-oficina
3
4# Configuración del Instance Scheduler
5Periods:
6  - Name: horario-oficina
7    BeginTime: "08:00"
8    EndTime: "20:00"
9    WeekDays: mon-fri
10
11# Cálculo de ahorros:
12# t3.xlarge bajo demanda: $0.1664/hr
13# Corriendo 24/7: $0.1664 × 730 = $121.47/mes
14# Solo horario de oficina: $0.1664 × 260 = $43.26/mes
15# Ahorro: $78.21/mes por instancia (64%)

Alternativa con Script de Bash

bash
1#!/bin/bash
2# stop-dev-instances.sh — ejecutar vía cron o EventBridge a las 8pm
3
4INSTANCE_IDS=$(aws ec2 describe-instances \
5  --filters "Name=tag:Environment,Values=dev,staging" \
6             "Name=instance-state-name,Values=running" \
7  --query 'Reservations[*].Instances[*].InstanceId' \
8  --output text)
9
10if [ -n "$INSTANCE_IDS" ]; then
11  echo "Deteniendo instancias de dev: $INSTANCE_IDS"
12  aws ec2 stop-instances --instance-ids $INSTANCE_IDS
13fi
14
15# Para RDS
16DEV_DBS=$(aws rds describe-db-instances \
17  --query 'DBInstances[?TagList[?Key==`Environment` && Value==`dev`]].DBInstanceIdentifier' \
18  --output text)
19
20for db in $DEV_DBS; do
21  echo "Deteniendo RDS: $db"
22  aws rds stop-db-instance --db-instance-identifier $db
23done
💡 Pro Tip: Usa Amazon EventBridge Scheduler en lugar de cron. Es serverless, no cuesta nada para este caso de uso y soporta roles IAM de forma nativa.

7. Usa Spot Instances para Cargas de Trabajo Tolerantes a Fallos

Las Spot Instances ofrecen hasta un 90% de descuento comparado con precios bajo demanda. ¿La trampa? AWS puede reclamarlas con 2 minutos de aviso. Pero para muchas cargas de trabajo, eso está perfectamente bien.

Casos de Uso Ideales para Spot

  • Pipelines de CI/CD — los jobs de build son efímeros por naturaleza
  • Procesamiento de datos — ETL batch, jobs de Spark/EMR
  • Entornos de pruebas — pruebas de carga, suites de pruebas de integración
  • Cargas containerizadas — ECS/EKS con múltiples réplicas de tareas
  • Entrenamiento de machine learning — checkpoint y resume
bash
1# Verificar precios actuales de Spot para el tipo de instancia deseado
2aws ec2 describe-spot-price-history \
3  --instance-types t3.large m5.large c5.large \
4  --product-descriptions "Linux/UNIX" \
5  --start-time $(date -u +%Y-%m-%dT%H:%M:%S) \
6  --query 'SpotPriceHistory[*].{Type:InstanceType,AZ:AvailabilityZone,Price:SpotPrice}' \
7  --output table
8
9# Ejemplo de salida:
10# t3.large  | us-east-1a | 0.0250  (bajo demanda: $0.0832 → 70% de ahorro)
11# m5.large  | us-east-1b | 0.0310  (bajo demanda: $0.0960 → 68% de ahorro)
12# c5.large  | us-east-1a | 0.0280  (bajo demanda: $0.0850 → 67% de ahorro)

Dashboard de analíticas representando monitoreo y optimización de costos AWS

Fuente: Luke Chesser — Unsplash

8. Implementa Tags de Asignación de Costos

No puedes optimizar lo que no puedes medir. Los tags de asignación de costos te permiten desglosar tu factura de AWS por equipo, proyecto, entorno o cualquier otra dimensión que sea relevante para tu organización.

Tags Esenciales que Debes Implementar

bash
1# Estrategia de etiquetado recomendada
2aws ec2 create-tags --resources i-0abc123def456 --tags \
3  Key=Environment,Value=production \
4  Key=Team,Value=backend \
5  Key=Project,Value=payments-api \
6  Key=CostCenter,Value=engineering \
7  Key=Owner,[email protected] \
8  Key=ManagedBy,Value=terraform
9
10# Aplica tags obligatorios con AWS Organizations SCP (Service Control Policy)
11# Esto impide crear recursos sin los tags requeridos
json
1{
2  "Version": "2012-10-17",
3  "Statement": [
4    {
5      "Sid": "RequireTags",
6      "Effect": "Deny",
7      "Action": [
8        "ec2:RunInstances",
9        "rds:CreateDBInstance",
10        "s3:CreateBucket"
11      ],
12      "Resource": "*",
13      "Condition": {
14        "Null": {
15          "aws:RequestTag/Environment": "true",
16          "aws:RequestTag/Team": "true",
17          "aws:RequestTag/Project": "true"
18        }
19      }
20    }
21  ]
22}
📊 Importante: Después de crear los tags, debes activarlos como tags de asignación de costos en la consola de Billing. Los tags no aparecerán en Cost Explorer hasta que se activen.

9. Configura AWS Budgets y Alertas

La prevención es más barata que la cura. AWS Budgets te permite establecer umbrales de gasto y recibir notificaciones antes de que los costos se salgan de control.

bash
1# Crear un presupuesto mensual con alertas al 80% y 100%
2aws budgets create-budget --account-id 123456789012 \
3  --budget '{
4    "BudgetName": "Presupuesto-Mensual",
5    "BudgetLimit": { "Amount": "5000", "Unit": "USD" },
6    "BudgetType": "COST",
7    "TimeUnit": "MONTHLY"
8  }' \
9  --notifications-with-subscribers '[
10    {
11      "Notification": {
12        "NotificationType": "ACTUAL",
13        "ComparisonOperator": "GREATER_THAN",
14        "Threshold": 80,
15        "ThresholdType": "PERCENTAGE"
16      },
17      "Subscribers": [
18        { "SubscriptionType": "EMAIL", "Address": "[email protected]" },
19        { "SubscriptionType": "SNS", "Address": "arn:aws:sns:us-east-1:123456789012:billing-alerts" }
20      ]
21    },
22    {
23      "Notification": {
24        "NotificationType": "FORECASTED",
25        "ComparisonOperator": "GREATER_THAN",
26        "Threshold": 100,
27        "ThresholdType": "PERCENTAGE"
28      },
29      "Subscribers": [
30        { "SubscriptionType": "EMAIL", "Address": "[email protected]" }
31      ]
32    }
33  ]'
⚠️ Nota: Las alertas de AWS Budgets no son en tiempo real — puede haber un retraso de hasta 24 horas. Para detección de anomalías en tiempo real, considera AWS Cost Anomaly Detection, que usa ML para identificar patrones de gasto inesperados.

10. Tips Adicionales: Las Victorias Fáciles

Aquí hay victorias rápidas adicionales que a menudo se pasan por alto:

Costos de Transferencia de Datos

  • Usa VPC Endpoints para S3 y DynamoDB — evita los cargos de procesamiento del NAT Gateway ($0.045/GB)
  • Mantén los recursos en la misma Zona de Disponibilidad cuando sea posible — la transferencia entre AZs cuesta $0.01/GB
  • Usa CloudFront — la transferencia de datos desde CloudFront a internet es más barata que directamente desde EC2

Optimización de RDS

  • Usa Aurora Serverless v2 para cargas variables — escala hasta 0.5 ACU cuando está ocioso
  • Elimina snapshots manuales de RDS antiguos — los snapshots automáticos son gratuitos, los manuales no
  • Considera Aurora I/O-Optimized si los costos de I/O superan el 25% de tu factura de base de datos

Lambda y Serverless

  • Optimiza la asignación de memoria de Lambda — más memoria = más CPU = ejecución más rápida = menos costo en muchos casos
  • Usa procesadores Graviton (ARM) — 20% más baratos, a menudo 20% más rápidos para Lambda y EC2
  • Habilita Lambda Provisioned Concurrency solo para funciones sensibles a la latencia, no para todas
bash
1# Usa AWS Lambda Power Tuning para encontrar la memoria óptima
2# https://github.com/alexcasalboni/aws-lambda-power-tuning
3
4# Verificar si hay instancias Graviton disponibles para tu carga de trabajo
5aws ec2 describe-instance-types \
6  --filters "Name=processor-info.supported-architecture,Values=arm64" \
7  --query 'InstanceTypes[?starts_with(InstanceType, `t4g`) || starts_with(InstanceType, `m7g`)].{Type:InstanceType,vCPUs:VCpuInfo.DefaultVCpus,Memory:MemoryInfo.SizeInMiB}' \
8  --output table

Construye una Cultura de Optimización de Costos

La optimización de costos más efectiva no es una limpieza única — es un cambio cultural. Así es como puedes hacerlo sostenible:

  1. Revisiones semanales de costos — dedica 15 minutos a revisar el dashboard de Cost Explorer con tu equipo
  2. Responsabilidad de costos — cada equipo debe ser responsable de su gasto en la nube
  3. Right-size antes de escalar — hazlo un ítem del checklist en tu proceso de despliegue
  4. Automatiza la limpieza — programa scripts para encontrar y alertar sobre recursos huérfanos
  5. Etiqueta todo — sin tag, no hay deploy. Aplícalo con SCPs
💡 Tip final: Empieza con las líneas más grandes de tu factura. Optimizar una flota de EC2 de $2,000/mes en un 30% ahorra más que eliminar un bucket de S3 de $50/mes por completo. Enfócate en el impacto, no en la completitud.

Conclusión

Reducir tu factura de AWS no requiere una reescritura completa de la arquitectura. Al auditar sistemáticamente el uso, ajustar el tamaño de las instancias, comprometerse con Savings Plans, limpiar recursos huérfanos y automatizar los horarios, la mayoría de los equipos pueden reducir su gasto en la nube entre un 30-50%.

La clave es hacer de la optimización de costos un hábito, no un proyecto. Configura tus tags, establece tus presupuestos, programa tus limpiezas y revisa tu gasto regularmente. Tu CFO te lo agradecerá.

Share:
CV

Cristhian Villegas

Software Engineer specializing in Java, Spring Boot, Angular & AWS. Building scalable distributed systems with clean architecture.

Comments

Sign in to leave a comment

No comments yet. Be the first!

Related Articles

Stay updated

Get notified when I publish new articles. No spam, unsubscribe anytime.