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.
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.
Sin IaC:
Con IaC: terraform apply y la infraestructura completa se recrea en minutos.
| Enfoque | Descripción | Herramientas |
|---|---|---|
| Declarativo | Describes el estado deseado, la herramienta calcula cómo llegar | Terraform, CloudFormation, Kubernetes YAML |
| Imperativo | Describes los pasos a ejecutar en orden | Scripts 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")La infraestructura inmutable elimina configuration drift por diseño.
| Herramienta | Tipo | Cloud | Lenguaje | Estado |
|---|---|---|---|---|
| Terraform | Provisioning | Multi-cloud | HCL | Remote state |
| OpenTofu | Provisioning | Multi-cloud | HCL | Remote state |
| Pulumi | Provisioning | Multi-cloud | TS, Python, Go | Managed/self-hosted |
| AWS CDK | Provisioning | AWS | TS, Python, Java | CloudFormation |
| CloudFormation | Provisioning | AWS | YAML/JSON | AWS-managed |
| Ansible | Config mgmt | Agnostic | YAML | Stateless |
| Crossplane | Provisioning | Multi-cloud | YAML (K8s CRDs) | Kubernetes |
infra/
├── modules/
│ ├── networking/
│ ├── compute/
│ └── database/
├── environments/
│ ├── dev/
│ ├── staging/
│ └── production/
├── .github/workflows/
│ └── terraform.yml
└── README.md
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.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
}
}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
}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# .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| Nivel | Herramienta | Qué valida |
|---|---|---|
| Lint | terraform validate, tflint | Sintaxis y convenciones |
| Static | Checkov, tfsec, Trivy | Seguridad y compliance |
| Unit | Terratest, terraform test | Lógica de módulos |
| Integration | Terratest | Infraestructura real temporal |
| Policy | OPA, Sentinel | Políticas organizacionales |
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.
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.
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.
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.
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.
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.
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.
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.
Módulos Terraform reutilizables para gestionar contenedores Docker y AWS ECS Fargate, con ejemplos progresivos y testing local con LocalStack.
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.
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».
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.
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.
Herramienta de Infrastructure as Code de HashiCorp que permite definir, provisionar y gestionar infraestructura multi-cloud mediante archivos declarativos en HCL.
Modelo donde los equipos de desarrollo pueden aprovisionar y gestionar infraestructura de forma autónoma mediante interfaces automatizadas, sin depender de tickets a operaciones.
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.
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.
Gestor de paquetes para Kubernetes que simplifica la instalación y gestión de aplicaciones complejas mediante charts reutilizables y configurables.
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.
Framework open-source de AWS para construir aplicaciones serverless con una sintaxis simplificada de CloudFormation, CLI para desarrollo local y despliegue integrado.
Servicio de almacenamiento de objetos de AWS con durabilidad del 99.999999999%, escalabilidad ilimitada y múltiples clases de almacenamiento para optimizar costos.
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.
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.
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.