Lección 17 de 20 · Lectura y práctica
Implementar Balanceo de Carga y Auto Scaling Groups
Concepto claveEl balanceo de carga y los Auto Scaling Groups son dos componentes fundamentales para construir infraestructura escalable en AWS. Imagina que tienes una tienda en línea: el balanceador de carga actúa como el.
Del concepto a la práctica
Taller de esta lección
El balanceador distribuye solicitudes entre destinos saludables; el Auto Scaling Group mantiene un número de instancias dentro de límites. Para evitar ambigüedad, define mínimo 2, deseado 2 y máximo 4 en el laboratorio. El grupo objetivo debe comprobar una ruta de salud y el grupo de seguridad debe permitir tráfico desde el balanceador.
Ejemplo resuelto
Con 2 instancias iniciales y una métrica que aumenta, el grupo puede crecer hasta 4; nunca debe reducirse por debajo de 2. En condiciones normales con destinos sanos, el balanceador enruta a los saludables; contempla el fail-open si todos fallan.
Pruébalo
Crea el grupo objetivo y define protocolo, puerto y ruta de salud.
Configura el balanceador en las subredes públicas.
Asocia una plantilla de lanzamiento al grupo automático en privadas.
Revisa que mínimo, deseado y máximo sean coherentes.
Error frecuente: permitir HTTP desde cualquier origen directamente a las instancias. Corrección: aceptar el puerto web desde el grupo de seguridad del balanceador y separar administración.
Ejercicio: calcula la capacidad posible para tres estados: normal, aumento y reducción.
Comprueba tu resultado
en el fixture explícito de acciones +2 y −3, la capacidad deseada se recorta a 2, 4 y 2; mantenimiento puede tener otras condiciones temporales.
Límites, política y renovación son funciones distintas
Min2/desired2/max4 limita capacidad deseada normal, pero no crea una política de escalado. Define por separado target tracking o pasos, su métrica/unidad y warmup. En el fixture de política, acciones+2 y−3 se recortan a4y2 desde2; una métrica que simplemente suba no prueba que vaya a alcanzar4.
El ALB usa listener→target group→destinos. Un destino unhealthy se excluye en operación normal con sanos, pero si todos están unhealthy, ALB puede hacer fail-open hacia ellos; «nunca envía» no es una garantía absoluta. El ASG necesita health_check_type adecuado para reaccionar a ELB además de checks EC2, con grace period compatible con arranque.
Actualizar el launch template no renueva automáticamente todas las instancias existentes. Fija la versión revisada y configura instance refresh/rollout, porcentaje saludable y warmup; $Latest añade selección móvil. Durante mantenimiento/refresh puede haber capacidad temporal fuera de la interpretación simplista del máximo normal. No prometas cero interrupciones sin medir salud y margen de capacidad. La AMI o user_data debe servir el endpoint de salud; si instala paquetes en una privada, diseña su salida o preconstruye la imagen. Instance refresh.

Mapa de prácticaEl proveedor opera la infraestructura física y el equipo administra sus datos y accesos. La responsabilidad del sistema y la aplicación cambia según el servicio elegido. Revisa la configuración y el contrato del servicio antes de asumir que una capa está cubierta.
Ver la infografía en tamaño completo ↗Concepto clave
El balanceo de carga y los Auto Scaling Groups son dos componentes fundamentales para construir infraestructura escalable en AWS. Imagina que tienes una tienda en línea: el balanceador de carga actúa como el recepcionista que distribuye a los clientes entre diferentes cajeros (instancias EC2) para evitar colas. Los Auto Scaling Groups son como un gerente que contrata o despide cajeros automaticamente segun la afluencia de clientes.
En AWS, el Application Load Balancer (ALB) es el servicio recomendado para aplicaciones web, ya que opera en la capa 7 (HTTP/HTTPS) y puede enrutar trafico basado en contenido. Los Auto Scaling Groups (ASG) gestionan un grupo de instancias EC2 que se escalan horizontalmente segun metricas como uso de CPU o solicitudes por instancia. Juntos, garantizan alta disponibilidad y tolerancia a fallos: si una instancia falla, el ALB deja de enviarle trafico y el ASG la reemplaza.
Como funciona en la practica
Vamos a desplegar una aplicacion web simple con Terraform. Primero, defines una VPC con subredes publicas y privadas. Luego, creas un ALB en las subredes publicas para recibir trafico de internet. El ALB se conecta a un grupo objetivo que apunta a las instancias EC2. Finalmente, configuras un ASG que lanza instancias en las subredes privadas y las registra automaticamente en el grupo objetivo del ALB.
Paso a paso: 1) Configura la red (VPC, subredes, Internet Gateway). 2) Crea un ALB con listeners HTTP/HTTPS. 3) Define un launch template con la AMI y user-data para la aplicacion. 4) Configura el ASG con politicas de escalado basadas en CloudWatch. 5) Prueba accediendo a la URL del ALB y simula carga con herramientas como Apache Bench.
Codigo en accion
A continuacion, un ejemplo funcional de Terraform para un ALB y ASG basico. Nota: asume que ya tienes una VPC configurada.
# resources.tf - ALB y ASG para aplicacion web
resource "aws_lb" "web_alb" {
name = "web-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.alb_sg.id]
subnets = var.public_subnet_ids
enable_deletion_protection = false
}
resource "aws_lb_target_group" "web_tg" {
name = "web-tg"
port = 80
protocol = "HTTP"
vpc_id = var.vpc_id
health_check {
path = "/"
interval = 30
timeout = 5
healthy_threshold = 2
unhealthy_threshold = 2
}
}
resource "aws_lb_listener" "web_listener" {
load_balancer_arn = aws_lb.web_alb.arn
port = 80
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.web_tg.arn
}
}
resource "aws_launch_template" "web_lt" {
name_prefix = "web-lt-"
image_id = "ami-0c55b159cbfafe1f0" # Amazon Linux 2
instance_type = "t3.micro"
user_data = base64encode(<<-EOF
#!/bin/bash
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "Hola desde $(hostname -f)
" > /var/www/html/index.html
EOF
)
network_interfaces {
associate_public_ip_address = false
security_groups = [aws_security_group.instance_sg.id]
}
}
resource "aws_autoscaling_group" "web_asg" {
name_prefix = "web-asg-"
vpc_zone_identifier = var.private_subnet_ids
target_group_arns = [aws_lb_target_group.web_tg.arn]
health_check_type = "ELB"
desired_capacity = 2
min_size = 2
max_size = 5
launch_template {
id = aws_launch_template.web_lt.id
version = "$Latest"
}
tag {
key = "Name"
value = "web-instance"
propagate_at_launch = true
}
}
Refactorizacion: antes, podrias haber usado aws_instance directamente, pero con aws_launch_template y aws_autoscaling_group, obtienes escalado automatico y actualizaciones sin interrupcion. Por ejemplo, para actualizar la AMI, modifica el launch template y Terraform creara nuevas instancias gradualmente.
Errores comunes
- Configurar health checks incorrectos: Si el path o puerto no coinciden con tu aplicacion, el ALB marcara las instancias como unhealthy. Solucion: Verifica que el endpoint de health check responda con 200 OK.
- Olvidar security groups: Sin reglas adecuadas, el ALB no podra comunicarse con las instancias. Solucion: Asegurate de que el security group del ALB permita trafico al puerto de las instancias y viceversa.
- No usar subredes multi-AZ: Desplegar todo en una sola zona de disponibilidad crea un punto unico de fallo. Solucion: Distribuye instancias y el ALB en al menos dos AZs.
- Ignorar politicas de escalado Dejar el ASG con configuraciones por defecto puede llevar a sobrecosto o baja performance. Solucion: Define metricas personalizadas como CPUUtilization o RequestCountPerTarget.
- Errores en user-data Scripts mal formados pueden evitar que las instancias se inicialicen correctamente. Solucion: Prueba el user-data en una instancia manualmente antes de integrarlo en Terraform.
Checklist de dominio
- Puedo explicar la diferencia entre un Application Load Balancer y un Network Load Balancer.
- He configurado un ALB con listeners HTTP y HTTPS (usando ACM para SSL).
- Se crear un launch template con user-data para automatizar el despliegue de aplicaciones.
- He definido politicas de escalado para un ASG basadas en metricas de CloudWatch.
- Puedo solucionar problemas de health checks entre el ALB y las instancias EC2.
- He implementado una arquitectura multi-AZ para alta disponibilidad.
- Se actualizar un ASG sin tiempo de inactividad usando launch templates.
Despliega una aplicacion web escalable con ALB y ASG usando Terraform
En este ejercicio, implementaras una infraestructura completa en AWS que incluya un Application Load Balancer y un Auto Scaling Group para una aplicacion web simple. Sigue estos pasos:
- Prepara el entorno: Crea un directorio para tu proyecto Terraform y un archivo
main.tf. Configura el provider de AWS con tu region preferida. - Define la red: Usa el modulo
aws_vpco crea recursos manualmente para una VPC con al menos dos subredes publicas y dos privadas en diferentes AZs. Asegurate de incluir un Internet Gateway y tablas de ruta. - Configura el ALB: Crea un Application Load Balancer en las subredes publicas. Define un target group con health checks en el puerto 80 y un listener HTTP.
- Crea el launch template: Define un launch template que use una AMI de Amazon Linux 2 e incluya user-data para instalar Apache y servir una pagina HTML basica.
- Implementa el ASG: Configura un Auto Scaling Group que use el launch template, se despliegue en las subredes privadas, y se registre automaticamente en el target group del ALB. Establece capacidad deseada en 2, minima en 1, y maxima en 3.
- Despliega y prueba: Ejecuta
terraform apply. Una vez completado, accede a la URL del ALB en tu navegador para ver la aplicacion. Usacurlo una herramienta similar para simular trafico y verificar que el balanceo funcione. - Limpia: Al finalizar, ejecuta
terraform destroypara eliminar todos los recursos y evitar costos innecesarios.
Pistas
- Recuerda que el ALB debe estar en subredes publicas con acceso a internet, mientras que las instancias del ASG pueden estar en subredes privadas.
- Usa la salida de Terraform (output) para obtener la URL del ALB facilmente despues del despliegue.
- Si las instancias no pasan los health checks, revisa los security groups y asegurate de que el user-data este ejecutandose correctamente.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con Terraform en AWS: Infraestructura como Código para DevOps
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.