MÓDULO 15 - Infrastructure as Code (CloudFormation)
Visión General
Esta última semana introduce la Infrastructure as Code (IaC) con AWS CloudFormation. Aprenderá a definir su infraestructura en archivos de configuración versionables y reproducibles.
Proyecto Final
este módulo incluye el Proyecto Final (30%): creación de una plantilla CloudFormation completa.
¡LocalStack Soporta CloudFormation!
LocalStack emula CloudFormation (básico). ¡Podrá probar sus plantillas localmente!
Objetivos de Aprendizaje
- Comprender los principios de la Infrastructure as Code
- Escribir plantillas CloudFormation (YAML)
- Desplegar y gestionar stacks
- Diagnosticar errores de despliegue
- Aplicar buenas prácticas de IaC
Contenido de la Semana
1. ¿Por qué Infrastructure as Code?
┌─────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE AS CODE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ANTES (Manual) DESPUÉS (IaC) │
│ ────────────── ────────── │
│ │
│ • Clics en la consola • Archivos de código │
│ • Documentación obsoleta • Código = Documentación │
│ • "Funcionaba ayer..." • Reproducible │
│ • Entornos diferentes • Idénticos │
│ • Difícil de auditar • Control de versiones │
│ • Rollback manual • Rollback automático │
│ │
│ Beneficios: │
│ ✅ Reproducibilidad ✅ Versionado (Git) │
│ ✅ Consistencia ✅ Revisión de código │
│ ✅ Automatización ✅ Rollback fácil │
│ ✅ Documentación viva ✅ Pruebas posibles │
│ │
└─────────────────────────────────────────────────────────────┘
2. CloudFormation - Conceptos
┌─────────────────────────────────────────────────────────────┐
│ AWS CLOUDFORMATION │
├─────────────────────────────────────────────────────────────┤
│ │
│ TEMPLATE (YAML/JSON) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AWSTemplateFormatVersion: '2010-09-09' │ │
│ │ Description: Mi infraestructura │ │
│ │ │ │
│ │ Parameters: │ │
│ │ Environment: │ │
│ │ Type: String │ │
│ │ │ │
│ │ Resources: │ │
│ │ MyVPC: │ │
│ │ Type: AWS::EC2::VPC │ │
│ │ Properties: │ │
│ │ CidrBlock: 10.0.0.0/16 │ │
│ │ │ │
│ │ Outputs: │ │
│ │ VPCId: │ │
│ │ Value: !Ref MyVPC │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ STACK │ │
│ │ (Conjunto de recursos creados) │ │
│ │ │ │
│ │ VPC ─── Subnet ─── Security Group ─── EC2 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
3. Estructura de una Plantilla
AWSTemplateFormatVersion: '2010-09-09'
Description: Plantilla base para el curso AWS
# Parámetros de entrada
Parameters:
EnvironmentName:
Type: String
Default: dev
AllowedValues:
- dev
- staging
- prod
# Recursos a crear
Resources:
# VPC
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-vpc
# Subnet Pública
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-public-subnet
# Salidas
Outputs:
VPCId:
Description: ID del VPC creado
Value: !Ref MyVPC
Export:
Name: !Sub ${EnvironmentName}-vpc-id
4. Funciones Intrínsecas Útiles
| Función | Uso | Ejemplo |
|---|---|---|
!Ref | Referencia un recurso/parámetro | !Ref MyVPC |
!Sub | Sustitución de variables | !Sub ${AWS::StackName}-vpc |
!GetAtt | Atributo de un recurso | !GetAtt MyEC2.PublicIp |
!Join | Concatena valores | !Join ['-', [a, b, c]] |
!If | Condición | !If [IsProd, m5.large, t3.micro] |
5. Laboratorio con LocalStack
# Desplegar un stack en LocalStack
awslocal cloudformation create-stack \
--stack-name mon-stack \
--template-body file://template.yaml \
--parameters ParameterKey=EnvironmentName,ParameterValue=dev
# Ver el estado
awslocal cloudformation describe-stacks \
--stack-name mon-stack
# Listar los recursos creados
awslocal cloudformation list-stack-resources \
--stack-name mon-stack
# Eliminar el stack
awslocal cloudformation delete-stack \
--stack-name mon-stack
Proyecto Final (30%)
Objetivo
Crear una plantilla CloudFormation que despliegue una arquitectura web simple:
- 1 VPC con subnet pública
- 1 Security Group (HTTP + SSH)
- 1 Instancia EC2 con user-data que instale un servidor web
Entregables
-
Plantilla CloudFormation (YAML)
- Bien estructurada y comentada
- Parámetros para el entorno
- Salidas útiles
-
Documentación
- Descripción de la arquitectura
- Instrucciones de despliegue
- Pruebas de validación
-
Demostración
- Despliegue en LocalStack
- Prueba de funcionamiento
- Preguntas/Respuestas
Tabla de Evaluación
| Criterio | Puntos |
|---|---|
| Plantilla válida y funcional | 10 |
| Buenas prácticas (params, outputs) | 5 |
| Documentación clara | 5 |
| Pruebas y validación | 5 |
| Demostración y P/R | 5 |
| Total | 30 |
Navegación
- Conceptos IaC y CloudFormation
- Quiz de Validación - 30 preguntas para validar sus conocimientos
- Lab: CloudFormation
🎓 ¡Felicidades!
¡Ha completado el curso Servicios de Cómputo AWS!
Competencias Adquiridas
- ✅ Conceptos de cloud y AWS
- ✅ EC2 y almacenamiento EBS
- ✅ Redes VPC y seguridad
- ✅ Alta disponibilidad y escalado
- ✅ Serverless con Lambda
- ✅ Monitoreo y observabilidad
- ✅ FinOps y optimización
- ✅ Infrastructure as Code
Próximos Pasos
- 📚 Certificaciones AWS (Cloud Practitioner, Solutions Architect)
- 🔧 Práctica en cuenta AWS real (Free Tier)
- 🚀 Proyectos personales
- 💼 Experiencia profesional
¡Le deseamos mucho éxito en su camino en la nube!