Saltar al contenido principal

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​

ComponenteRolEjemplo
Launch TemplateDefine la configuración de las instanciasAMI, tipo, SG, user data
ASGAdministra el grupo de instanciasMin/Max/Desired, subnets
Scaling PolicyReglas de escaladoCPU > 70% → scale out
CloudWatch AlarmDispara el escaladoAlerta 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​

TipoCuándo usarloReactividad
ManualEventos conocidos de antemanoInmediata
ScheduledPatrones previsibles (horarios)Planificada
Target TrackingCarga variable, recomendado por defecto~3 min
StepRespuesta 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?

PolicyComportamiento
DefaultZona de disponibilidad más antigua con más instancias, luego la configuración más antigua
OldestInstanceInstancia más antigua
NewestInstanceInstancia más reciente
OldestLaunchConfigConfiguración de lanzamiento más antigua
ClosestToNextInstanceHourMá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​

ConceptoDescripciónValor Típico
Launch TemplateConfiguración de nuevas instanciasAMI + tipo + SG
ASGGrupo de instancias gestionadomin:2, max:10
Target TrackingEscalado automático sobre métricaCPU 50%
CooldownPausa después de escalado300s
WarmupRetardo antes de contar métricas300s

Próxima sección : Políticas de Scaling