Saltar al contenido principal

Lab : Configuración de Auto Scaling

Objetivo del Lab​

Diseñar y configurar una solución completa de Auto Scaling para una aplicación web con patrones de tráfico variables.

Parte 1 : Escenario​

Contexto​

NewsPortal es un sitio de noticias que experimenta picos de tráfico impredecibles durante noticias de última hora. El equipo técnico quiere automatizar el escalado para:

  • Mantener el rendimiento durante los picos
  • Reducir los costos durante las horas de baja demanda

Datos de Tráfico​

┌─────────────────────────────────────────────────────────────┐
│ PATRONES DE TRÁFICO NEWSPORTAL │
├─────────────────────────────────────────────────────────────┤
│ │
│ DÍA NORMAL │
│ ─────────────── │
│ │
│ Visitantes ▲ │
│ │ ┌────┐ │
│ 50,000 ─┤ ┌┘ └┐ │
│ │ ┌┘ └┐ ┌──┐ │
│ 30,000 ─┤ ┌──┘ └──────┘ └┐ │
│ │ ┌──┘ └──┐ │
│ 10,000 ─┤──┘ └── │
│ │ │
│ └─────┬─────┬─────┬─────┬─────┬─────► Hora │
│ 6h 9h 12h 18h 21h │
│ │
│ BREAKING NEWS (imprevisible) │
│ ─────────────────────────── │
│ │
│ Visitantes ▲ │
│ │ ▲ Pico repentino x10 │
│ 200,000 ─┤ ╱╲ │
│ │ ╱ ╲ │
│ 100,000 ─┤ ╱ ╲ │
│ │ ╱ ╲ │
│ 20,000 ─┤──────╱ ╲────────── │
│ │ │
│ └─────────────────────────────────► Tiempo │
│ │
└─────────────────────────────────────────────────────────────┘

Requisitos​

AspectoRequisito
Disponibilidad99.9%
Tiempo de respuesta< 500ms (P95)
Capacidad mínima5,000 visitantes/min
Capacidad máxima200,000 visitantes/min
PresupuestoOptimizar costos fuera de picos

Parte 2 : Ejercicios de Diseño​

Ejercicio 2.1 : Dimensionamiento​

Sabiendo que una instancia t3.medium puede manejar 500 solicitudes/segundo, calcule:

PreguntaSu Respuesta
Instancias mínimas (normal)?
Instancias para pico x10?
Mínimo recomendado para HA?
Máximo recomendado?
💡 Solución
Tráfico normal : 50,000 visitantes/min = 833 req/sec
Instancias necesarias : 833 / 500 = 2 instancias

Tráfico pico x10 : 200,000 visitantes/min = 3,333 req/sec
Instancias necesarias : 3,333 / 500 = 7 instancias (redondeado)

Mínimo recomendado : 2 (HA Multi-AZ)
Máximo recomendado : 10 (margen de seguridad)

Desired initial : 2

Ejercicio 2.2 : Elección de la Política​

¿Qué política(s) de escalado recomienda y por qué?

Política¿Apropiada?Justificación
Target Tracking CPU??
Target Tracking Requests??
Scheduled??
Step Scaling??
💡 Solución
Política¿Apropiada?Justificación
Target Tracking CPU⚠️ ParcialÚtil pero CPU no siempre correlacionado con las solicitudes
Target Tracking Requests✅ SÍDirectamente relacionado con el tráfico de usuarios
Scheduled⚠️ ParcialPatrones día/noche predecibles, pero no las breaking news
Step Scaling✅ SÍRespuesta rápida a picos repentinos

Recomendación: Combinar Target Tracking (requests) + Scheduled (base)

Ejercicio 2.3 : Configuración Launch Template​

Complete la configuración del Launch Template:

# Launch Template Configuration
LaunchTemplateName: newsportal-lt

# A completar:
AMI: _______________
InstanceType: _______________
SecurityGroupIds:
- _______________
KeyName: _______________
UserData: |
#!/bin/bash
_______________
_______________
_______________
💡 Solución
LaunchTemplateName: newsportal-lt

AMI: ami-0123456789 (Amazon Linux 2, preconfigurado)
InstanceType: t3.medium
SecurityGroupIds:
- sg-web-servers
KeyName: newsportal-key
UserData: |
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
# O despliegue de la app vía CodeDeploy
aws s3 cp s3://newsportal-deploy/latest.tar.gz /tmp/
tar -xzf /tmp/latest.tar.gz -C /var/www/html/

Ejercicio 2.4 : Configuración ASG​

Complete la configuración del Auto Scaling Group:

AutoScalingGroupName: newsportal-asg

# Capacidad
MinSize: ___
MaxSize: ___
DesiredCapacity: ___

# Red (mínimo 2 AZ)
VPCZoneIdentifier:
- _______________
- _______________

# Health Checks
HealthCheckType: _______________
HealthCheckGracePeriod: ___

# Target Group
TargetGroupARNs:
- _______________
💡 Solución
AutoScalingGroupName: newsportal-asg

MinSize: 2
MaxSize: 10
DesiredCapacity: 2

VPCZoneIdentifier:
- subnet-private-az-a
- subnet-private-az-b

HealthCheckType: ELB # Usa los health checks del ALB
HealthCheckGracePeriod: 300 # 5 minutos para iniciar la app

TargetGroupARNs:
- arn:aws:elasticloadbalancing:...:targetgroup/newsportal-tg/xxx

Parte 3 : Configuración de Políticas​

Ejercicio 3.1 : Target Tracking​

Cree una política Target Tracking para mantener 1000 solicitudes por destino:

# Complete el comando
aws autoscaling put-scaling-policy \
--auto-scaling-group-name newsportal-asg \
--policy-name _______________ \
--policy-type _______________ \
--target-tracking-configuration '{
"TargetValue": ___,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "_______________",
"ResourceLabel": "app/newsportal-alb/xxx/targetgroup/newsportal-tg/yyy"
},
"ScaleOutCooldown": ___,
"ScaleInCooldown": ___
}'
💡 Solución
aws autoscaling put-scaling-policy \
--auto-scaling-group-name newsportal-asg \
--policy-name request-target-tracking \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 1000.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ALBRequestCountPerTarget",
"ResourceLabel": "app/newsportal-alb/xxx/targetgroup/newsportal-tg/yyy"
},
"ScaleOutCooldown": 60,
"ScaleInCooldown": 300
}'

Ejercicio 3.2 : Scheduled Scaling​

Configure el escalado programado para los patrones día/noche:

# Morning scale up (8h UTC, Lun-Vie)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name _______________ \
--recurrence "_______________ " \
--min-size ___ \
--max-size ___

# Evening scale down (22h UTC, todos los días)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name _______________ \
--recurrence "_______________" \
--min-size ___ \
--max-size ___
💡 Solución
# Morning scale up (8h UTC, Lun-Vie)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name morning-scale-up \
--recurrence "0 8 * * MON-FRI" \
--min-size 3 \
--max-size 10

# Evening scale down (22h UTC, todos los días)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name evening-scale-down \
--recurrence "0 22 * * *" \
--min-size 2 \
--max-size 5

Parte 4 : Monitoreo y Alertas​

Ejercicio 4.1 : CloudWatch Dashboard​

Liste las métricas esenciales a monitorear:

MétricaNamespaceUmbral de Alerta
?AWS/EC2?
?AWS/ApplicationELB?
?AWS/AutoScaling?
?Custom?
💡 Solución
MétricaNamespaceUmbral de Alerta
CPUUtilizationAWS/EC2> 80%
TargetResponseTimeAWS/ApplicationELB> 500ms
RequestCountAWS/ApplicationELBsolo informativo
HealthyHostCountAWS/ApplicationELB< 2
GroupDesiredCapacityAWS/AutoScalingsolo informativo
GroupInServiceInstancesAWS/AutoScaling< min
HTTPCode_Target_5XX_CountAWS/ApplicationELB> 10/min

Ejercicio 4.2 : Alerta de Scaling​

Cree una alerta SNS para notificar durante eventos de escalado:

# 1. Crear el topic SNS
aws sns create-topic --name _______________

# 2. Suscribirse por email
aws sns subscribe \
--topic-arn arn:aws:sns:...:_______________ \
--protocol email \
--notification-endpoint _______________

# 3. Configurar las notificaciones ASG
aws autoscaling put-notification-configuration \
--auto-scaling-group-name newsportal-asg \
--topic-arn arn:aws:sns:...:_______________ \
--notification-types \
"autoscaling:EC2_INSTANCE_LAUNCH" \
"autoscaling:EC2_INSTANCE_TERMINATE" \
"_______________"
💡 Solución
# 1. Crear el topic SNS
aws sns create-topic --name newsportal-scaling-alerts

# 2. Suscribirse por email
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:newsportal-scaling-alerts \
--protocol email \
--notification-endpoint ops@newsportal.com

# 3. Configurar las notificaciones ASG
aws autoscaling put-notification-configuration \
--auto-scaling-group-name newsportal-asg \
--topic-arn arn:aws:sns:us-east-1:123456789:newsportal-scaling-alerts \
--notification-types \
"autoscaling:EC2_INSTANCE_LAUNCH" \
"autoscaling:EC2_INSTANCE_TERMINATE" \
"autoscaling:EC2_INSTANCE_LAUNCH_ERROR"

Parte 5 : Pruebas de Validación​

Plan de Pruebas​

PruebaMétodoResultado Esperado
Scale OutGenerar cargaNuevas instancias en < 5 min
Scale InDetener cargaReducción después del cooldown
FailoverTerminar instanciaReemplazo automático
Health CheckDetener appInstancia marcada unhealthy

Script de Prueba de Carga​

#!/bin/bash
# test-load.sh - Simular un pico de tráfico

ALB_DNS="newsportal-alb-xxx.region.elb.amazonaws.com"
DURATION=300 # 5 minutos
CONCURRENCY=100

echo "Iniciando prueba de carga..."
echo "URL: http://$ALB_DNS"
echo "Duración: $DURATION segundos"
echo "Concurrencia: $CONCURRENCY"

# Usar Apache Bench o hey
hey -z ${DURATION}s -c $CONCURRENCY http://$ALB_DNS/

echo "Prueba finalizada. Verifique CloudWatch y ASG."

Checklist de Validación​

┌─────────────────────────────────────────────────────────────┐
│ CHECKLIST VALIDACIÓN │
├─────────────────────────────────────────────────────────────┤
│ │
│ ☐ Scale out funciona (nuevas instancias) │
│ ☐ Scale in funciona (instancias terminadas) │
│ ☐ Health checks ALB detectan las fallas │
│ ☐ Instancias unhealthy reemplazadas automáticamente │
│ ☐ Notificaciones SNS recibidas │
│ ☐ Métricas visibles en CloudWatch │
│ ☐ Acciones programadas respetadas │
│ ☐ Tiempo de respuesta mantenido < 500ms bajo carga │
│ │
└─────────────────────────────────────────────────────────────┘

Entregable Final​

Documento a Entregar​

  1. Arquitectura de Auto Scaling (diagrama)
  2. Configuración completa (Launch Template + ASG)
  3. Políticas de escalado (Target Tracking + Scheduled)
  4. Plan de monitoreo (métricas + alertas)
  5. Resultados de las pruebas (capturas de pantalla de CloudWatch)

Criterios de Evaluación​

CriterioPuntos
Dimensionamiento correcto/15
Configuración ASG completa/25
Políticas adaptadas al escenario/20
Monitoreo y alertas/15
Pruebas documentadas/15
Calidad del documento/10
Total/100

Semana siguiente : MODULE 10 - Route 53