Terraform 13: Pasar valores — tfvars, -var, variables de entorno y precedencia
easy⏱ 5 mincourseterraform
Las formas de dar un valor
Podés setear una variable con un archivo .tfvars, una variable de entorno llamada TF_VAR_<name>, o los flags -var / -var-file de la CLI. Un terraform.tfvars (o cualquier *.auto.tfvars) se carga automáticamente; otros .tfvars requieren -var-file.
# dev.tfvars — one file per environment
environment = "dev"
location = "westus2"
instance_count = 1
tags = {
team = "platform"
env = "dev"
}
# --- shell equivalents ---
# export TF_VAR_environment=dev
# terraform apply -var-file="dev.tfvars"
# terraform apply -var="instance_count=3"
Precedencia: gana el último, la CLI es la más fuerte
Cuando la misma variable se setea en varios lugares, Terraform los aplica en este orden (cada uno sobreescribe al anterior): 1) default, 2) terraform.tfvars / *.auto.tfvars, 3) variables de entorno TF_VAR_*, 4) -var-file explícito, 5) -var en la línea de comandos. Así que un flag -var siempre gana.
# Given all of these set `instance_count`:
# default = 1
# dev.tfvars = 2 (via -var-file)
# TF_VAR_... = 4
# -var flag = 9
#
# terraform apply -var-file=dev.tfvars -var="instance_count=9"
# => instance_count = 9 (the -var flag wins)
Nunca commitees secretos en tfvars
Los archivos *.tfvars son texto plano. Guardá ahí la forma del entorno (región, cantidades, nombres) pero nunca contraseñas o claves — esas van en un almacén de secretos (por ejemplo Azure Key Vault, leído con un data source) o en TF_VAR_* inyectadas por tu CI. Agregá al .gitignore cualquier *.tfvars con datos sensibles.
Resolvé la precedencia de variables
Escribí resolve(sources) donde sources es un objeto con claves opcionales default, tfvars, env, varFlag. Devolvé el valor de la clave de mayor precedencia que esté definida, en el orden de Terraform (varFlag > env > tfvars > default). Después logueá resolve({ default: 1, tfvars: 2, env: 4, varFlag: 9 }) (esperá 9) y resolve({ default: 1, tfvars: 2 }) (esperá 2).