Provisionamiento de infraestructura con Terraform en Linux

Provisionamiento de infraestructura con Terraform en Linux

Una guía seria, detallada y extensa para profesionales de TI

Introducción

En la era de la automatización y la Infraestructura como Código (IaC), herramientas como Terraform se han convertido en pilares fundamentales
para la gestión de recursos en la nube y on-premises. En este artículo, exploraremos en profundidad cómo instalar y utilizar Terraform en sistemas Linux
para provisionar y mantener infraestructura de forma reproducible y escalable.

¿Qué es Terraform

Terraform es una herramienta de código abierto desarrollada por HashiCorp que permite definir, previsualizar y aplicar cambios en tu infraestructura
mediante archivos de configuración declarativos. Con Terraform, los administradores y desarrolladores pueden describir recursos como máquinas virtuales,
redes, bases de datos y más, en archivos de texto, manteniendo un estado centralizado y un historial de cambios.

Características clave

  • Declarativo: describe el estado final deseado y Terraform se encarga de lograro.
  • Proveedores: módulos que permiten interactuar con AWS, Azure, Google Cloud, VMware, OpenStack, Kubernetes, entre otros.
  • Plan y Apply: comandos terraform plan y terraform apply para previsualizar y aplicar cambios.
  • Estado: mantiene un archivo terraform.tfstate que refleja la infraestructura actual.

Instalación de Terraform en Linux

Para instalar Terraform en una distribución Linux (Ubuntu, Debian, CentOS, RHEL o similares), podemos seguir estos pasos:

Paso Comando Descripción
Descargar binario
wget https://releases.hashicorp.com/terraform/1.5.0/terraform_1.5.0_linux_amd64.zip
Obtiene el paquete oficial.
Descomprimir
unzip terraform_1.5.0_linux_amd64.zip
Extrae el binario.
Mover a /usr/local/bin
sudo mv terraform /usr/local/bin/
Hace Terraform accesible globalmente.

Fundamentos de la Infraestructura como Código (IaC)

La IaC busca aplicar principios de desarrollo de software al aprovisionamiento de infraestructura:
versionado, revisión de cambios, pruebas automatizadas y despliegues repetibles.
Con Terraform, cada componente de tu arquitectura queda definido en código, lo que permite:

  • Visibilidad clara de los recursos desplegados.
  • Rollback y auditoría de cambios.
  • Escalabilidad y modularidad mediante módulos.

Proveedores y plugins en Terraform

Un proveedor (provider) es el puente que permite a Terraform comunicarse con APIs de distintas plataformas. Para usar un proveedor,
se declara su origen y versión en el archivo .tf y se inicializa con
terraform init.

Proveedor Uso típico
aws Recursos de AWS: EC2, VPC, S3, IAM…
google Recursos de Google Cloud Platform.
kubernetes Gestión de workloads en clústeres Kubernetes.

Estructura de un proyecto Terraform

Un proyecto típico se organiza así:

  • main.tf: configuración principal.
  • variables.tf: definición de variables de entrada.
  • outputs.tf: definición de valores de salida.
  • terraform.tfstate: archivo de estado (no versionar en Git).
  • modules/: directorio para módulos reutilizables.

Variables y outputs

Las variables permiten parametrizar el despliegue y hacer nuestros archivos más flexibles. Un ejemplo de variables.tf:

variable region {
  description = Región donde se crearán los recursos
  type        = string
  default     = us-west-1
}

Los outputs facilitan el consumo de información una vez finalizado el despliegue. Ejemplo en outputs.tf:

output instance_ip {
  description = Dirección IP de la instancia creada
  value       = aws_instance.web.public_ip
}

Gestión de estados

El archivo de estado (terraform.tfstate) mantiene el mapeo entre los recursos creados y la configuración
declarada. Para entornos colaborativos, se recomienda usar un backend remoto como S3, GCS o Terraform Cloud:

terraform {
  backend s3 {
    bucket = mi-terraform-state
    key    = proyecto/terraform.tfstate
    region = us-west-1
  }
}

Módulos en Terraform

Los módulos permiten agrupar recursos relacionados en unidades reutilizables. Por ejemplo, un módulo para desplegar un servidor Linux:

  • modules/linux-server/main.tf: define recursos EC2, grupos de seguridad, volúmenes.
  • modules/linux-server/variables.tf: parámetros como AMI, tamaño, tags.
  • modules/linux-server/outputs.tf: IP pública, nombre, ID.

Luego, en tu main.tf:

module web_server {
  source     = ./modules/linux-server
  ami        = ami-0abcdef1234567890
  instance_type = t3.micro
  tags       = { Name = web-server }
}

Ejemplo práctico: Provisión de un servidor Linux en AWS

Configuración del proveedor AWS

provider aws {
  region  = var.region
  profile = var.aws_profile
}

Definición de instancias EC2

resource aws_instance web {
  ami           = var.ami
  instance_type = var.instance_type

  tags = {
    Name = TerraformLinuxWeb
  }
}

Variables y outputs

variable ami {
  type    = string
  default = ami-0abcdef1234567890
}

variable instance_type {
  type    = string
  default = t3.micro
}

output web_public_ip {
  value = aws_instance.web.public_ip
}

Ejecución de Terraform

  1. terraform init – Inicializa el proyecto.
  2. terraform plan – Muestra cambios a aplicar.
  3. terraform apply – Aplica la infraestructura.
  4. terraform destroy – Elimina todos los recursos.

Red VPN con OpenVPN y WireGuard

Integrar una VPN en tu infraestructura mejora la seguridad y el acceso remoto. A continuación, un ejemplo mínimo usando
OpenVPN y
WireGuard como recursos provisionados con Terraform.

  • Recurso EC2 para servidor VPN.
  • Instalación automática vía remote-exec.
  • Generación de certificados (OpenVPN) y pares de claves (WireGuard).
  • Configuración de reglas de seguridad para tráfico UDP/TCP.

Este enfoque unifica la creación del servidor y la instalación del software de VPN, garantizando reproducibilidad.

Mejores prácticas

  • Separar entornos: usa workspaces o diferentes backends para dev, stage y prod.
  • Versionar el código: mantén tus archivos en un repositorio Git y revisa cada cambio.
  • Revisar el plan: nunca apliques cambios sin inspeccionar terraform plan.
  • Variables sensibles: usa Vault, AWS Secrets Manager o Azure Key Vault para proteger credenciales.
  • Modularidad: divide la infraestructura en módulos lógicos y reutilizables.
  • Políticas y validaciones: emplea Sentinel o Terratest para asegurar calidad y cumplimiento.

Conclusión

Terraform ofrece un modelo sólido y escalable para el provisionamiento de infraestructura en Linux y en múltiples plataformas.
Gracias a su enfoque declarativo, gestión de estado y ecosistema de proveedores, podemos
automatizar despliegues, estandarizar configuraciones y garantizar consistencia en todos los ambientes.
Adoptar las mejores prácticas y conocer a fondo comandos y estructuras de Terraform
facilitará la transición hacia una verdadera cultura de Infraestructura como Código.

Download TXT




Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *