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 planyterraform applypara previsualizar y aplicar cambios. - Estado: mantiene un archivo
terraform.tfstateque 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… |
| 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
terraform init– Inicializa el proyecto.terraform plan– Muestra cambios a aplicar.terraform apply– Aplica la infraestructura.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.

Deja una respuesta