Jonatan Matajonmatum.com
conceptosnotasexperimentosensayos
© 2026 Jonatan Mata. All rights reserved.v2.1.1
Conceptos

AWS CloudFormation

Servicio nativo de AWS para definir y aprovisionar infraestructura como código usando plantillas YAML o JSON, con gestión de estado y rollback automático.

evergreen#aws#cloudformation#iac#yaml#provisioning#devops

¿Qué es?

AWS CloudFormation es el servicio nativo de infraestructura como código de AWS que permite definir recursos de infraestructura mediante plantillas declarativas en YAML o JSON. A diferencia de herramientas imperativas, CloudFormation gestiona el estado completo de la infraestructura, creando, actualizando y eliminando recursos en el orden correcto según las dependencias definidas.

El servicio actúa como un motor de orquestación que traduce las plantillas en llamadas a las APIs de AWS, manteniendo un registro del estado actual y proporcionando rollback automático cuando las operaciones fallan. Esta capacidad de gestión de estado diferencia CloudFormation de scripts de aprovisionamiento tradicionales, ya que entiende las relaciones entre recursos y puede realizar cambios incrementales de forma segura.

CloudFormation es la base tecnológica sobre la que se construyen herramientas como AWS CDK y AWS SAM, que generan plantillas CloudFormation como output final. Comprender CloudFormation es fundamental para diagnosticar problemas en cualquier herramienta de IaC en AWS.

Anatomía de una plantilla

Una plantilla CloudFormation típica contiene varias secciones que definen la infraestructura:

AWSTemplateFormatVersion: '2010-09-09'
Description: 'API serverless con Lambda y DynamoDB'
 
Parameters:
  Environment:
    Type: String
    Default: dev
    AllowedValues: [dev, staging, prod]
 
Resources:
  UserTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: !Sub 'users-${Environment}'
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH
 
  UserFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: !Sub 'user-api-${Environment}'
      Runtime: nodejs20.x
      Handler: index.handler
      Code:
        ZipFile: |
          exports.handler = async (event) => {
            return { statusCode: 200, body: 'Hello World' };
          };
      Environment:
        Variables:
          TABLE_NAME: !Ref UserTable
 
  ApiGateway:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: !Sub 'user-api-${Environment}'
      EndpointConfiguration:
        Types: [REGIONAL]
 
Outputs:
  ApiEndpoint:
    Description: 'API Gateway endpoint URL'
    Value: !Sub 'https://${ApiGateway}.execute-api.${AWS::Region}.amazonaws.com/prod'
    Export:
      Name: !Sub '${AWS::StackName}-ApiEndpoint'

Este ejemplo muestra conceptos clave como parámetros para reutilización, funciones intrínsecas como !Sub y !Ref para referencias dinámicas, y outputs para exponer valores a otros stacks.

Patrones avanzados

Nested Stacks

Para proyectos complejos, CloudFormation permite dividir la infraestructura en stacks anidados, mejorando la modularidad y reutilización:

NetworkStack:
  Type: AWS::CloudFormation::Stack
  Properties:
    TemplateURL: https://s3.amazonaws.com/templates/network.yaml
    Parameters:
      VpcCidr: 10.0.0.0/16
      Environment: !Ref Environment
 
ApplicationStack:
  Type: AWS::CloudFormation::Stack
  DependsOn: NetworkStack
  Properties:
    TemplateURL: https://s3.amazonaws.com/templates/application.yaml
    Parameters:
      VpcId: !GetAtt NetworkStack.Outputs.VpcId
      SubnetIds: !GetAtt NetworkStack.Outputs.PrivateSubnetIds

StackSets para multi-cuenta

StackSets permite desplegar la misma infraestructura across múltiples cuentas AWS y regiones desde una cuenta central, esencial para organizaciones con arquitecturas multi-cuenta:

# Desplegado via StackSet en múltiples cuentas
SecurityBaselineStack:
  Resources:
    CloudTrail:
      Type: AWS::CloudTrail::Trail
      Properties:
        IsLogging: true
        S3BucketName: !Sub 'audit-logs-${AWS::AccountId}'
        IncludeGlobalServiceEvents: true
        
    GuardDutyDetector:
      Type: AWS::GuardDuty::Detector
      Properties:
        Enable: true
        FindingPublishingFrequency: FIFTEEN_MINUTES

Drift Detection

CloudFormation incluye drift detection para identificar cambios manuales realizados fuera del stack:

# Detectar drift en un stack
aws cloudformation detect-stack-drift --stack-name my-stack
 
# Ver detalles del drift
aws cloudformation describe-stack-resource-drifts --stack-name my-stack

El drift detection es crucial en entornos donde múltiples equipos pueden modificar recursos, ya que permite mantener la coherencia entre el estado declarado y el real.

CloudFormation vs Terraform

AspectoCloudFormationTerraform
ProveedorSolo AWSMulti-cloud (AWS, Azure, GCP)
LenguajeYAML/JSONHCL (HashiCorp Configuration Language)
Gestión de estadoGestionado por AWSArchivo local o backend remoto
CostoGratisGratis (open source), pago (Terraform Cloud)
Velocidad de adopciónInmediata para nuevos servicios AWSRetraso en soporte de nuevos servicios
DebuggingCloudFormation Events en consolaPlan/apply output y state inspection
RollbackAutomático en fallosManual con terraform apply previo
ModularidadNested stacks, cross-stack referencesModules con registry público
TestingLimitado, principalmente cfn-lintTerratest, kitchen-terraform

La elección entre CloudFormation y Terraform depende principalmente de si necesitas multi-cloud (Terraform) o si prefieres integración nativa con AWS (CloudFormation). Para organizaciones AWS-first, CloudFormation ofrece ventajas en tiempo de adopción de nuevos servicios y integración con herramientas AWS.

Limitaciones y consideraciones

CloudFormation tiene limitaciones técnicas importantes que afectan el diseño de arquitecturas:

  • Límite de 500 recursos por stack: Requiere dividir infraestructura compleja en múltiples stacks
  • Límite de 200 outputs por stack: Limita la información que se puede exponer entre stacks
  • Tiempo de despliegue: Operaciones síncronas pueden ser lentas para recursos complejos como RDS
  • Rollback limitado: Algunos recursos no soportan rollback automático (ej: S3 buckets con contenido)
  • Cobertura de servicios: Nuevos servicios AWS pueden tardar en tener soporte completo

Estas limitaciones requieren patrones específicos como stack splitting, uso de custom resources para funcionalidad no soportada, y estrategias de rollback manual para recursos críticos.

¿Por qué importa?

CloudFormation es el fundamento de la automatización de infraestructura en AWS y la base sobre la que se construyen CDK, SAM y otras herramientas de nivel superior. Incluso usando abstracciones, los errores de despliegue, problemas de drift y limitaciones de recursos se manifiestan a nivel de CloudFormation.

Para ingenieros staff+, dominar CloudFormation significa entender las capacidades y limitaciones reales de la automatización en AWS, poder diagnosticar problemas complejos de despliegue, y diseñar arquitecturas que aprovechen patrones como StackSets para governance multi-cuenta. La diferencia entre un script de aprovisionamiento y una solución de IaC robusta radica en la gestión de estado, rollback automático y capacidad de cambios incrementales que CloudFormation proporciona nativamente.

Referencias

  • AWS CloudFormation — AWS, 2024. Documentación oficial completa del servicio.
  • CloudFormation Best Practices — AWS, 2024. Mejores prácticas oficiales para plantillas y stacks.
  • Managing Stacks across Accounts and Regions with StackSets — AWS, 2024. Guía para despliegues multi-cuenta y multi-región.
  • Detect Unmanaged Configuration Changes with Drift Detection — AWS, 2024. Documentación sobre detección de cambios fuera de CloudFormation.
  • CloudFormation Template Reference Guide — AWS, 2024. Referencia completa de recursos y propiedades.
  • AWS CloudFormation Features — AWS, 2024. Características oficiales y capacidades del servicio.

Contenido relacionado

  • Infrastructure as Code

    Práctica de definir y gestionar infraestructura mediante archivos de configuración versionados en lugar de procesos manuales. Fundamento de la automatización moderna de operaciones.

  • AWS CDK

    Framework de infraestructura como código de AWS que permite definir recursos cloud usando lenguajes de programación como TypeScript, Python o Java, generando CloudFormation.

  • Terraform

    Herramienta de Infrastructure as Code de HashiCorp que permite definir, provisionar y gestionar infraestructura multi-cloud mediante archivos declarativos en HCL.

  • AWS SAM

    Framework open-source de AWS para construir aplicaciones serverless con una sintaxis simplificada de CloudFormation, CLI para desarrollo local y despliegue integrado.

Conceptos