Contenido del curso

Módulos en Terraform

Variables en Terraform con archivos tfvars

Resumen

Trabajar con valores estáticos en Terraform funciona cuando despliegas uno o dos recursos, pero se vuelve inviable al escalar a 25, 50 o más. Aquí entran las variables en Terraform, la pieza clave para que tus despliegues en Azure sean dinámicos, reutilizables y fáciles de mantener.

Si ya desplegaste tu primer grupo de recursos siguiendo valores fijos, este es el siguiente paso lógico para profesionalizar tu infraestructura como código.

¿Cómo se declara una variable en Terraform?

La declaración parte del bloque variable dentro de tu archivo .tf. Gracias a las extensiones de Terraform en VS Code, puedes invocar el snippet escribiendo variable y presionando tabulador para generar la estructura base [01:00].

Dentro del bloque defines tres propiedades importantes:

  • type: indica si la variable es string, number o map. Cada tipo tiene un uso específico según el dato que vas a manejar.
  • default: asigna un valor predeterminado a la variable si no recibe otro desde fuera.
  • description: documenta para qué sirve esa variable.

Una vez declarada, en lugar de escribir el nombre del recurso de forma estática, lo referencias con var.rg_nombre. Así, el valor del grupo de recursos se hereda desde la variable y no desde el bloque del recurso.

¿Qué hace la propiedad default en una variable de Terraform? Asigna un valor por defecto a la variable. Si no pasas otro valor al ejecutar Terraform, ese será el que se use. Si la dejas vacía, Terraform te pedirá el valor al correr plan o apply.

¿Por qué separar las variables en un archivo aparte?

Meter todo en main.tf convierte tu proyecto en un loop infinito de código. La buena práctica es crear un archivo dedicado llamado variables.tf y mover ahí todas las declaraciones [03:30].

El nombre importa: debe ser exactamente variables.tf, no var.tf ni variable.tf. Terraform indexa el archivo por su nombre, así que cualquier variación rompe la detección automática.

¿Cómo asignar valores a variables sin escribirlos en la terminal?

Una primera forma es pasar los valores directo desde la línea de comandos:

bash terraform plan -var rg_nombre="Mi primer grupo variable"

Funciona, pero imagina hacerlo con 30 variables. Inviable.

La solución profesional es crear un archivo con extensión .tfvars, por convención llamado terraform.tfvars. La extensión es obligatoria; el prefijo del nombre puede variar, pero la extensión .tfvars es lo que Terraform reconoce [05:30].

Dentro del archivo escribes pares clave-valor:

hcl rg_nombre = "RG-Terraform"

Y al ejecutar el plan, le indicas el archivo con la bandera -var-file:

bash terraform plan -var-file="terraform.tfvars"

Terraform tomará automáticamente cada valor y lo inyectará en su variable correspondiente.

¿Por qué nunca debes subir terraform.tfvars al control de versiones?

Este archivo puede contener información sensible: nombres internos, credenciales, identificadores de suscripción o datos de configuración privada. Por eso debe ir directo al .gitignore [06:45].

En VS Code lo notarás porque el archivo aparece con un color más tenue, indicando que está siendo ignorado por Git. Subirlo equivale a una posible fuga de información.

¿Qué archivos de Terraform no debo subir a Git? Nunca subas terraform.tfvars ni archivos de estado como terraform.tfstate. Pueden contener credenciales, nombres de recursos privados y datos de configuración sensibles.

¿Cómo documentar las variables para tu equipo sin exponer datos?

Aquí entra un truco poco mencionado pero muy útil: crear un archivo terraform.tfvars.sample [07:50]. Este archivo sí se sube al repositorio y funciona como guía para quien clone el proyecto.

Dentro listas las mismas variables del archivo real, pero sin sus valores reales. Por ejemplo:

hcl rg_nombre = "" # nombre del grupo de recursos

Quien use tu proyecto sabrá exactamente qué variables necesita definir y con qué propósito, sin que tú expongas tus valores reales.

¿Cómo se conectan los tres archivos entre sí?

El flujo es claro y mantiene tu proyecto escalable:

  1. main.tf define los recursos y referencia variables con var.nombre_variable.
  2. variables.tf declara cada variable con su tipo y descripción.
  3. terraform.tfvars asigna los valores reales que se usarán en el despliegue.

Suena un poco espagueti al inicio, pero con práctica se vuelve la forma más rápida de mantener un proyecto ordenado. Cuando tengas 50 o 100 variables, vas a agradecer haber adoptado esta estructura desde el principio.

Una recomendación práctica: antes de pasar a más recursos, ejecuta terraform init en proyectos nuevos, luego terraform plan con tu -var-file y verifica que cada valor se está heredando correctamente. Si ves tu nombre esperado en el plan, vas bien.

¿Ya estás organizando tus variables en archivos separados o sigues con valores estáticos? Cuéntame en los comentarios cómo estructuras tus proyectos de Terraform.