Infraestructura como código con Terraform: de cero a producción

Software developing

¿Qué es Terraform?

Terraform es una herramienta de infraestructura como código (IaC) desarrollada por HashiCorp. Permite definir, versionar y desplegar infraestructura en múltiples proveedores cloud (AWS, Azure, GCP, etc.) mediante archivos de configuración en HCL (HashiCorp Configuration Language).

Su mayor fortaleza es la reproducibilidad: puedes describir tu infraestructura una vez y recrearla idéntica en diferentes entornos o regiones.

Paso 1: Instalar Terraform

Descárgalo desde terraform.io y añade el binario a tu PATH:

brew install terraform  # en macOS
terraform -v            # para verificar la instalación

Paso 2: Crear tu primer archivo .tf

Vamos a lanzar una instancia EC2 en AWS. Crea un archivo main.tf con el siguiente contenido mínimo:

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0" # Amazon Linux
  instance_type = "t2.micro"
  tags = {
    Name = "EjemploTerraform"
  }
}

Paso 3: Inicializar y aplicar

Ahora inicializamos Terraform, validamos la configuración y aplicamos los cambios:

terraform init       # inicializa el proyecto
terraform plan       # muestra qué va a crear
terraform apply      # aplica los cambios (te pedirá confirmación)

Paso 4: Variables y módulos

En lugar de hardcodear valores, puedes usar variables:

# variables.tf
variable "instance_type" {
  default = "t2.micro"
}
# main.tf
resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = var.instance_type
}

Y si tu proyecto crece, puedes dividirlo en módulos reutilizables que encapsulan lógica de despliegue.

Paso 5: Gestión del estado

Terraform mantiene el estado de tu infraestructura en un archivo terraform.tfstate. Para entornos colaborativos, es recomendable almacenarlo en un backend remoto como S3 + DynamoDB:

terraform {
  backend "s3" {
    bucket         = "mi-bucket-terraform"
    key            = "global/s3/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-locks"
  }
}

Mejores prácticas

  • ✅ Usa módulos para dividir infraestructura en componentes reutilizables
  • 🔒 Usa secrets (como variables de entorno o archivos .tfvars privados)
  • 📦 Versiona todo el código de Terraform en Git
  • 🔁 Automatiza con GitHub Actions para validar y aplicar en PRs
  • 🧪 Usa terraform validate y terraform fmt en tu pipeline

Conclusión

Con Terraform puedes definir tu infraestructura con el mismo enfoque que tu código fuente: limpio, versionado y auditable. Desde levantar una simple instancia hasta desplegar una arquitectura completa con VPCs, balanceadores y bases de datos, todo puede estar codificado.

Una vez te familiarices con sus conceptos clave (estado, módulos, variables), tu velocidad y confianza para desplegar se multiplica. Infraestructura como código no es una moda, es el estándar moderno.

Compartir
Facebook
Twitter
Email
Imprimir

Contacto

¿Tienes alguna duda, propuesta o simplemente quieres saludar? Estoy encantado de leerte.