Saltar al contenido
aprendeaws.dev

Módulo 10 · Operación y automatización/Lección 62

Infraestructura como código: CloudFormation y CDK

Describir la infraestructura en archivos que se versionan, se revisan y se despliegan igual cada vez.

Al terminar podrás

  • →Explicar los beneficios de la infraestructura como código
  • →Reconocer plantillas, stacks y conjuntos de cambios de CloudFormation
  • →Ubicar AWS CDK, Terraform y SST frente a CloudFormation

Crear una VPC con sus subredes, rutas, balanceador y base de datos a punta de clics toma una tarde. Repetirlo idéntico para el ambiente de pruebas, y luego en otra región, toma otra tarde cada vez, y nunca queda igual. Y seis meses después nadie recuerda por qué una casilla quedó marcada.

Infraestructura como código (IaC) significa describir tus recursos en archivos de texto y dejar que una herramienta los cree. El archivo es la fuente de verdad.

Por qué vale la pena

BeneficioQué ganas
RepetibleEl mismo archivo crea dev, pruebas y producción iguales, en cualquier región o cuenta
RevisableLos cambios pasan por un pull request antes de tocar producción
VersionadoGit guarda la historia: quién cambió qué, y cómo volver atrás
AutomatizableUn pipeline lo despliega sin pasos manualesVer despliegue continuo
Más barato de operarCreas un ambiente para una prueba y lo borras completo al terminar

Lo último conecta con la economía de la nube: menos trabajo manual, menos errores y nada de servidores olvidados que siguen cobrando. Es la idea de «tratar las operaciones como código» del pilar de excelencia operativa de Well-Architected.

CloudFormation: plantillas, stacks y conjuntos de cambios

AWS CloudFormation es el servicio nativo de IaC de AWS. Usarlo con recursos de AWS no tiene costo adicional: pagas los recursos que crea. Tiene tres piezas:

  • Plantilla (template): un archivo YAML o JSON que describe los recursos. La única sección obligatoria es Resources.
  • Stack: lo que nace al desplegar una plantilla. Se crea, se actualiza y se borra como una unidad: borrar el stack borra sus recursos.
  • Conjunto de cambios (change set): antes de actualizar, CloudFormation te muestra qué va a agregar, modificar o reemplazar. Lo revisas y luego lo ejecutas.

Así se ve una plantilla mínima: un bucket con versionado y una etiqueta que depende de un parámetro.

AWSTemplateFormatVersion: "2010-09-09"
Description: Bucket para los reportes del conjunto

Parameters:
  Ambiente:
    Type: String
    AllowedValues: [dev, prod]

Resources:
  BucketReportes:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
      Tags:
        - Key: ambiente
          Value: !Ref Ambiente

Outputs:
  NombreDelBucket:
    Value: !Ref BucketReportes
  1. 1

    Escribe la plantilla

    Y guárdala en Git junto al código de la aplicación.
  2. 2

    Crea el stack

    Desde la consola o con aws cloudformation deploy. CloudFormation resuelve el orden: primero la VPC, luego las subredes.
  3. 3

    Cambia con un change set

    Editas la plantilla, revisas el conjunto de cambios y lo ejecutas. Si algo falla, CloudFormation revierte al estado anterior.
  4. 4

    Detecta el desvío

    La detección de drift compara el stack con los recursos reales y te dice qué se cambió a mano.

Para desplegar la misma plantilla en muchas cuentas y regiones a la vez existe CloudFormation StackSets. Es típico para dejar en cada cuenta nueva de la organización un rol de auditoría o un trail.

CDK, Terraform y SST

Escribir YAML a mano se vuelve largo. AWS CDK (Cloud Development Kit) te deja definir la infraestructura con un lenguaje de programación: TypeScript, Python, Java, C# o Go. Usas bucles, funciones y componentes reutilizables, y el comando cdk synth genera una plantilla de CloudFormation que se despliega como cualquier stack.

const bucket = new s3.Bucket(this, "BucketReportes", {
  versioned: true,
});

Fuera de AWS también hay opciones. Terraform, de HashiCorp, usa su propio lenguaje (HCL), guarda su propio archivo de estado y no pasa por CloudFormation; sirve para AWS y para otras nubes y servicios. SST es un framework para aplicaciones que define la infraestructura en TypeScript; este sitio se despliega con SST.

CriterioCloudFormationAWS CDKTerraformSST
LenguajeYAML o JSONTypeScript, Python, Java, C#, GoHCLTypeScript
Quién lo mantieneAWSAWS (código abierto)HashiCorpProyecto de código abierto
Dónde vive el estadoEn el stack, dentro de AWSEn CloudFormationEn un archivo de estado que tú guardasLo administra SST en tu cuenta
AlcanceSolo AWSSolo AWSMuchas nubes y serviciosEnfocado en aplicaciones

Quiz

Pon a prueba lo que aprendiste

0 de 5 correctas · 5 sin responder

  1. 1.Una empresa necesita crear entornos idénticos de prueba y producción en dos regiones, sin errores manuales. ¿Qué servicio usa?

  2. 2.¿Qué muestra un conjunto de cambios (change set) de CloudFormation?

  3. 3.Un equipo de desarrolladores quiere definir su infraestructura en TypeScript y desplegarla con CloudFormation. ¿Qué usa?

  4. 4.Alguien cambió a mano un recurso creado por un stack. ¿Qué función de CloudFormation lo detecta?

  5. 5.¿Cuál es un beneficio de la infraestructura como código en la economía de la nube?