Cerramos el capítulo de gestión de entornos viendo en detalle cómo se pasan los valores a Terraform: los archivos .tfvars y las variables de entorno. Ya los hemos mencionado de pasada; ahora entenderás bien cómo separar la configuración (los valores que cambian) del código (la lógica que se queda igual). Esta separación es clave para gestionar entornos de forma limpia.

Recordatorio: las variables

Recuerda las variables del Capítulo 10. Una variable es un «hueco» en tu código que se rellena con un valor desde fuera:

variable "tipo_instancia" {
  description = "Tipo de instancia EC2"
  type        = string
}

variable "cantidad_servidores" {
  type    = number
  default = 1
}

El código usa var.tipo_instancia, pero no fija el valor. ¿De dónde sale ese valor? Hay varias formas de proporcionarlo, y aquí las vemos.

Los archivos .tfvars: la forma principal

Un archivo .tfvars es un archivo donde asignas valores a las variables. Es la forma más habitual y ordenada de configurar un entorno. Por ejemplo:

# produccion.tfvars
tipo_instancia      = "t3.large"
cantidad_servidores = 5
nombre_proyecto     = "tienda-prod"
# desarrollo.tfvars
tipo_instancia      = "t3.micro"
cantidad_servidores = 1
nombre_proyecto     = "tienda-dev"

Fíjate en la idea clave: el código es el mismo, pero cada archivo .tfvars le da valores distintos. Esto es exactamente lo que permite usar la misma lógica para varios entornos (subcapítulo 19.2).

Cómo se usa un .tfvars

Le indicas a Terraform qué archivo de valores usar con la opción -var-file:

terraform apply -var-file="produccion.tfvars"   # aplica con valores de producción
terraform apply -var-file="desarrollo.tfvars"   # aplica con valores de desarrollo

Caso especial — terraform.tfvars: si nombras un archivo exactamente terraform.tfvars, Terraform lo carga automáticamente sin que tengas que indicarlo. Por eso, en la estrategia de directorios (subcapítulo 19.2), cada carpeta de entorno suele tener su propio terraform.tfvars que se aplica solo.

Analogía: el código Terraform es como una plantilla de carta con huecos («Estimado ___, su pedido ___ está listo»). Los archivos .tfvars son los datos que rellenan los huecos para cada destinatario. Una plantilla, muchas cartas personalizadas. Cambias los datos, no la plantilla.

Las variables de entorno: otra forma de pasar valores

Otra manera de dar valores a las variables es a través de variables de entorno del sistema operativo, usando el prefijo TF_VAR_:

TF_VAR_tipo_instancia = "t3.micro"

Terraform lee automáticamente cualquier variable de entorno que empiece por TF_VAR_ y la asigna a la variable correspondiente (aquí, tipo_instancia).

¿Cuándo se usa esto? Sobre todo en dos casos:

  • En automatización (CI/CD, Capítulo 22): los sistemas automáticos suelen pasar los valores como variables de entorno, sin archivos.
  • Para datos sensibles (secretos): como veremos enseguida, las contraseñas y claves no deben ir en archivos .tfvars que se suben a Git; las variables de entorno son una forma de pasarlas sin escribirlas en ningún archivo del repositorio.

El orden de prioridad

Como hay varias formas de dar valores, Terraform sigue un orden de prioridad si un mismo valor se define en varios sitios (de menor a mayor prioridad, a grandes rasgos):

1. valor "default" en la definición de la variable   (la más baja)
2. archivo terraform.tfvars (automático)
3. archivos -var-file que indiques
4. variables de entorno TF_VAR_
5. opción -var en la línea de comandos                (la más alta)

No hace falta memorizarlo, pero quédate con la idea: si defines un valor en varios sitios, gana el más específico/directo. En la duda, lo que pones en la línea de comandos manda sobre lo demás.

⚠️ Seguridad: nunca metas secretos en .tfvars versionados

Esto es crítico. Tus archivos .tfvars con la configuración normal (tamaños, nombres) se guardan en Git sin problema. Pero NUNCA debes poner datos sensibles —contraseñas de bases de datos, claves de API, tokens— en archivos .tfvars que subes al repositorio. Si lo haces, esos secretos quedan expuestos en el historial de Git para cualquiera que acceda.

❌ MAL:  password = "MiContraseña123" en un .tfvars subido a Git
✅ BIEN: el secreto se pasa por variable de entorno, o mejor aún,
         se lee de un gestor de secretos (Secrets Manager, Cap. 23)

Las formas correctas de manejar secretos:

  • Variables de entorno (TF_VAR_password), que no quedan en ningún archivo del repo.
  • Gestores de secretos como AWS Secrets Manager o Parameter Store (que veremos en el Capítulo 23): Terraform los lee en el momento, sin que el secreto se escriba nunca en el código.
  • Añadir los archivos .tfvars con secretos al .gitignore para que nunca se suban.

Recuerda también (del Capítulo 11) que el propio estado puede contener datos sensibles, por lo que el backend remoto debe estar cifrado y con acceso restringido. La gestión de secretos es un tema serio que retomaremos en profundidad en el Capítulo 23.

Lo que debes recordar

  • Las variables dejan «huecos» en el código; los valores se proporcionan desde fuera, separando la configuración del código (la misma lógica sirve para varios entornos).
  • Los archivos .tfvars son la forma principal de asignar valores; usas -var-file="entorno.tfvars", y un archivo llamado terraform.tfvars se carga automáticamente.
  • Las variables de entorno con prefijo TF_VAR_ son otra forma de pasar valores, útil en CI/CD y para secretos.
  • Hay un orden de prioridad cuando un valor se define en varios sitios: gana el más directo (línea de comandos > entorno > archivos > default).
  • ⚠️ Seguridad crítica: nunca pongas secretos (contraseñas, claves) en .tfvars versionados en Git. Usa variables de entorno, gestores de secretos (Secrets Manager, Capítulo 23) y .gitignore.

¡Has terminado el Capítulo 19! Ya sabes gestionar múltiples entornos de forma limpia y segura. En el Capítulo 20 profundizaremos en uno de los temas más importantes para trabajar en equipo: los backends remotos y el locking del estado.

Cloud, AWS & Terraform — De cero a experto

Capítulo 1 · Qué es el cloud computing

Capítulo 2 · El mercado cloud y los grandes proveedores

Capítulo 3 · Regiones, zonas de disponibilidad y edge

Capítulo 4 · Cómputo: EC2

Capítulo 5 · Almacenamiento: S3

Capítulo 6 · Redes: VPC

Capítulo 7 · Identidad y acceso: IAM

Capítulo 8 · Bases de datos gestionadas

Capítulo 9 · Por qué Infraestructura como Código

Capítulo 10 · HCL: el lenguaje de Terraform

Capítulo 11 · Providers y estado

Capítulo 12 · Tu primera infraestructura real en Terraform

Capítulo 13 · Balanceo de carga y autoescalado

Capítulo 14 · Serverless con Lambda

Capítulo 15 · Mensajería y eventos

Capítulo 16 · Entrega de contenido y DNS

Capítulo 17 · Contenedores en AWS

Capítulo 18 · Módulos: reutilización y composición

Capítulo 19 · Workspaces y gestión de entornos

Capítulo 20 · Backends remotos y locking

Capítulo 21 · Testing de infraestructura

Capítulo 22 · Terraform en CI/CD

Capítulo 23 · Seguridad en profundidad

Capítulo 24 · Observabilidad: logs, métricas y trazas

Capítulo 25 · Optimización de costes

Capítulo 26 · Alta disponibilidad y disaster recovery

Capítulo 27 · Well-Architected Framework de AWS

Capítulo 28 · Arquitecturas serverless a escala

Capítulo 29 · Plataformas de datos en AWS

Capítulo 30 · Multi-cuenta y landing zones

Capítulo 31 · Platform Engineering e Internal Developer Platform

Capítulo 32 · Certificaciones AWS relevantes

Capítulo 33 · Proyectos para consolidar lo aprendido

Capítulo 34 · Recursos y comunidad

© Copyright 2024. Todos los derechos reservados