AWS CloudFormation: Infraestructura como Código
Gestiona tu infraestructura AWS de forma declarativa con templates y stacks de CloudFormation.
AWS CloudFormation te permite modelar y aprovisionar recursos de AWS y de terceros de manera programática usando plantillas. Es el servicio principal de Infraestructura como Código (IaC) de AWS.
1¿Qué es Infraestructura como Código?
Infraestructura como Código (IaC) es la práctica de gestionar infraestructura mediante archivos de definición en lugar de configuración manual.
Beneficios:
- Reproducibilidad: Crear entornos idénticos fácilmente
- Versionado: Usar Git para controlar cambios
- Documentación: El código ES la documentación
- Automatización: Despliegues consistentes y rápidos
- Revisión: Code reviews para cambios de infraestructura
Sin IaC:
- Ir a la consola AWS
- Hacer clic en crear EC2
- Configurar manualmente cada opción
- Repetir para cada recurso...
- ¿Cómo lo recreo? 🤔
Con IaC:
- Escribir template
- Ejecutar:
aws cloudformation deploy - ¡Infraestructura creada! ✅
2Conceptos de CloudFormation
Template (Plantilla):
- Archivo JSON o YAML
- Define los recursos a crear
- Es el "plano" de tu infraestructura
Stack:
- Conjunto de recursos creados desde un template
- Se gestiona como una unidad
- Crear, actualizar, eliminar stack = afecta todos sus recursos
Resources:
- Componentes de AWS a crear
- EC2, S3, VPC, Lambda, etc.
- 800+ tipos de recursos soportados
Parameters:
- Inputs personalizables
- Valores diferentes por ambiente (dev, prod)
Outputs:
- Valores exportados del stack
- IDs, URLs, ARNs para usar en otros stacks
Mappings:
- Valores fijos basados en condiciones
- AMI IDs por región, por ejemplo
# Ejemplo básico de template
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Simple S3 Bucket'
Parameters:
BucketName:
Type: String
Description: Nombre del bucket
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref BucketName
Outputs:
BucketArn:
Value: !GetAtt MyS3Bucket.Arn3Cómo Funciona CloudFormation
Flujo de trabajo:
- Escribir template: Define recursos en YAML/JSON
- Crear stack: Subir template a CloudFormation
- CloudFormation procesa: Analiza dependencias
- Creación de recursos: En orden correcto
- Stack activo: Recursos listos para usar
Actualizaciones:
- Modificar template y actualizar stack
- CloudFormation calcula los cambios (Change Set)
- Aplica solo lo necesario
Eliminación:
- Eliminar stack = eliminar todos sus recursos
- Orden inverso de creación
- Limpieza completa garantizada
Detección de drift:
- CloudFormation detecta cambios manuales
- Compara estado actual vs template
- Ayuda a mantener consistencia
4Funciones Intrínsecas
CloudFormation incluye funciones para hacer templates dinámicos:
!Ref
- Referencia a un parámetro o recurso
BucketName: !Ref MyParameter
!GetAtt
- Obtiene atributo de un recurso
BucketArn: !GetAtt MyBucket.Arn
!Sub
- Sustitución de variables en strings
Name: !Sub '${AWS::StackName}-bucket'
!Join
- Une strings con un delimitador
Value: !Join ['-', [prefix, !Ref Env, suffix]]
!If
- Condicionales
InstanceType: !If [IsProd, t3.large, t3.micro]
!ImportValue
- Importa outputs de otros stacks
VpcId: !ImportValue NetworkStack-VpcId
5Mejores Prácticas
Organización:
- Un stack por servicio/aplicación
- Stacks anidados para componentes reutilizables
- Separar networking, compute, database
Seguridad:
- Usar parámetros NoEcho para secretos
- Mejor aún: integrar con Secrets Manager
- IAM roles específicos para CloudFormation
Control de cambios:
- Siempre revisar Change Sets antes de aplicar
- Usar rollback automático en caso de falla
- Habilitar termination protection en producción
Mantenibilidad:
- Usar YAML sobre JSON (más legible)
- Comentar secciones complejas
- Nombres descriptivos para recursos
- Versionado en Git
Validación:
# Validar template antes de deploy
aws cloudformation validate-template \
--template-body file://template.yaml
Usa Change Sets para ver qué cambiará antes de aplicar actualizaciones en producción.
6CloudFormation vs Otras Herramientas
CloudFormation vs Terraform:
| Aspecto | CloudFormation | Terraform |
|---|---|---|
| Proveedor | Solo AWS | Multi-cloud |
| Lenguaje | YAML/JSON | HCL |
| Estado | Gestionado por AWS | Archivo local/remoto |
| Costo | Gratis | Open source (Enterprise pago) |
| Módulos | StackSets, Nested | Modules |
CloudFormation vs CDK:
- CDK (Cloud Development Kit): Escribir infraestructura en código real (TypeScript, Python, Java)
- CDK genera templates de CloudFormation
- Mejor para desarrolladores que prefieren lenguajes de programación
CloudFormation vs SAM:
- SAM (Serverless Application Model): Extensión de CloudFormation
- Simplifica definición de Lambda, API Gateway, DynamoDB
- Transforma a CloudFormation estándar
Cuándo usar CloudFormation:
- Todo-AWS es tu estrategia
- Quieres integración nativa completa
- Equipos familiarizados con YAML/JSON
Puntos Clave para el Examen
- CloudFormation es IaC nativo de AWS usando templates YAML/JSON
- Stacks agrupan recursos que se gestionan como una unidad
- Los templates definen recursos, parámetros, outputs y mappings
- Change Sets muestran qué cambiará antes de aplicar actualizaciones
- Eliminar un stack elimina automáticamente todos sus recursos