Tecnología que te entiende
Terraform desde cero: infraestructura como código
Cloud

Terraform desde cero: infraestructura como código

28 Mar 2026 2 min de lectura 864 vistas

Terraform es la herramienta de Infraestructura como Código (IaC) más usada del mundo. En lugar de hacer clic en la consola de AWS o Azure, describes tu infraestructura en código y Terraform la crea, modifica y destruye por ti.

¿Qué es Infraestructura como Código?

IaC significa que tu infraestructura — servidores, redes, bases de datos, DNS — vive en archivos de código versionados en Git. Las ventajas son enormes: reproducibilidad total, historial de cambios, revisión de código para cambios de infraestructura, y ambientes idénticos de desarrollo, staging y producción.

Instalación

# Linux/macOS (usando tfenv para gestionar versiones)
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
tfenv install latest
tfenv use latest

# Verificar
terraform version

Conceptos fundamentales

Concepto Descripción
Provider Plugin que conecta con una plataforma: AWS, Azure, GCP, DigitalOcean, Docker, etc.
Resource Un objeto de infraestructura: instancia EC2, grupo de seguridad, bucket S3.
State Archivo .tfstate que mapea tu código con la infraestructura real. No editar manualmente.
Plan Vista previa de cambios antes de aplicarlos. Como un git diff para infraestructura.
Module Grupo reutilizable de recursos. Como una función en programación.

Primer archivo: servidor en DigitalOcean

# main.tf

terraform {
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }
}

# Configurar el provider con tu token
provider "digitalocean" {
  token = var.do_token
}

# Variable para el token (no hardcodear credenciales)
variable "do_token" {
  description = "DigitalOcean API Token"
  type        = string
  sensitive   = true
}

# Crear un Droplet (VPS)
resource "digitalocean_droplet" "web" {
  name   = "mi-servidor-web"
  region = "nyc3"
  size   = "s-1vcpu-1gb"   # $6/mes
  image  = "ubuntu-22-04-x64"

  tags = ["web", "production"]
}

# Mostrar la IP al terminar
output "ip_publica" {
  value = digitalocean_droplet.web.ipv4_address
}

El flujo de trabajo

# 1. Inicializar: descarga providers
terraform init

# 2. Ver qué va a crear/cambiar/destruir (sin hacer nada)
terraform plan

# 3. Aplicar los cambios
terraform apply

# Te muestra el plan y pide confirmación:
# Plan: 1 to add, 0 to change, 0 to destroy.
# Do you want to perform these actions? yes

# 4. Ver el estado actual
terraform show

# 5. Destruir toda la infraestructura cuando no la necesites
terraform destroy

Variables y archivos de variables

# terraform.tfvars (NO subir a Git si tiene secretos)
do_token = "tu_token_aqui"

# O pasar por variable de entorno (recomendado para CI/CD)
export TF_VAR_do_token="tu_token_aqui"
terraform apply

Backend remoto: state en equipo

# Guardar el state en un bucket S3 (para trabajo en equipo)
terraform {
  backend "s3" {
    bucket = "mi-terraform-state"
    key    = "production/terraform.tfstate"
    region = "us-east-1"
    encrypt = true
  }
}
✅ Reglas de oro: Nunca editar el .tfstate manualmente · State remoto para trabajo en equipo · terraform plan siempre antes de apply · Variables sensibles por env vars o Vault · Un directorio por ambiente (dev/staging/prod)
"Con Terraform puedes crear un ambiente completo de 50 recursos en 5 minutos y destruirlo en 2. Eso cambia por completo cómo piensas la infraestructura."