Saltar al contenido principal

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ónUsoEjemplo
!RefReferencia un recurso/parámetro!Ref MyVPC
!SubSustitución de variables!Sub ${AWS::StackName}-vpc
!GetAttAtributo de un recurso!GetAtt MyEC2.PublicIp
!JoinConcatena valores!Join ['-', [a, b, c]]
!IfCondició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​

  1. Plantilla CloudFormation (YAML)

    • Bien estructurada y comentada
    • Parámetros para el entorno
    • Salidas útiles
  2. Documentación

    • Descripción de la arquitectura
    • Instrucciones de despliegue
    • Pruebas de validación
  3. Demostración

    • Despliegue en LocalStack
    • Prueba de funcionamiento
    • Preguntas/Respuestas

Tabla de Evaluación​

CriterioPuntos
Plantilla válida y funcional10
Buenas prácticas (params, outputs)5
Documentación clara5
Pruebas y validación5
Demostración y P/R5
Total30
  1. Conceptos IaC y CloudFormation
  2. Quiz de Validación - 30 preguntas para validar sus conocimientos
  3. 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!