Infraestructura como Código (IaC) y Automatización
La Infraestructura como Código (Infrastructure as Code o IaC) es una práctica clave de la ingeniería en la nube que permite definir, aprovisionar y gestionar recursos de infraestructura de forma repetible, automatizada y versionada mediante código y plantillas declarativas.
1. Beneficios de la Infraestructura como Código #
En lugar de crear servidores, bases de datos y redes haciendo clic manualmente en la consola web de AWS:
- Automatización y rapidez: Se pueden desplegar entornos enteros (desarrollo, staging, producción) en cuestión de minutos.
- Consistencia y reducción de errores humanos: Se garantiza que todos los entornos sean idénticos (cero discrepancias de configuración).
- Control de versiones: Las plantillas de infraestructura se almacenan en repositorios Git, permitiendo auditorías, revisiones de código (pull requests) y vuelta atrás (rollback).
2. AWS CloudFormation #
AWS CloudFormation es el servicio fundamental de Infraestructura como Código en AWS.
Conceptos clave de CloudFormation: #
- Plantilla (Template): Archivo de texto en formato JSON o YAML donde se describen los recursos de AWS que deseas crear (ej. una VPC, 2 instancias EC2 y una base de datos RDS) y sus propiedades de interconexión.
- Pila (Stack): El conjunto de recursos creados, actualizados o eliminados como una sola unidad atómica a partir de una plantilla. Si la creación de un recurso falla, CloudFormation realiza un rollback automático y devuelve el stack a su estado anterior.
- Detección de desviaciones (Drift Detection): Característica que identifica si alguien ha modificado manualmente un recurso de AWS fuera de la plantilla de CloudFormation.
1# Ejemplo básico de plantilla CloudFormation en YAML 2AWSTemplateFormatVersion: '2010-09-09' 3Description: 'Creación de un bucket S3 cifrado' 4Resources: 5 MiBucketSeguro: 6 Type: 'AWS::S3::Bucket' 7 Properties: 8 BucketEncryption: 9 ServerSideEncryptionConfiguration: 10 - ServerSideEncryptionByDefault: 11 SSEAlgorithm: 'AES256'
NOTE
AWS CloudFormation no tiene coste adicional por el servicio en sí; solo pagas por los recursos de AWS (EC2, S3, RDS) que la plantilla aprovisiona.
3. AWS Cloud Development Kit (AWS CDK) #
AWS CDK es un marco de desarrollo de software de código abierto que permite a los desarrolladores definir su infraestructura utilizando lenguajes de programación modernos y familiares.
¿Cómo funciona? #
- Escribes código en TypeScript, Python, Java, C# o Go.
- Aprovechas las ventajas de tu lenguaje: bucles, condicionales, clases, autocompletado del IDE y pruebas unitarias de infraestructura.
- Cuando ejecutas
cdk synth, el CDK compila tu código y genera automáticamente una plantilla estándar de AWS CloudFormation que luego se despliega en AWS.
4. AWS Serverless Application Model (AWS SAM) #
AWS SAM es un marco de código abierto optimizado específicamente para crear y desplegar aplicaciones Serverless (sin servidor) en AWS.
Características: #
- Extensión simplificada de CloudFormation con sintaxis abreviada para definir funciones AWS Lambda, APIs en Amazon API Gateway y tablas Amazon DynamoDB en pocas líneas de YAML.
- Proporciona la CLI de SAM (
sam local start-api), que permite emular y probar funciones Lambda localmente en tu ordenador usando Docker antes de desplegarlas en la nube.
5. Comparativa para el examen #
| Herramienta | Formato / Lenguaje | Propósito Principal |
|---|---|---|
| AWS CloudFormation | Declarativo (JSON o YAML) | Servicio nativo fundamental de IaC mediante Stacks |
| AWS CDK | Lenguajes de programación (TypeScript, Python, etc.) | Definir infraestructura con código y compilar a CloudFormation |
| AWS SAM | YAML abreviado + CLI local | Diseñar, probar localmente y desplegar apps Serverless |
| AWS Elastic Beanstalk | PaaS (Plataforma como Servicio) | Desplegar aplicaciones web sin configurar infraestructura base |
Resumen del tema
Conceptos clave #
- Infraestructura como Código (IaC): gestión reproducible y automatizada de recursos de nube mediante archivos de código versionados en Git.
- AWS CloudFormation: servicio declarativo central basado en plantillas YAML/JSON agrupadas en pilas atómicas (Stacks) con capacidad de Rollback y Drift Detection.
- AWS Cloud Development Kit (CDK): framework que permite usar TypeScript, Python o Java para definir infraestructura y sintetizarla a CloudFormation.
- AWS SAM: especificación abreviada y CLI local para acelerar el desarrollo y pruebas de aplicaciones Serverless (Lambda, API Gateway, DynamoDB).
Qué debes recordar #
AWS CloudFormation utiliza plantillas JSON/YAML para aprovisionar Stacks de recursos, AWS CDK permite programar infraestructura con TypeScript/Python y AWS SAM optimiza el desarrollo serverless con pruebas locales.