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.
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
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
Escribe la plantilla
Y guárdala en Git junto al código de la aplicación. - 2
Crea el stack
Desde la consola o conaws cloudformation deploy. CloudFormation resuelve el orden: primero la VPC, luego las subredes. - 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
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.
| Criterio | Terraform | SST | ||
|---|---|---|---|---|
| Lenguaje | YAML o JSON | TypeScript, Python, Java, C#, Go | HCL | TypeScript |
| Quién lo mantiene | AWS | AWS (código abierto) | HashiCorp | Proyecto de código abierto |
| Dónde vive el estado | En el stack, dentro de AWS | En CloudFormation | En un archivo de estado que tú guardas | Lo administra SST en tu cuenta |
| Alcance | Solo AWS | Solo AWS | Muchas nubes y servicios | Enfocado en aplicaciones |
Quiz
Pon a prueba lo que aprendiste
0 de 5 correctas · 5 sin responder
1.Una empresa necesita crear entornos idénticos de prueba y producción en dos regiones, sin errores manuales. ¿Qué servicio usa?
2.¿Qué muestra un conjunto de cambios (change set) de CloudFormation?
3.Un equipo de desarrolladores quiere definir su infraestructura en TypeScript y desplegarla con CloudFormation. ¿Qué usa?
4.Alguien cambió a mano un recurso creado por un stack. ¿Qué función de CloudFormation lo detecta?
5.¿Cuál es un beneficio de la infraestructura como código en la economía de la nube?