July 31, 2025

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ónDescripción
Crear infraestructura completaRedes, instancias, buckets, funciones Lambda, etc.
Automatizar desplieguesEntornos reproducibles, consistentes y versionados
Orquestar recursos dependientesDefine orden de creación automáticamente
Reutilizar plantillasUso de parámetros, mappings, condiciones y módulos
Integración con CI/CDPuede 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

ComponenteDescripción
ResourcesObligatorio. Define los recursos a crear (EC2, S3, Lambda, VPC, etc.).
ParametersValores personalizados que puedes pasar al crear el stack.
OutputsValores que se exportan del stack (ej. ARN, IP pública, etc.).
MappingsTablas de búsqueda (ej. AMIs por región).
ConditionsCondiciones para crear recursos según valores definidos.
MetadataDatos adicionales para herramientas o usuarios.
TransformPara 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

  1. CREATE_IN_PROGRESS

  2. CREATE_COMPLETE

  3. UPDATE_IN_PROGRESS

  4. UPDATE_COMPLETE

  5. DELETE_IN_PROGRESS

  6. DELETE_COMPLETE

  7. 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étodoDescripción
Consola AWSInterfaz gráfica, rápida para pruebas.
AWS CLI / SDKIdeal para automatización (ej: aws cloudformation deploy).
CI/CDIntegración con CodePipeline, GitHub Actions, Jenkins, etc.
SAM / CDKFrameworks que compilan a CloudFormation (más amigables y programáticos).

📂 Formatos soportados

FormatoDescripción
YAMLRecomendado por su legibilidad
JSONMá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 usoCómo CloudFormation ayuda
Entornos replicablesMisma infraestructura en dev, test, prod
Migraciones y DRPlantillas exportables entre cuentas y regiones
Automatización CI/CDInfraestructura y aplicaciones se despliegan juntas
Gobernanza y controlEstandarización y validación de infraestructura

💡 Funciones intrínsecas

FunciónUso
!RefReferencia a un parámetro o recurso
!GetAttObtiene atributos (como IP pública, ARN, etc.)
!JoinConcatena strings
!SubInterpola variables en un string (tipo ${Var})
!IfCondicional dentro de la plantilla
!ImportValueImporta outputs desde otro stack
!FindInMapAccede a valores en Mappings
!Select / !SplitOperaciones 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

ServicioRelación con CloudFormation
AWS CDKInfraestructura como código en lenguajes como TypeScript, Python
AWS SAMFramework simplificado para apps serverless
StackSetsDespliegue de una plantilla en múltiples cuentas y regiones
Change SetsVista previa de los cambios que una actualización producirá
Drift DetectionDetecta diferencias entre plantilla y estado real

🎓 Preguntas tipo certificación (SAA-C03)

  1. ¿Qué servicio te permite crear recursos de infraestructura usando archivos YAML o JSON?

    • AWS CloudFormation
  2. ¿Cuál es la mejor forma de automatizar el despliegue de infraestructura replicable?

    • Infraestructura como Código (IaC) usando CloudFormation
  3. ¿Cómo puedes ver lo que cambiará en un stack antes de aplicarlo?

    • Change Set
  4. ¿Puedes usar CloudFormation para desplegar una app en varias cuentas?

    • ✅ Sí, con StackSets