Introducción

Antes de escribir una sola línea de código Terraform, es fundamental entender el problema que resuelve y por qué se ha convertido en una herramienta esencial en el mundo de la infraestructura moderna. En esta lección aprenderás qué es la Infraestructura como Código, qué papel juega Terraform en ese ecosistema y por qué miles de empresas lo utilizan a diario.


  1. ¿Qué es Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) es la práctica de gestionar y aprovisionar la infraestructura de TI mediante archivos de configuración legibles por máquina, en lugar de hacerlo a través de interfaces gráficas o procesos manuales.

Imagina que tienes que crear 50 servidores en la nube con la misma configuración. Hacerlo manualmente implicaría:

  • Acceder a la consola web del proveedor
  • Repetir los mismos clics 50 veces
  • Arriesgarte a cometer errores en cualquiera de los pasos
  • No tener un registro exacto de qué fue configurado y cómo

Con IaC, describes esa infraestructura en un archivo de texto y la herramienta se encarga de crearla de forma consistente y repetible.

Principios clave de IaC

  • Declarativo vs Imperativo: En el enfoque declarativo (como Terraform), describes el estado final deseado y la herramienta decide cómo llegar ahí. En el imperativo describes paso a paso las acciones a ejecutar.
  • Idempotencia: Ejecutar el mismo código múltiples veces produce siempre el mismo resultado, sin efectos secundarios no deseados.
  • Control de versiones: Los archivos de configuración se guardan en repositorios Git, lo que permite revisar el historial de cambios, colaborar en equipo y revertir cambios problemáticos.
  • Reutilización: Los módulos y plantillas permiten reutilizar configuraciones ya probadas.
  • Automatización: La infraestructura se puede crear, modificar y destruir de forma automática dentro de pipelines de CI/CD.

Beneficios de IaC frente a la gestión manual

Aspecto Gestión Manual Infrastructure as Code
Velocidad Lenta, depende de personas Rápida, automatizada
Consistencia Propenso a errores humanos Siempre consistente
Documentación Implícita o inexistente El propio código es la documentación
Reproducibilidad Difícil de replicar exactamente Completamente reproducible
Auditoría Difícil de rastrear Historial en control de versiones
Colaboración Complicada Natural mediante pull requests

  1. ¿Qué es Terraform?

Terraform es una herramienta de Infrastructure as Code de código abierto desarrollada por HashiCorp, fundada en 2012. Fue lanzada en 2014 y se ha convertido en el estándar de facto para gestionar infraestructura en la nube.

Características principales de Terraform

  • Multi-cloud y multi-proveedor: Terraform puede gestionar recursos en AWS, Azure, Google Cloud, Kubernetes, GitHub, Datadog y cientos de otros servicios mediante proveedores (providers).
  • Lenguaje declarativo: Usa el lenguaje HCL (HashiCorp Configuration Language), diseñado para ser legible tanto por humanos como por máquinas.
  • Grafo de dependencias: Terraform construye automáticamente un grafo de dependencias entre recursos, lo que le permite crear recursos en el orden correcto y en paralelo cuando es posible.
  • Plan previo: Antes de aplicar cambios, Terraform muestra exactamente qué va a hacer, sin ejecutar nada aún.
  • Estado centralizado: Mantiene un registro del estado actual de la infraestructura para compararlo con el estado deseado.

HashiCorp y el ecosistema

HashiCorp es la empresa detrás de Terraform, pero también desarrolla otras herramientas complementarias:

  • Vault: Gestión de secretos y acceso
  • Consul: Service mesh y descubrimiento de servicios
  • Nomad: Orquestador de workloads
  • Packer: Creación de imágenes de máquinas virtuales

Terraform funciona especialmente bien combinado con estas herramientas, aunque también se integra perfectamente con soluciones de terceros.

Nota sobre licencias: En 2023, HashiCorp cambió la licencia de Terraform de Mozilla Public License (MPL 2.0) a Business Source License (BSL 1.1). Como respuesta, la comunidad creó OpenTofu, un fork de código abierto bajo la Linux Foundation. Ambas herramientas son funcionalmente casi idénticas y el código de este curso es compatible con las dos.


  1. Ventajas de Usar Terraform vs Configuración Manual

Velocidad y eficiencia

Un equipo que gestiona infraestructura manualmente puede tardar horas en configurar un entorno completo. Con Terraform, el mismo entorno se puede crear en minutos ejecutando un solo comando.

Eliminación de la deriva de configuración (Configuration Drift)

Cuando varios ingenieros modifican la infraestructura manualmente, es inevitable que el estado real difiera del estado documentado. Terraform detecta y corrige estas diferencias automáticamente.

Infraestructura como documentación viva

Los archivos .tf son la fuente de verdad sobre qué infraestructura existe. Cualquier miembro del equipo puede leer el código y entender exactamente qué recursos existen y cómo están configurados.

Flujo de trabajo de revisión de código

Al gestionar la infraestructura como código, los cambios pasan por el mismo proceso de revisión que el código de aplicación: pull requests, revisión por pares, pruebas automatizadas.

Destrucción controlada

Con un solo comando (terraform destroy) puedes eliminar completamente un entorno, lo que es enormemente útil para entornos de desarrollo y pruebas que no deben correr las 24 horas.


  1. Comparativa con Otras Herramientas IaC

Terraform no es la única herramienta de IaC disponible. A continuación, una comparativa honesta con las alternativas más populares:

Característica Terraform Ansible CloudFormation Pulumi
Desarrollador HashiCorp Red Hat (IBM) Amazon Web Services Pulumi Corp
Licencia BSL 1.1 / OpenTofu MPL GPL v3 Propietario (gratis) Apache 2.0
Enfoque Declarativo Imperativo/Declarativo Declarativo Imperativo
Lenguaje HCL YAML JSON/YAML Python, JS, Go, etc.
Multi-cloud Sí (excelente) Sí (limitado) No (solo AWS) Sí (excelente)
Gestión de estado Archivo de estado propio Sin estado propio Gestionado por AWS Backend propio
Curva de aprendizaje Media Baja Media Depende del lenguaje
Casos de uso Provisión de infraestructura Configuración de servidores Infraestructura AWS Infraestructura con código real
Comunidad Muy grande Muy grande Grande Creciente

¿Cuándo usar cada herramienta?

  • Terraform: Cuando necesitas crear y gestionar infraestructura en múltiples proveedores de nube de forma reproducible.
  • Ansible: Cuando necesitas configurar el software dentro de servidores ya existentes (instalar paquetes, gestionar servicios, etc.).
  • CloudFormation: Cuando tu organización está 100% en AWS y prefieres una solución nativa sin dependencias externas.
  • Pulumi: Cuando tu equipo prefiere usar lenguajes de programación convencionales (Python, TypeScript) en lugar de un DSL específico.

Consejo profesional: Terraform y Ansible se complementan perfectamente. Terraform crea la infraestructura (servidores, redes, bases de datos) y Ansible la configura (instala aplicaciones, gestiona archivos de configuración). Esta combinación es muy común en entornos productivos.


  1. El Ciclo de Vida de Terraform: Write → Plan → Apply

Terraform sigue un flujo de trabajo de tres pasos que garantiza que los cambios sean predecibles y seguros:

┌─────────┐     ┌──────────┐     ┌─────────┐
│  WRITE  │────▶│   PLAN   │────▶│  APPLY  │
└─────────┘     └──────────┘     └─────────┘
   Código          Previsualizar    Ejecutar
   HCL             cambios          cambios

Paso 1: Write (Escribir)

Escribes la configuración de tu infraestructura en archivos .tf usando el lenguaje HCL. Describes qué recursos quieres crear, modificar o eliminar.

# Ejemplo básico: crear un bucket de S3 en AWS
resource "aws_s3_bucket" "mi_bucket" {
  bucket = "mi-empresa-datos-2024"

  tags = {
    Environment = "produccion"
    Team        = "infraestructura"
  }
}

Paso 2: Plan (Planificar)

Ejecutas terraform plan y Terraform analiza:

  1. Tu configuración actual (archivos .tf)
  2. El estado almacenado (qué infraestructura existe actualmente)
  3. El estado real en el proveedor de nube

Luego genera un plan que muestra exactamente qué va a crear (+), modificar (~) o eliminar (-).

# Salida de terraform plan:
Terraform will perform the following actions:

  # aws_s3_bucket.mi_bucket will be created
  + resource "aws_s3_bucket" "mi_bucket" {
      + bucket = "mi-empresa-datos-2024"
      + tags   = {
          + "Environment" = "produccion"
          + "Team"        = "infraestructura"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Paso 3: Apply (Aplicar)

Ejecutas terraform apply y Terraform ejecuta los cambios planificados, mostrando el progreso en tiempo real y actualizando el archivo de estado al finalizar.

Este ciclo se repite cada vez que quieres modificar tu infraestructura, garantizando que siempre sabes exactamente qué va a cambiar antes de que ocurra.


  1. Casos de Uso Reales

Terraform se usa en una amplísima variedad de escenarios reales:

Gestión de entornos múltiples

Una empresa puede tener entornos de desarrollo, staging y producción. Con Terraform, los tres entornos se crean a partir del mismo código base, garantizando que sean idénticos salvo en los parámetros que difieren (tamaño de instancias, número de réplicas, etc.).

Infraestructura para startups

Una startup puede definir toda su infraestructura en Terraform desde el primer día: servidores de aplicación, bases de datos RDS, balanceadores de carga, grupos de autoescalado, certificados SSL, zonas DNS. Cuando necesiten escalar, modifican un número en el código y ejecutan terraform apply.

Migración a la nube

Las empresas que migran de infraestructura on-premise a la nube usan Terraform para recrear gradualmente su infraestructura en AWS, Azure o GCP, con la capacidad de comparar el estado deseado con el real en todo momento.

Plataformas multi-tenant

Las empresas SaaS usan Terraform para crear infraestructura dedicada por cliente de forma automatizada: cuando un nuevo cliente se registra, un pipeline ejecuta Terraform y aprovisiona su entorno en minutos.

Disaster Recovery

Al tener la infraestructura definida como código, en caso de desastre se puede recrear completamente en otra región o proveedor ejecutando el código Terraform correspondiente.


  1. Ejercicio Práctico: Análisis de Casos de Uso

Enunciado

Empresa Ficticia: "TechRetail S.A." es una empresa de comercio electrónico con las siguientes características:

  • 500.000 usuarios activos
  • Picos de tráfico en Black Friday (10x el tráfico normal)
  • Equipo de 5 ingenieros de infraestructura
  • Actualmente gestionan todo mediante la consola web de AWS
  • Han sufrido 3 incidentes este año por diferencias entre entornos de prueba y producción
  • Tienen 3 entornos: desarrollo, staging y producción

Tarea

Analiza la situación de TechRetail S.A. y responde las siguientes preguntas:

  1. ¿Qué problemas específicos de su situación actual resolvería Terraform?
  2. ¿Qué recursos de infraestructura gestionarías con Terraform para esta empresa?
  3. ¿Qué otras herramientas complementarías con Terraform en este caso?
  4. ¿Cómo ayudaría Terraform durante los picos de Black Friday?

Solución Propuesta

1. Problemas que resuelve Terraform en TechRetail:

  • Inconsistencia entre entornos: Los 3 incidentes por diferencias entre entornos se eliminan porque los 3 entornos se crean desde el mismo código base.
  • Dependencia de consola web: La gestión manual por 5 ingenieros es propensa a errores y difícil de auditar. Terraform centraliza los cambios en código revisable.
  • Falta de documentación: Con Terraform, los archivos .tf documentan exactamente qué infraestructura existe.
  • Escalado manual: Los picos de Black Friday requerirían escalar manualmente con Terraform o combinarlo con auto-scaling groups.

2. Recursos a gestionar con Terraform:

  • Auto Scaling Groups para servidores de aplicación
  • RDS (bases de datos PostgreSQL/MySQL)
  • ElastiCache (Redis para sesiones y caché)
  • CloudFront (CDN para activos estáticos)
  • Route53 (DNS)
  • Certificados SSL/TLS (ACM)
  • VPCs, subnets, security groups
  • S3 buckets para imágenes de productos

3. Herramientas complementarias:

  • Ansible: Para configurar el software dentro de las instancias EC2
  • Packer: Para crear AMIs (imágenes de máquina) pre-configuradas
  • AWS Secrets Manager + Vault: Para gestionar credenciales de base de datos
  • GitHub Actions o Jenkins: Para ejecutar Terraform automáticamente en los pipelines de CI/CD

4. Terraform en Black Friday:

Antes de Black Friday, el equipo modificaría en el código el tamaño de las instancias y el número mínimo de servidores en el Auto Scaling Group, ejecutaría terraform plan para revisar los cambios y luego terraform apply para aplicarlos. Todo el proceso es revisable, auditable y reversible. Después de Black Friday, revertirían los cambios al estado original con el mismo proceso.


Resumen y Preparación para el Siguiente Tema

En esta lección has aprendido:

  • IaC es la práctica de gestionar infraestructura mediante código, lo que aporta velocidad, consistencia y reproducibilidad.
  • Terraform es la herramienta de IaC más popular, desarrollada por HashiCorp, que usa el lenguaje HCL para describir infraestructura de forma declarativa.
  • Las ventajas principales de Terraform son la eliminación de errores manuales, la documentación viva y el flujo de trabajo predecible Write → Plan → Apply.
  • Terraform se compara favorablemente con Ansible (diferente propósito), CloudFormation (solo AWS) y Pulumi (lenguajes convencionales).
  • Los casos de uso son amplísimos: desde startups hasta grandes empresas con infraestructura multi-cloud.

En la siguiente lección aprenderás a instalar Terraform en tu sistema operativo y a configurar tu entorno de trabajo para empezar a escribir tus primeras configuraciones.

© Copyright 2026. Todos los derechos reservados