Región: us-east-1
Duración estimada: 35–55 minutos
Costo-riesgo: Medio
Certificación: AWS Certified Solutions Architect - Associate (SAA-C03)
Dominio: Design Secure Architectures
Tarea 1.2: Design secure workloads and applications
Caso de uso
La plataforma de Digital Café Luna venía bastante estable… hasta que se les ocurrió hacer un evento especial de fin de semana. El tráfico sube, la aplicación empieza a sentirse lenta y Camilo se da cuenta que una sola instancia no es suficiente.
La Sra. Blanca no entiende de escalamiento vertical y horizontal, ella solo quiere algo:
“Que el sistema no se caiga justo cuando más estamos vendiendo.”
Este laboratorio es el salto de un servidor único a un baseline más realista: Application Load Balancer, Auto Scaling Group y CloudFront trabajando juntos para absorber variaciones de tráfico.
No vamos a montar una arquitectura perfecta y mucho menos lista para producción.
¿Qué vamos a construir?
En este laboratorio vas a crear:
- Un Application Load Balancer como punto de entrada.
- Un Target Group para enrutar tráfico hacia instancias EC2.
- Un Launch Template con una app básica en NGINX.
- Un Auto Scaling Group con capacidad mínima distribuida en dos subnets.
- Una distribución de CloudFront apuntando al ALB.
- Validaciones del flujo
Usuario → CloudFront → ALB → EC2. - Cleanup completo.
Figura 1 — CloudFront recibe la solicitud, la envía al ALB y el ALB distribuye tráfico hacia instancias EC2 administradas por Auto Scaling.
Nota de alcance
Usaremos la default VPC para hacer las cosas mas simple y enfocarnos en el objetivo principal.
En labs posteriores podemos madurar esto con SSM Session Manager, HTTPS end-to-end, WAF y controles más finos. Por ahora queremos entender el flujo base y verlo funcionando.
Ojo: en este baseline el ALB seguirá siendo público. CloudFront estará delante, pero no vamos a restringir todavía el ALB para aceptar tráfico únicamente desde CloudFront.
Convención de nombres
| Recurso | Nombre |
|---|---|
| ALB | saa-lab1-alb |
| Target Group | saa-lab1-tg |
| Launch Template | saa-lab1-lt |
| Auto Scaling Group | saa-lab1-asg |
| Security Group ALB | saa-lab1-alb-sg |
| Security Group App/EC2 | saa-lab1-app-sg |
| CloudFront Distribution | saa-lab1-cf |
| Tag estándar |
Name=<recurso> y Lab=saa-lab1
|
Requisitos previos
- Región
us-east-1. - Permisos para EC2, Load Balancing, Auto Scaling y CloudFront.
- Default VPC disponible.
- Acceso a AWS Console y CloudShell o AWS CLI local.
Paso 1 — Identificar VPC y subnets
Necesitamos una VPC y al menos dos subnets en AZ distintas.
En AWS Console:
- Ve a VPC → Your VPCs.
- Verifica que estás en
us-east-1. - Usa la Default VPC.
- Ve a VPC → Subnets.
- Identifica dos subnets en AZ distintas, por ejemplo
us-east-1ayus-east-1b.
Checkpoint
Valida que:
- Tienes una VPC en
us-east-1. - Identificaste dos subnets en AZ distintas.
Paso 2 — Crear Security Groups
Crearemos dos Security Groups: uno para el ALB y otro para las instancias de aplicación.
Desde la consola
Security Group del ALB
-
Name:
saa-lab1-alb-sg -
Inbound: HTTP
80desde0.0.0.0/0 - Outbound: default
-
Tags:
Name=saa-lab1-alb-sg,Lab=saa-lab1
Security Group App/EC2
-
Name:
saa-lab1-app-sg -
Inbound: HTTP
80desde el Security Group del ALB - Outbound: default
-
Tags:
Name=saa-lab1-app-sg,Lab=saa-lab1
Mosca con esto: las instancias no deben recibir HTTP directo desde Internet, el tráfico debe entrar por el ALB.

Figura 2 — Security Group del ALB.

Figura 3 — Security Group App/EC2.
Checkpoint
Valida que:
- El ALB SG permite HTTP desde Internet.
- El App SG permite HTTP solo desde el SG del ALB.
Paso 3 — Crear Target Group, Launch Template y Auto Scaling Group
El ALB enruta tráfico hacia un Target Group. El Auto Scaling Group registra ahí sus instancias.
Crear Target Group
En AWS Console:
- Ve a EC2 → Target Groups → Create target group.
-
Target type:
Instances -
Name:
saa-lab1-tg -
Protocol/Port:
HTTP : 80 - VPC: default VPC
-
Health check path:
/ - Tags:
Name=saa-lab1-tg,Lab=saa-lab1
Crear Launch Template
En EC2 → Launch Templates → Create launch template:
-
Name:
saa-lab1-lt - AMI: Amazon Linux 2023
-
Instance type:
t3.nanoot3.micro - Key pair: None
- Subnet: Don’t include
-
Security group:
saa-lab1-app-sg - Auto-assign public IP: Enable
- Tags:
Name=saa-lab1-lt,Lab=saa-lab1
User data:
#!/bin/bash
set -euo pipefail
dnf -y update
dnf -y install nginx
cat > /usr/share/nginx/html/index.html << HTML
<!doctype html>
<html>
<head><meta charset="utf-8"><title>Digital Cafe Luna</title></head>
<body>
<h2>Digital Cafe Luna - OK</h2>
<p>Host: $(hostname)</p>
<p>Time: $(date -u)</p>
</body>
</html>
HTML
systemctl enable --now nginx
Crear Auto Scaling Group
En EC2 → Auto Scaling groups → Create:
-
Name:
saa-lab1-asg -
Launch template:
saa-lab1-lt - VPC: default VPC
- Subnets: dos subnets en AZ distintas
-
Attach to load balancer: Existing target group →
saa-lab1-tg - Health checks: ELB
- Grace period: 60–120s
- Desired: 2
- Min: 2
- Max: 4
- Tags:
Name=saa-lab1-asg,Lab=saa-lab1

Figura 6 — Auto Scaling groups.
Checkpoint
Valida que:
- El ASG tiene dos instancias.
- El Target Group muestra targets healthy.
- Las instancias solo reciben HTTP desde el ALB SG.
Paso 4 — Crear el Application Load Balancer
Ahora crearemos el ALB, que será el origin de CloudFront y distribuirá tráfico al Target Group.
En AWS Console:
- Ve a EC2 → Load Balancers → Create load balancer.
- Selecciona Application Load Balancer.
-
Name:
saa-lab1-alb - Scheme: Internet-facing
- IP address type: IPv4
- VPC: default VPC
- Mappings: dos subnets en AZ distintas
-
Security Group:
saa-lab1-alb-sg -
Listener: HTTP
80 -
Default action: Forward to
saa-lab1-tg
Checkpoint
Valida que:
- El ALB está
Active. - El listener HTTP
80envía tráfico asaa-lab1-tg. - El DNS del ALB muestra
Digital Cafe Luna - OK.
Paso 5 — Crear CloudFront delante del ALB
Vamos a poner CloudFront delante del ALB para mostrar cómo una distribución global puede servir como entrada de la aplicación.
En este lab la carga no justifica CloudFront por sí sola, el objetivo de configurarlo es meramente didáctico.
Desde la consola
Ve a CloudFront → Distributions → Create distribution.
-
Plan:
Pay as you go -
Distribution name:
saa-lab1-cf -
Description:
Digital Cafe Luna - scaling baseline -
Distribution type:
Single website or app -
Domain: vacío, usaremos
xxxxx.cloudfront.net - Origin type: Elastic Load Balancer
- Origin: DNS del ALB
- Origin protocol policy: HTTP only
- HTTP port: 80
- Cache settings: recommended/default
- Security protections: deja lo incluido
- Rate limiting: apagado para este lab
Ojo:
Pay as you gono significa “gratis”. CloudFront puede generar costos por requests, transferencia y uso. Haz el cleanup y no pasa nada.Ojo:
HTTP onlyfunciona porque el ALB escucha por HTTP. En producción, la mejora natural sería HTTPS end-to-end.
Checkpoint
Valida que:
- La distribución pasa de
DeployingaEnabled. - Tienes un dominio tipo
xxxxx.cloudfront.net. - Al abrir
https://xxxxx.cloudfront.net, vesDigital Cafe Luna - OK.
Paso 6 — Validación final
Confirma el flujo completo:
Usuario → CloudFront → ALB → Target Group → EC2 en Auto Scaling Group
Desde tu terminal:
CF_DOMAIN="xxxxx.cloudfront.net"
curl -I "https://$CF_DOMAIN"
curl "https://$CF_DOMAIN"
Checkpoint
Valida que:
- CloudFront responde.
- El ALB sigue activo.
- El Target Group tiene targets healthy.
- La página muestra
Digital Cafe Luna - OK.
Clean up completo — SAA-Lab1
Elimina los recursos en este orden:
-
CloudFront
- Disable distribución
saa-lab1-cf - Espera que despliegue el cambio
- Delete distribution
- Disable distribución
-
Auto Scaling
- ASG
saa-lab1-asg: Desired/Min = 0 - Delete ASG
- Delete Launch Template
saa-lab1-lt
- ASG
-
Load Balancing
- Delete ALB
saa-lab1-alb - Delete Target Group
saa-lab1-tg
- Delete ALB
-
Security Groups
- Delete
saa-lab1-app-sg - Delete
saa-lab1-alb-sg
- Delete
Si un Security Group aparece “in use”, espera 2–3 minutos. Puede quedar una ENI pendiente.
Troubleshooting rápido
- CloudFront da 504 pero el ALB responde: revisa el origin protocol. Si el ALB es HTTP, el origin debe usar HTTP.
- Targets unhealthy: revisa user data, NGINX y que el App SG permita HTTP 80 desde el ALB SG.
- CloudFront queda Deploying: paciencia. Puede tardar varios minutos.
- SG in use al borrar: espera 2–3 minutos y reintenta.
Well-Architected lens: ¿Qué aplicamos aquí?
- Reliability: ALB + health checks + ASG para tolerar fallos y sostener capacidad.
- Performance Efficiency: CloudFront ayuda a reducir latencia y carga directa al origin.
- Operational Excellence: naming, tags y checkpoints hacen el lab repetible.
- Cost Optimization: arquitectura mínima y cleanup completo.
- Security: las instancias no reciben tráfico directo desde Internet.
Resultado esperado
Al final del lab, Camilo cuenta con un baseline real de escalamiento para Digital Café Luna: un endpoint global con CloudFront, un origin estable con ALB y capacidad elástica con Auto Scaling Group.
Referencias oficiales
- Application Load Balancers
- Auto Scaling Groups
- Launch Templates
- CloudFront distributions
- Use an Application Load Balancer as a CloudFront origin
¿Qué viene en el próximo lab?
Camilo escuchó en su última clase el concepto de Data Protection y se quedó con esa sensación típica:
“La teoría está buena, pero quiero verlo funcionando.”
En el próximo laboratorio vamos a aterrizarlo en Digital Café Luna con un caso simple: proteger facturas y reportes en Amazon S3.
Vamos a crear un bucket privado, habilitar SSE-KMS, usar una KMS key administrada por el cliente y aplicar políticas que obliguen el uso de HTTPS.
También validaremos la evidencia por CLI, para que Camilo entienda mejor cómo se ve el manejo de KMS en la práctica, cuándo un objeto queda cifrado con aws:kms, qué key lo protegió y cómo comprobarlo sin quedarnos solo con lo que dice la consola.
Nos vemos en el próximo laboratorio de Digital Café Luna.




Top comments (0)