CloudFormation
📘 ¿Qué es AWS CloudFormation?
AWS CloudFormation es un servicio que permite definir y aprovisionar infraestructura en la nube de AWS usando archivos declarativos en formato YAML o JSON.
-
Tipo: Infraestructura como Código (IaC)
-
Modelo: Declarativo → tú describes qué quieres y AWS se encarga de cómo hacerlo.
-
Evita configuraciones manuales → facilita automatización, replicación y control de versiones.
🧩 ¿Qué puedes hacer con CloudFormation?
| Acción | Descripción |
|---|---|
| Crear infraestructura completa | Redes, instancias, buckets, funciones Lambda, etc. |
| Automatizar despliegues | Entornos reproducibles, consistentes y versionados |
| Orquestar recursos dependientes | Define orden de creación automáticamente |
| Reutilizar plantillas | Uso de parámetros, mappings, condiciones y módulos |
| Integración con CI/CD | Puede usarse con CodePipeline, GitOps, Terraform, etc. |
📦 Estructura de una plantilla (template) YAML
AWSTemplateFormatVersion: '2010-09-09'
Description: Plantilla básica de ejemplo
Parameters:
InstanceType:
Type: String
Default: t3.micro
Resources:
MiInstancia:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
ImageId: ami-0abcdef1234567890
Outputs:
InstanciaID:
Description: ID de la instancia
Value: !Ref MiInstancia
📘 Componentes clave
| Componente | Descripción |
|---|---|
| Resources | Obligatorio. Define los recursos a crear (EC2, S3, Lambda, VPC, etc.). |
| Parameters | Valores personalizados que puedes pasar al crear el stack. |
| Outputs | Valores que se exportan del stack (ej. ARN, IP pública, etc.). |
| Mappings | Tablas de búsqueda (ej. AMIs por región). |
| Conditions | Condiciones para crear recursos según valores definidos. |
| Metadata | Datos adicionales para herramientas o usuarios. |
| Transform | Para incluir plantillas externas o usar macros (como AWS::Serverless-2016-10-31). |
⚙️ ¿Qué es un Stack?
-
Es una instancia de una plantilla: representa una colección de recursos que CloudFormation administra como una unidad.
-
Puedes crear, actualizar y eliminar el stack completo con un solo comando.
🔁 Ciclo de vida de un Stack
-
CREATE_IN_PROGRESS
-
CREATE_COMPLETE
-
UPDATE_IN_PROGRESS
-
UPDATE_COMPLETE
-
DELETE_IN_PROGRESS
-
DELETE_COMPLETE
-
ROLLBACK_IN_PROGRESS / FAILED (si algo sale mal)
🧠 Puedes habilitar rollback automático o manual para revertir cambios fallidos.
🛠️ Métodos de creación
| Método | Descripción |
|---|---|
| Consola AWS | Interfaz gráfica, rápida para pruebas. |
| AWS CLI / SDK | Ideal para automatización (ej: aws cloudformation deploy). |
| CI/CD | Integración con CodePipeline, GitHub Actions, Jenkins, etc. |
| SAM / CDK | Frameworks que compilan a CloudFormation (más amigables y programáticos). |
📂 Formatos soportados
| Formato | Descripción |
|---|---|
| YAML | Recomendado por su legibilidad |
| JSON | Más estricto pero ampliamente usado |
🔐 Seguridad
-
Los recursos creados deben tener permisos adecuados mediante IAM.
-
Puedes usar IAM policies, roles y permisos condicionales.
-
Evita hardcodear secretos → usa SSM Parameter Store o Secrets Manager en la plantilla.
🧪 Casos de uso comunes
| Caso de uso | Cómo CloudFormation ayuda |
|---|---|
| Entornos replicables | Misma infraestructura en dev, test, prod |
| Migraciones y DR | Plantillas exportables entre cuentas y regiones |
| Automatización CI/CD | Infraestructura y aplicaciones se despliegan juntas |
| Gobernanza y control | Estandarización y validación de infraestructura |
💡 Funciones intrínsecas
| Función | Uso |
|---|---|
!Ref | Referencia a un parámetro o recurso |
!GetAtt | Obtiene atributos (como IP pública, ARN, etc.) |
!Join | Concatena strings |
!Sub | Interpola variables en un string (tipo ${Var}) |
!If | Condicional dentro de la plantilla |
!ImportValue | Importa outputs desde otro stack |
!FindInMap | Accede a valores en Mappings |
!Select / !Split | Operaciones sobre listas |
📊 Monitoreo y control
-
CloudFormation Events: Registro paso a paso del proceso.
-
CloudTrail: Audita quién creó/modificó/eliminó un stack.
-
Stack Policies: Permiten proteger recursos específicos de modificaciones.
💸 Costos
-
CloudFormation es gratuito.
-
Solo pagas por los recursos que despliegues (EC2, S3, Lambda, etc.).
-
Algunos servicios asociados (CodePipeline, AWS Config) sí tienen costo.
🧠 Buenas prácticas
-
Usa YAML, es más legible y fácil de mantener.
-
Divide en módulos o plantillas pequeñas y reutilizables.
-
Usa parámetros, outputs y exports para conectar stacks (stack sets).
-
Controla cambios con Stack Change Sets antes de aplicar.
-
Usa AWS Config o Guard para validar conformidad.
-
Incluye comentarios y documenta bien tus plantillas.
-
Controla versiones de plantillas en Git.
📘 Servicios relacionados
| Servicio | Relación con CloudFormation |
|---|---|
| AWS CDK | Infraestructura como código en lenguajes como TypeScript, Python |
| AWS SAM | Framework simplificado para apps serverless |
| StackSets | Despliegue de una plantilla en múltiples cuentas y regiones |
| Change Sets | Vista previa de los cambios que una actualización producirá |
| Drift Detection | Detecta diferencias entre plantilla y estado real |
🎓 Preguntas tipo certificación (SAA-C03)
-
¿Qué servicio te permite crear recursos de infraestructura usando archivos YAML o JSON?
- ✅ AWS CloudFormation
-
¿Cuál es la mejor forma de automatizar el despliegue de infraestructura replicable?
- ✅ Infraestructura como Código (IaC) usando CloudFormation
-
¿Cómo puedes ver lo que cambiará en un stack antes de aplicarlo?
- ✅ Change Set
-
¿Puedes usar CloudFormation para desplegar una app en varias cuentas?
- ✅ Sí, con StackSets