⚖️
Load Balancing y Auto Scaling
Balanceadores de carga y escalado automático
⏱️ Tiempo estimado de lectura: 20 minutos
Elastic Load Balancer - Introducción
Los load balancers distribuyen el tráfico entrante entre múltiples targets (instancias EC2, containers, IPs) en una o más Availability Zones.
Tipos de ELB:
- Application Load Balancer (ALB): Capa 7 (HTTP/HTTPS), routing basado en contenido
- Network Load Balancer (NLB): Capa 4 (TCP/UDP/TLS), ultra alto rendimiento
- Gateway Load Balancer (GWLB): Capa 3 (IP), para appliances virtuales
- Classic Load Balancer (CLB): Legacy, capa 4 y 7 (no recomendado)
Beneficios:
- Alta disponibilidad automática multi-AZ
- Health checks para detectar instancias no saludables
- SSL/TLS termination
- Separación de tráfico público/privado
- Escalado automático de capacidad
- Integración con servicios AWS (Auto Scaling, CloudWatch, Route53)
Tipos de ELB:
- Application Load Balancer (ALB): Capa 7 (HTTP/HTTPS), routing basado en contenido
- Network Load Balancer (NLB): Capa 4 (TCP/UDP/TLS), ultra alto rendimiento
- Gateway Load Balancer (GWLB): Capa 3 (IP), para appliances virtuales
- Classic Load Balancer (CLB): Legacy, capa 4 y 7 (no recomendado)
Beneficios:
- Alta disponibilidad automática multi-AZ
- Health checks para detectar instancias no saludables
- SSL/TLS termination
- Separación de tráfico público/privado
- Escalado automático de capacidad
- Integración con servicios AWS (Auto Scaling, CloudWatch, Route53)
Puntos Clave
- ✓ Load Balancers son managed por AWS (HA, scaling automático)
- ✓ ALB para HTTP/HTTPS, NLB para TCP/UDP extremo rendimiento
- ✓ Health checks determinan si target puede recibir tráfico
- ✓ ELB solo funciona en una región (no cross-region)
- ✓ Targets pueden estar en múltiples AZ (recomendado)
Application Load Balancer (ALB)
ALB opera en la capa 7 (HTTP/HTTPS) y permite routing avanzado basado en contenido.
Características:
- Target Groups: Agrupa targets (EC2, ECS, Lambda, IP)
- Routing rules: Basado en path, hostname, query strings, headers
- Soporte HTTP/2 y WebSocket
- Redirects: HTTP a HTTPS automático
- Fixed response: Respuestas estáticas sin backend
Routing avanzado:
- Path-based: /api/* → Target Group A, /images/* → Target Group B
- Hostname-based: api.example.com → TG A, www.example.com → TG B
- Query string: ?platform=mobile → TG Mobile
- Headers: User-Agent: iPhone → TG iOS
Casos de uso:
- Microservicios y aplicaciones basadas en containers
- Lambda functions como targets
- Múltiples aplicaciones en mismas instancias (diferentes paths)
- Routing inteligente basado en contenido de request
Características:
- Target Groups: Agrupa targets (EC2, ECS, Lambda, IP)
- Routing rules: Basado en path, hostname, query strings, headers
- Soporte HTTP/2 y WebSocket
- Redirects: HTTP a HTTPS automático
- Fixed response: Respuestas estáticas sin backend
Routing avanzado:
- Path-based: /api/* → Target Group A, /images/* → Target Group B
- Hostname-based: api.example.com → TG A, www.example.com → TG B
- Query string: ?platform=mobile → TG Mobile
- Headers: User-Agent: iPhone → TG iOS
Casos de uso:
- Microservicios y aplicaciones basadas en containers
- Lambda functions como targets
- Múltiples aplicaciones en mismas instancias (diferentes paths)
- Routing inteligente basado en contenido de request
Puntos Clave
- ✓ ALB puede routear a múltiples target groups
- ✓ Health checks se configuran a nivel de target group
- ✓ Soporta SSL/TLS termination con certificados ACM
- ✓ Connection draining evita requests fallidos durante scaling
- ✓ X-Forwarded-For header contiene IP original del cliente
Network Load Balancer (NLB)
NLB opera en capa 4 (TCP/UDP/TLS) y está diseñado para manejar millones de requests por segundo con latencia ultra-baja.
Características:
- Ultra alto rendimiento: Millones RPS, latencia <100μs
- IP estática: Una IP elástica por AZ
- Preserva IP origen: Targets ven IP real del cliente
- Protocolos: TCP, UDP, TLS
- Zonal isolation: Fallo de AZ no afecta otras AZ
Diferencias con ALB:
- NLB = Capa 4 (no ve contenido HTTP)
- ALB = Capa 7 (routing basado en HTTP)
- NLB tiene latencia mucho menor
- NLB preserva IP origen (ALB usa X-Forwarded-For)
- NLB soporta IP estática (ALB solo DNS)
Casos de uso:
- Gaming (baja latencia crítica)
- IoT (millones de conexiones TCP)
- Aplicaciones que requieren IP estática
- Tráfico extremo no-HTTP (ej: bases de datos)
Características:
- Ultra alto rendimiento: Millones RPS, latencia <100μs
- IP estática: Una IP elástica por AZ
- Preserva IP origen: Targets ven IP real del cliente
- Protocolos: TCP, UDP, TLS
- Zonal isolation: Fallo de AZ no afecta otras AZ
Diferencias con ALB:
- NLB = Capa 4 (no ve contenido HTTP)
- ALB = Capa 7 (routing basado en HTTP)
- NLB tiene latencia mucho menor
- NLB preserva IP origen (ALB usa X-Forwarded-For)
- NLB soporta IP estática (ALB solo DNS)
Casos de uso:
- Gaming (baja latencia crítica)
- IoT (millones de conexiones TCP)
- Aplicaciones que requieren IP estática
- Tráfico extremo no-HTTP (ej: bases de datos)
Puntos Clave
- ✓ NLB para rendimiento extremo y latencia ultra-baja
- ✓ ALB para routing inteligente HTTP/HTTPS
- ✓ NLB tiene IP estática, ideal para whitelisting
- ✓ Security Groups no se aplican a NLB (solo en targets)
- ✓ NLB puede routear a targets fuera de AWS (on-prem via IP)
SSL/TLS en Load Balancers
Los Load Balancers pueden terminar SSL/TLS, descifrando tráfico HTTPS y enviando HTTP a targets.
SSL Termination:
- Listener HTTPS: LB descifra tráfico entrante
- Backend HTTP: Tráfico LB → Targets sin cifrar (red AWS privada)
- Backend HTTPS: End-to-end encryption (más CPU)
Gestión de certificados:
- AWS Certificate Manager (ACM): Certificados gratuitos, renovación automática
- Import: Subir certificado de terceros
- SNI (Server Name Indication): Múltiples certificados SSL en mismo listener
SNI (Server Name Indication):
- Permite múltiples sitios HTTPS con diferentes certificados
- Cliente indica hostname en SSL handshake
- LB selecciona certificado correcto
- Soportado por: ALB, NLB, CloudFront (NO Classic LB)
Políticas SSL:
- Defines qué protocolos y cifrados se permiten
- Recomendado: TLS 1.2+, deshabilitar SSL 3.0, TLS 1.0, TLS 1.1
SSL Termination:
- Listener HTTPS: LB descifra tráfico entrante
- Backend HTTP: Tráfico LB → Targets sin cifrar (red AWS privada)
- Backend HTTPS: End-to-end encryption (más CPU)
Gestión de certificados:
- AWS Certificate Manager (ACM): Certificados gratuitos, renovación automática
- Import: Subir certificado de terceros
- SNI (Server Name Indication): Múltiples certificados SSL en mismo listener
SNI (Server Name Indication):
- Permite múltiples sitios HTTPS con diferentes certificados
- Cliente indica hostname en SSL handshake
- LB selecciona certificado correcto
- Soportado por: ALB, NLB, CloudFront (NO Classic LB)
Políticas SSL:
- Defines qué protocolos y cifrados se permiten
- Recomendado: TLS 1.2+, deshabilitar SSL 3.0, TLS 1.0, TLS 1.1
Puntos Clave
- ✓ SSL termination reduce carga CPU en instancias backend
- ✓ ACM proporciona certificados gratuitos con renovación automática
- ✓ SNI permite múltiples dominios con diferentes certificados
- ✓ Classic LB: un certificado por LB (sin SNI)
- ✓ ALB/NLB: múltiples certificados con SNI
Auto Scaling Groups (ASG)
Auto Scaling Groups automáticamente ajustan el número de instancias EC2 según demanda.
Componentes:
- Launch Template/Configuration: Define qué lanzar (AMI, tipo, storage, SG)
- Min/Max/Desired Capacity: Límites de escalado
- Scaling Policies: Cuándo y cómo escalar
- Health Checks: EC2 (default) o ELB (recomendado)
Tipos de Scaling:
Manual Scaling:
- Cambiar desired capacity manualmente
Scheduled Scaling:
- Basado en patrones predecibles (ej: aumentar a las 9am)
Dynamic Scaling:
- Target Tracking: Mantener métrica en valor target (ej: CPU 50%)
- Step Scaling: Escalar en pasos según alarmas CloudWatch
- Simple Scaling: Legacy, un cambio por alarma con cooldown
Predictive Scaling:
- ML predice tráfico futuro
- Provisiona instancias proactivamente
Componentes:
- Launch Template/Configuration: Define qué lanzar (AMI, tipo, storage, SG)
- Min/Max/Desired Capacity: Límites de escalado
- Scaling Policies: Cuándo y cómo escalar
- Health Checks: EC2 (default) o ELB (recomendado)
Tipos de Scaling:
Manual Scaling:
- Cambiar desired capacity manualmente
Scheduled Scaling:
- Basado en patrones predecibles (ej: aumentar a las 9am)
Dynamic Scaling:
- Target Tracking: Mantener métrica en valor target (ej: CPU 50%)
- Step Scaling: Escalar en pasos según alarmas CloudWatch
- Simple Scaling: Legacy, un cambio por alarma con cooldown
Predictive Scaling:
- ML predice tráfico futuro
- Provisiona instancias proactivamente
Puntos Clave
- ✓ ASG es gratis, solo pagas por instancias lanzadas
- ✓ Launch Template es más nuevo y flexible que Launch Configuration
- ✓ ELB health checks reemplazan instancias que fallan health check
- ✓ Cooldown period previene escalado excesivo (default 300s)
- ✓ Target Tracking es el más simple y recomendado
💻 Creación de Auto Scaling Group
# Crear Launch Template
aws ec2 create-launch-template \n --launch-template-name mi-template \n --version-description v1 \n --launch-template-data '{
"ImageId": "ami-0c55b159cbfafe1f0",
"InstanceType": "t3.micro",
"SecurityGroupIds": ["sg-0123456789abcdef0"]
}'
# Crear Auto Scaling Group
aws autoscaling create-auto-scaling-group \n --auto-scaling-group-name mi-asg \n --launch-template LaunchTemplateName=mi-template \n --min-size 1 --max-size 5 --desired-capacity 2 \n --vpc-zone-identifier "subnet-aaa,subnet-bbb" \n --target-group-arns arn:aws:elasticloadbalancing:...