¿Qué es Terraform e Infraestructura como Código (IaC)?
Cómo desplegar servidores en AWS, redes virtuales y bases de datos completas usando código declarativo, versionado y reproducible.
Históricamente, para levantar la infraestructura de una empresa en la nube (servidores virtuales EC2, redes VPC, subredes, tablas de enrutamiento, balanceadores de carga y bases de datos administradas), un ingeniero debía ingresar a la consola web de AWS o Azure y hacer cientos de clics manuales en formularios. Este enfoque manual (llamado despectivamente *'ClickOps'*) es lento, imposible de auditar, propenso a errores humanos catastróficos y si el datacenter se cae, reconstruirlo a mano toma semanas. **Infraestructura como Código (IaC - Infrastructure as Code)** es la práctica de ingeniería donde la infraestructura se describe mediante archivos de texto legibles, versionados en Git y ejecutables por máquinas. **Terraform** (creado por HashiCorp) es la herramienta de IaC declarativa más popular y utilizada del mundo. Utiliza un lenguaje propio llamado **HCL** (HashiCorp Configuration Language) y es compatible con prácticamente cualquier proveedor de nube existente (AWS, Google Cloud, Azure, Cloudflare, Kubernetes, DigitalOcean).
- ✓Enfoque Declarativo: Tú describes **qué quieres tener** (ej. *'quiero 3 servidores y una base de datos PostgreSQL'*); Terraform se encarga automáticamente de averiguar **cómo crearlo** llamando a las APIs de la nube en el orden de dependencias correcto.
- ✓Previsualización Segura (`terraform plan`): Antes de tocar nada en la nube real, Terraform te muestra un diff exacto de qué recursos se van a crear (`+`), cuáles se modificarán (`~`) y cuáles se destruirán (`-`).
- ✓Clonación de Entornos en Minutos: Puedes duplicar tu infraestructura completa de producción para crear un entorno de Staging idéntico cambiando una sola variable.
- •Elimina las diferencias de configuración invisibles entre entornos (Configuration Drift).
- •Permite revisar cambios de infraestructura mediante Pull Requests en GitHub con aprobación de tus compañeros.
- •Hace posible destruir toda la infraestructura de pruebas por la noche con un solo comando (`terraform destroy`) para no gastar dinero inútilmente.
- **ClickOps Tradicional**: Un carpintero entra al taller e intenta cortar maderas midiendo con una regla gastada y haciendo memoria de lo que hizo el mes pasado. La mesa queda con una pata 2 centímetros más corta, el color no coincide y si le pides otra mesa igual, tardará dos semanas y saldrá diferente. - **Terraform (IaC)**: Creas un plano digital en código CAD. Introduces el archivo en una máquina de corte automatizado CNC (el ejecutor de Terraform). La máquina lee el plano, corta las 4 patas exactamente al milímetro y ensambla la mesa perfecta en 3 minutos. Si necesitas 100 mesas idénticas para una cadena de hoteles, solo presionas el botón 100 veces.
Explicación Paso a Paso del Tema
Escribir tu Primer Archivo de Infraestructura en HCL
Crea un archivo `main.tf` definiendo el proveedor y un recurso básico (como una instancia de servidor o un bucket de almacenamiento S3).
Observa la sintaxis limpia de bloques de recursos en HCL.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "mi_almacenamiento" {
bucket = "arostik-backup-archivos-2026"
tags = {
Entorno = "Produccion"
Gestionado = "Terraform"
}
}| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| provider "aws" | Proveedor | Plugin que sabe cómo comunicarse con las APIs del servicio de nube específico. |
| resource "aws_s3_bucket" | Tipo de Recurso | Define el objeto de infraestructura que se aprovisionará en la nube. |
Guarda siempre tus credenciales de acceso (claves de API) en variables de entorno (`AWS_ACCESS_KEY_ID`), nunca las escribas en texto plano dentro de los archivos `.tf`.
El Ciclo de Vida: Init, Plan y Apply
La operación de Terraform sigue un flujo de tres comandos universales en la terminal: 1. `terraform init`: Descarga los plugins de los proveedores necesarios. 2. `terraform plan`: Calcula el estado actual, compara con el deseado e imprime el plan de acción. 3. `terraform apply`: Ejecuta las llamadas a las APIs de la nube y crea los recursos reales.
Nunca ejecutes apply sin haber revisado minuciosamente la salida de plan.
terraform init terraform plan terraform apply -auto-approve
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| init | Comando | Inicializa el directorio de trabajo y descarga los binarios de proveedores en .terraform/. |
| plan | Comando | Muestra la previsualización de cambios sin realizar modificaciones en la nube. |
| apply | Comando | Aplica los cambios confirmados en la infraestructura remota. |
Subir el archivo `terraform.tfstate` al repositorio público de GitHub: puede contener contraseñas en texto claro de bases de datos creadas. Configura un Remote Backend cifrado en AWS S3 con bloqueo mediante DynamoDB.
El Archivo de Estado (State File) y Remote Backends
Terraform necesita saber qué recursos ya existen en la nube para no duplicarlos cada vez que corres el comando.
Para ello mantiene el archivo `terraform.tfstate`. En equipos profesionales, este archivo se guarda en un almacenamiento centralizado en la nube (Remote Backend) con bloqueo de concurrencia para evitar que dos ingenieros ejecuten `apply` a la vez y corrompan la infraestructura.
Si alguien modifica un recurso a mano por la consola web de AWS (ClickOps), `terraform plan` detectará la discrepancia (Drift) y te ofrecerá corregirla para que la nube vuelva a coincidir con el código.
Casos Prácticos Reales en Producción
Situaciones de ingeniería reales sin mención de presupuestos ficticios.
1La Reconstrucción de Emergencia de la Infraestructura de un Banco tras un Desastre
Un centro de datos de un proveedor de nube sufrió una inundación catastrófica que destruyó 50 servidores virtuales y redes completas de una fintech.
Toda la infraestructura estaba completamente descrita en repositorios de Git con módulos de Terraform. Los ingenieros cambiaron la variable de región de `us-east-1` a `eu-west-1` y ejecutaron `terraform apply`.
Fichas Nemotécnicas de Conceptos Clave
Glosario rápido para recordar los términos fundamentales de la lección.
Metodología que gestiona y aprovisiona recursos de infraestructura mediante código legible y ejecutable en lugar de procesos manuales.
Lenguaje declarativo y estructurado diseñado por HashiCorp para definir configuraciones de infraestructura legibles por humanos.
Archivo que almacena el mapeo entre los recursos declarados en el código y los recursos físicos reales creados en la nube.
¿Qué es Terraform e Infraestructura como Código (IaC)?
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Cuál es la principal diferencia entre un enfoque declarativo (como Terraform) y un script imperativo (como un script de Bash con comandos de AWS CLI)?
¿Qué hace el comando 'terraform plan' antes de aplicar cualquier cambio?
¿Por qué es crucial proteger el archivo 'terraform.tfstate' y no subirlo a repositorios públicos de Git?
Preguntas Frecuentes (FAQ)
¿Cuál es la diferencia entre Terraform y Ansible?
Terraform está diseñado principalmente para el **aprovisionamiento de infraestructura** (crear los servidores, redes, bases de datos y VPCs en la nube). Ansible está diseñado principalmente para la **gestión de configuración** (instalar paquetes, actualizar software y configurar archivos dentro del sistema operativo de esos servidores una vez que ya existen). Se complementan a la perfección.
¿Qué es OpenTofu?
En 2023, HashiCorp cambió la licencia de Terraform de código abierto a una licencia comercial restrictiva (BSL). La Linux Foundation y decenas de empresas crearon un fork comunitario 100% de código abierto llamado **OpenTofu**, que es un reemplazo directo y compatible con todos los archivos de Terraform.