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

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.

evergreen#devops#iac#automation#cloud

Infrastructure as Code (IaC) es tratar la infraestructura exactamente como código: versionada en Git, revisada en PRs, testeada en CI, y aplicada de forma automatizada y reproducible.

¿Qué problema resuelve?

Sin IaC:

  • Snowflake servers — cada servidor es único, configurado a mano, imposible de reproducir
  • Configuration drift — los entornos divergen silenciosamente
  • Documentación desactualizada — el wiki dice una cosa, la realidad es otra
  • Auditoría imposible — ¿quién cambió qué, cuándo, por qué?
  • Disaster recovery lento — reconstruir manualmente toma horas o días

Con IaC: terraform apply y la infraestructura completa se recrea en minutos.

Enfoques

Declarativo vs imperativo

EnfoqueDescripciónHerramientas
DeclarativoDescribes el estado deseado, la herramienta calcula cómo llegarTerraform, CloudFormation, Kubernetes YAML
ImperativoDescribes los pasos a ejecutar en ordenScripts bash, Ansible (parcialmente), Pulumi
# Declarativo (Terraform) — "quiero esto"
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"
}
# Imperativo (Pulumi) — "haz esto"
server = aws.ec2.Instance("web",
    ami="ami-0c55b159cbfafe1f0",
    instance_type="t3.micro")

Mutable vs inmutable

  • Mutable — actualizar servidores existentes (Ansible, Chef, Puppet)
  • Inmutable — destruir y recrear (Terraform + AMIs, contenedores)

La infraestructura inmutable elimina configuration drift por diseño.

Herramientas principales

HerramientaTipoCloudLenguajeEstado
TerraformProvisioningMulti-cloudHCLRemote state
OpenTofuProvisioningMulti-cloudHCLRemote state
PulumiProvisioningMulti-cloudTS, Python, GoManaged/self-hosted
AWS CDKProvisioningAWSTS, Python, JavaCloudFormation
CloudFormationProvisioningAWSYAML/JSONAWS-managed
AnsibleConfig mgmtAgnosticYAMLStateless
CrossplaneProvisioningMulti-cloudYAML (K8s CRDs)Kubernetes

Principios fundamentales

1. Todo en Git

infra/
├── modules/
│   ├── networking/
│   ├── compute/
│   └── database/
├── environments/
│   ├── dev/
│   ├── staging/
│   └── production/
├── .github/workflows/
│   └── terraform.yml
└── README.md

2. Idempotencia

Aplicar el mismo código N veces produce el mismo resultado:

terraform apply   # Crea 3 instancias
terraform apply   # No changes. Infrastructure is up-to-date.
terraform apply   # No changes. Infrastructure is up-to-date.

3. State management

El estado es la fuente de verdad sobre qué existe:

# Backend remoto (compartido entre equipo)
terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

4. Módulos reutilizables

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.0.0"
 
  name = "production"
  cidr = "10.0.0.0/16"
 
  azs             = ["us-east-1a", "us-east-1b"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24"]
 
  enable_nat_gateway = true
}

5. Plan antes de apply

terraform plan    # Ver qué va a cambiar
# + aws_instance.web (create)
# ~ aws_security_group.web (modify)
# - aws_instance.old (destroy)
 
terraform apply   # Aplicar después de revisar

Pipeline de IaC

# .github/workflows/terraform.yml
name: Terraform
 
on:
  pull_request:
    paths: ['infra/**']
  push:
    branches: [main]
    paths: ['infra/**']
 
jobs:
  plan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v3
      - run: terraform init
      - run: terraform validate
      - run: terraform plan -out=plan.tfplan
      - uses: actions/upload-artifact@v4
        with:
          name: plan
          path: plan.tfplan
 
  apply:
    needs: plan
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v3
      - uses: actions/download-artifact@v4
        with:
          name: plan
      - run: terraform apply plan.tfplan

Testing de IaC

NivelHerramientaQué valida
Lintterraform validate, tflintSintaxis y convenciones
StaticCheckov, tfsec, TrivySeguridad y compliance
UnitTerratest, terraform testLógica de módulos
IntegrationTerratestInfraestructura real temporal
PolicyOPA, SentinelPolíticas organizacionales

Anti-patrones

  • ClickOps — crear recursos manualmente y luego «importarlos» como parche
  • Mega-state — toda la infra en un solo state file. Dividir por dominio/entorno.
  • Sin locks — dos personas aplicando simultáneamente corrompen el estado
  • Hardcoded values — usar variables y tfvars para parametrizar
  • Sin plan review — aplicar sin revisar el plan es como mergear sin code review
  • Ignorar drift — no detectar cambios manuales que divergen del código

¿Por qué importa?

Sin IaC, la infraestructura es conocimiento tácito que vive en la cabeza de quien la configuró. Con IaC, cada cambio es rastreable, revisable y reproducible. Es el fundamento sobre el que se construyen prácticas como GitOps, disaster recovery automatizado y self-service infrastructure.

Referencias

  • Infrastructure as Code, 2nd Edition — Kief Morris, 2020. El libro definitivo sobre IaC.
  • Terraform: Up & Running, 3rd Edition — Yevgeniy Brikman, 2022. Guía práctica de Terraform con patrones reales.
  • The Twelve-Factor App — Adam Wiggins, 2011. Principios de aplicaciones cloud-native que complementan IaC.
  • Terraform Best Practices — Anton Babenko, 2024. Guía comunitaria de mejores prácticas.
  • Pulumi Documentation — Pulumi, 2024. Documentación oficial de la alternativa imperativa.

Contenido relacionado

  • DevOps

    Cultura y conjunto de prácticas que unifican desarrollo (Dev) y operaciones (Ops) para entregar software con mayor velocidad, calidad y confiabilidad. No es un rol — es una forma de trabajar.

  • Prácticas DevOps

    Conjunto de prácticas técnicas y culturales que implementan los principios DevOps — desde Infrastructure as Code hasta blameless post-mortems. El «cómo» detrás de la filosofía.

  • CI/CD

    Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.

  • Serverless

    Modelo de computación en la nube donde el proveedor gestiona la infraestructura automáticamente, permitiendo ejecutar código sin aprovisionar ni administrar servidores, pagando solo por el uso real.

  • Optimización de Costos

    Prácticas y estrategias para minimizar el gasto en cloud sin sacrificar rendimiento, incluyendo right-sizing, reservas, spot instances y eliminación de recursos ociosos.

  • De prototipo a producción: un segundo cerebro serverless en AWS

    Diseño de arquitectura para escalar un segundo cerebro personal a un sistema de producción con AWS serverless — desde el prototipo actual hasta casos de uso especializados en legal, investigación y comunidad.

  • Construyendo un segundo cerebro en público

    Crónica de construir un segundo cerebro con grafo de conocimiento, pipeline bilingüe y endpoints para agentes — en días, no semanas, y lo que eso enseña sobre la brecha entre teoría y sistemas que funcionan.

  • Ejemplo de Terraform con Docker

    Módulos Terraform reutilizables para gestionar contenedores Docker y AWS ECS Fargate, con ejemplos progresivos y testing local con LocalStack.

  • Módulos Terraform para AWS Serverless

    Colección de 13 módulos Terraform publicados en el Terraform Registry para desplegar arquitecturas serverless en AWS, con 12 ejemplos que cubren desde ECS básico hasta CRUD full-stack con DynamoDB y AgentCore con MCP.

  • Segundo Cerebro Serverless

    Backend serverless de producción para un grafo de conocimiento personal — DynamoDB, Lambda, Bedrock, MCP, Step Functions. La implementación de la arquitectura descrita en el ensayo «Del prototipo a producción».

  • PR Auto-Approver

    GitHub App serverless que auto-aprueba pull requests después de que CI pasa, con revisión de código opcional vía Amazon Bedrock. Cinco repositorios: app TypeScript/Probot, módulo Terraform AWS (Lambda + API Gateway + Secrets Manager + SQS DLQ), módulo Terraform GitHub (webhooks), infra de despliegue y repo de pruebas.

  • Agente de Contenido con Strands y Bedrock

    Sistema de tres agentes que automatiza el ciclo de vida de contenido MDX bilingüe: auditoría QA determinística, correcciones quirúrgicas y upgrades completos — todo orquestado con Strands Agents, Claude Sonnet 4 en Amazon Bedrock y GitHub Actions con patrón diamante.

  • Terraform

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

  • Infraestructura de Autoservicio

    Modelo donde los equipos de desarrollo pueden aprovisionar y gestionar infraestructura de forma autónoma mediante interfaces automatizadas, sin depender de tickets a operaciones.

  • Políticas como Código

    Práctica de definir políticas de seguridad, compliance y gobernanza como código versionado y ejecutable, automatizando su verificación en pipelines de CI/CD.

  • OpenTofu

    Fork open source de Terraform mantenido por la Linux Foundation. Compatible con HCL y providers de Terraform, creado en respuesta al cambio de licencia de HashiCorp a BSL 1.1.

  • Helm

    Gestor de paquetes para Kubernetes que simplifica la instalación y gestión de aplicaciones complejas mediante charts reutilizables y configurables.

  • GitOps

    Práctica operacional que usa Git como fuente única de verdad para infraestructura y configuración, con reconciliación automática entre el estado deseado y el real.

  • AWS SAM

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

  • AWS S3

    Servicio de almacenamiento de objetos de AWS con durabilidad del 99.999999999%, escalabilidad ilimitada y múltiples clases de almacenamiento para optimizar costos.

  • AWS IAM

    Servicio de gestión de identidad y acceso de AWS que controla quién puede hacer qué en tu cuenta, con políticas granulares basadas en el principio de mínimo privilegio.

  • 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.

  • 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.

Conceptos