Conceptos de Auto Scaling
¿Qué es el Auto Scaling?
El Auto Scaling permite ajustar automáticamente el número de instancias EC2 según la demanda. Esto garantiza el rendimiento durante los picos de tráfico y reduce los costos durante los períodos de baja actividad.
┌─────────────────────────────────────────────────────────────┐
│ AUTO SCALING - CONCEPTO │
├─────────────────────────────────────────────────────────────┤
│ │
│ SIN AUTO SCALING │
│ ───────────────── │
│ │
│ Capacidad ▲ │
│ │ ┌─────────────────────────────────┐ │
│ │ │ Capacidad fija (10 instancias) │ │
│ │ ───┴─────────────────────────────────┴─── │
│ │ /\ │
│ │ / \ Demanda real │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────► Tiempo │
│ │
│ Problemas : ❌ Sobreaprovisionado en la noche = desperdicio│
│ ❌ Subaprovisionado en picos = lentitud │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ CON AUTO SCALING │
│ ───────────────── │
│ │
│ Capacidad ▲ │
│ │ ________ │
│ │ / \ Capacidad se adapta │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────────► Tiempo │
│ │
│ Ventajas : ✅ Capacidad = Demanda (siempre) │
│ ✅ Costos optimizados │
│ ✅ Rendimiento mantenido │
│ │
└─────────────────────────────────────────────────────────────┘
Componentes de Auto Scaling
Arquitectura
┌─────────────────────────────────────────────────────────────┐
│ COMPONENTES AUTO SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ LAUNCH TEMPLATE │ │
│ │ │ │
│ │ "Cómo crear las nuevas instancias" │ │
│ │ • AMI : ami-xxxxx │ │
│ │ • Tipo : t3.medium │ │
│ │ • Security Group : sg-web │ │
│ │ • User Data : script de arranque │ │
│ │ • Key Pair : my-key │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AUTO SCALING GROUP (ASG) │ │
│ │ │ │
│ │ "Cuántas instancias y dónde" │ │
│ │ • Min : 2 │ │
│ │ • Max : 10 │ │
│ │ • Desired : 4 │ │
│ │ • Subnets : subnet-1a, subnet-1b │ │
│ │ • Health Check : EC2 o ELB │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ SCALING POLICIES │ │
│ │ │ │
│ │ "Cuándo añadir/quitar instancias" │ │
│ │ • CPU > 70% → +2 instancias │ │
│ │ • CPU < 30% → -1 instancia │ │
│ │ • Schedule : 8h → 6 instancias, 20h → 2 instancias │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Tabla de Componentes
| Componente | Rol | Ejemplo |
|---|---|---|
| Launch Template | Define la configuración de las instancias | AMI, tipo, SG, user data |
| ASG | Administra el grupo de instancias | Min/Max/Desired, subnets |
| Scaling Policy | Reglas de escalado | CPU > 70% → scale out |
| CloudWatch Alarm | Dispara el escalado | Alerta sobre métrica |
Tipos de Scaling
1. Manual Scaling
Modificación manual del número de instancias.
# Cambiar el número deseado manualmente
aws autoscaling set-desired-capacity \
--auto-scaling-group-name my-asg \
--desired-capacity 5
Caso de uso: Eventos previsibles (Black Friday planificado)
2. Scheduled Scaling
Escalado basado en un calendario predefinido.
┌─────────────────────────────────────────────────────────────┐
│ SCHEDULED SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Ejemplo : Sitio e-commerce con tráfico previsible │
│ │
│ Instancias ▲ │
│ │ │
│ 10─┤ ┌───────────────┐ │
│ │ │ │ │
│ 6─┤ ┌────┘ └────┐ │
│ │ │ │ │
│ 2─┤─────┘ └───── │
│ │ │
│ └─────┬─────┬─────┬─────┬─────┬─────► Hora │
│ 6h 9h 12h 18h 22h │
│ │
│ Reglas : │
│ • 6h → min:2, max:6 (antes de apertura) │
│ • 9h → min:6, max:10 (horas pico) │
│ • 22h → min:2, max:4 (noche) │
│ │
└─────────────────────────────────────────────────────────────┘
# Crear una acción programada
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name my-asg \
--scheduled-action-name scale-up-morning \
--recurrence "0 9 * * MON-FRI" \
--min-size 6 \
--max-size 10 \
--desired-capacity 6
3. Dynamic Scaling (Target Tracking)
El más recomendado. AWS mantiene automáticamente una métrica objetivo.
┌─────────────────────────────────────────────────────────────┐
│ TARGET TRACKING SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Objetivo : Mantener CPU al 50% │
│ │
│ CPU ▲ │
│ │ │
│ 80─┤ x x │
│ │ x x ← Demasiado alto → Scale OUT │
│ 50─┤──────────────────────────────────────── Objetivo │
│ │ x │
│ 20─┤ x x ← Demasiado bajo → Scale IN │
│ │ │
│ └─────────────────────────────────────────► Tiempo │
│ │
│ AWS ajusta automáticamente el número de instancias │
│ para mantener la CPU alrededor del 50% │
│ │
│ Métricas disponibles : │
│ • ASGAverageCPUUtilization │
│ • ASGAverageNetworkIn │
│ • ASGAverageNetworkOut │
│ • ALBRequestCountPerTarget │
│ │
└─────────────────────────────────────────────────────────────┘
# Crear una política Target Tracking
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name cpu-target-policy \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}'
4. Step Scaling
Escalado por niveles según la intensidad de la carga.
┌─────────────────────────────────────────────────────────────┐
│ STEP SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Reglas de escalado por niveles : │
│ │
│ CPU% Acción │
│ ───── ────── │
│ 0-40% Quitar 2 instancias │
│ 40-60% Ninguna acción │
│ 60-80% Añadir 1 instancia │
│ 80-100% Añadir 3 instancias │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 100% ┬─────────────────────────────┐ │ │
│ │ │ +3 instancias │ │ │
│ │ 80% ┼─────────────────────────────┼ │ │
│ │ │ +1 instancia │ │ │
│ │ 60% ┼─────────────────────────────┼ │ │
│ │ │ (nada) │ │ │
│ │ 40% ┼─────────────────────────────┼ │ │
│ │ │ -2 instancias │ │ │
│ │ 0% └─────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Comparación de Tipos
| Tipo | Cuándo usarlo | Reactividad |
|---|---|---|
| Manual | Eventos conocidos de antemano | Inmediata |
| Scheduled | Patrones previsibles (horarios) | Planificada |
| Target Tracking | Carga variable, recomendado por defecto | ~3 min |
| Step | Respuesta proporcional a la carga | ~3 min |
Comportamiento de Scaling
Scale Out vs Scale In
┌─────────────────────────────────────────────────────────────┐
│ SCALE OUT vs SCALE IN │
├─────────────────────────────────────────────────────────────┤
│ │
│ SCALE OUT (añadir) │
│ ─────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ → │ 1 │ │ 2 │ │ 3 │ │ 4 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 2 instancias 4 instancias │
│ │
│ Comportamiento : │
│ • Rápido (instancias lanzadas tan pronto se alcanza el umbral) │
│ • Sin cooldown por defecto para Target Tracking │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ SCALE IN (quitar) │
│ ────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ → │ 1 │ │ 2 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 4 instancias 2 instancias │
│ │
│ Comportamiento : │
│ • Más lento (evita oscilaciones) │
│ • Cooldown de 300s por defecto │
│ • Termination policy determina qué instancia │
│ │
└─────────────────────────────────────────────────────────────┘
Termination Policy
¿Qué instancia terminar primero durante el scale in?
| Policy | Comportamiento |
|---|---|
| Default | Zona de disponibilidad más antigua con más instancias, luego la configuración más antigua |
| OldestInstance | Instancia más antigua |
| NewestInstance | Instancia más reciente |
| OldestLaunchConfig | Configuración de lanzamiento más antigua |
| ClosestToNextInstanceHour | Más cercana a la próxima hora de facturación |
Cooldown y Warmup
┌─────────────────────────────────────────────────────────────┐
│ COOLDOWN Y WARMUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ COOLDOWN (después de scaling) │
│ ───────────────────────── │
│ Período en el que no ocurre escalado adicional │
│ → Evita oscilaciones │
│ │
│ Tiempo ─────► │
│ │ │
│ │ Scale Cooldown Scale Cooldown │
│ │ OUT 300s IN 300s │
│ │ │ ├─────┤ │ ├─────┤ │
│ │ ▼ │ │ ▼ │ │ │
│ │ ┌───┐ │ │ ┌───┐ │ │ │
│ │ │+2 │ │ no │ │-1 │ │ no │ │
│ │ │ │ │ hay │ │ │ │ hay │ │
│ │ │ │ │scaling│ │ │ │scaling│ │
│ │ └───┘ │ │ └───┘ │ │ │
│ └──────────┴─────┴────────┴───────┴─────┴──────────► │
│ │
│ WARMUP (antes de métricas) │
│ ───────────────────────── │
│ Tiempo para que una nueva instancia esté "caliente" │
│ → Sus métricas no cuentan antes del warmup │
│ │
│ Por defecto Target Tracking : 300 segundos │
│ │
└─────────────────────────────────────────────────────────────┘
Resumen
| Concepto | Descripción | Valor Típico |
|---|---|---|
| Launch Template | Configuración de nuevas instancias | AMI + tipo + SG |
| ASG | Grupo de instancias gestionado | min:2, max:10 |
| Target Tracking | Escalado automático sobre métrica | CPU 50% |
| Cooldown | Pausa después de escalado | 300s |
| Warmup | Retardo antes de contar métricas | 300s |
Próxima sección : Políticas de Scaling