.tfvars и -var-file
Тема дорожной карты · Terraform
Файлы tfvars (.tfvars или .tfvars.json) предоставляют входные значения для HCL-переменных, объявленных в блоках variable, разделяя данные конфигурации от логики инфраструктуры и позволяя одним и тем же модулям Terraform работать с разными окружениями без изменения исходных .tf-файлов. Terraform автоматически загружает terraform.tfvars и все файлы *.auto.tfvars в рабочей директории; дополнительные файлы передаются явно через -var-file=prod.tfvars при terraform plan или terraform apply. Распространённый паттерн — поддерживать среда-специфичные tfvars-файлы (например, dev.tfvars, staging.tfvars, prod.tfvars), задающие регион, размеры инстансов и количество реплик, тогда как чувствительные значения — пароли — исключаются из системы контроля версий и передаются через переменные окружения (TF_VAR_*) или получаются из HashiCorp Vault или AWS Secrets Manager во время выполнения. Файлы tfvars Terraform, содержащие секреты, никогда не должны коммититься в Git в незашифрованном виде — используйте SOPS или .gitignore для их защиты.
Как это работает
.tfvars и -var-file — как Terraform разделяет state между средами. Две стратегии: встроенные workspaces (terraform workspace new prod — один state-файл с несколькими "именованными" записями; легковесно, но ограничено), или отдельные root-модули per environment (envs/dev/, envs/staging/, envs/prod/ — полная изоляция, повтор части конфига). Второй — production-стандарт. Env-специфичные переменные — в *.tfvars (prod.tfvars, staging.tfvars).
Когда применять
В production — отдельные директории per environment: полная изоляция, разные state-файлы, разные credentials, разный blast radius. Terraform workspaces — только для ephemeral per-feature-branch сред, где нужна disposable инфра. Общую логику — в модули; per-env директории должны быть тонкими "compose"-слоями.
Типичные ошибки
Ловушки .tfvars и -var-file: workspaces для prod/dev и случайный apply не в том workspace (одна shell-сессия = реальный урон); коммит *.tfvars с секретами (используйте SOPS или vault); расхождение dev/prod-модулей до разной инфры (нет паритета = баги только в prod).