Короткий ответ
.tfvars-файлы содержат значения входных переменных конфигурации в формате имя = значение и подключаются через флаг -var-file, что позволяет использовать одну и ту же конфигурацию с разными наборами значений для разных окружений без изменения кода.
Как это работает подробнее
Terraform собирает значения переменных из нескольких источников с определённым приоритетом: значения по умолчанию в variable блоке, файлы terraform.tfvars/.auto.tfvars (подключаются автоматически), явно указанные -var-file, флаги -var и переменные окружения TF_VAR_ — более специфичный источник переопределяет более общий.
Пример кода
main.tf
# environments/prod.tfvars
instance_type = "m5.large"
instance_count = 4
$ terraform apply -var-file=environments/prod.tfvarsЧто использовать на практике
- Практика. типичный паттерн —
environments/dev.tfvarsиenvironments/prod.tfvarsс одинаковым набором имён переменных, но разными значениями (размер инстанса, количество реплик, CIDR), и один и тот же код применяется с флагом-var-file=environments/prod.tfvars.
Подводные камни
- Ошибка. хранить чувствительные значения (пароли) прямо в
.tfvarsи коммитить файл в git; путать приоритет источников и удивляться, почему значение из-varне применилось, хотя на самом деле более приоритетный*.auto.tfvarsего перекрыл.