Переменные (variable)
Тема дорожной карты · Terraform
Переменные Terraform — это входные объявления, определённые в блоках variable, которые параметризуют HCL-конфигурации, позволяя одному и тому же модулю Terraform или OpenTofu создавать разную инфраструктуру в окружениях AWS, Azure, GCP или Kubernetes, просто передавая разные значения во время выполнения. Каждый блок variable задаёт ограничение type (например, string, number, list(string), map(any)), необязательное default, description для документации и необязательные правила validation, выполняемые во время terraform plan для отклонения некорректных входных данных до выполнения API-вызовов. Переменные Terraform назначаются через несколько механизмов в порядке возрастания приоритета: значения default, файлы terraform.tfvars, именованные *.tfvars-файлы передаваемые с -var-file, переменные окружения с префиксом TF_VAR_ и флаги -var в командной строке, используемые в конвейерах GitHub Actions или GitLab CI. Чувствительные переменные Terraform — API-ключи и пароли — следует помечать sensitive = true для подавления в выводе terraform plan и в идеале передавать во время выполнения через Vault, файлы, расшифрованные SOPS, или CI/CD-секреты, а не коммитить в репозиторий. Хорошо спроектированные переменные Terraform с чёткими типами, правилами валидации и описаниями делают модули самодокументируемыми, устанавливают ограничения до terraform apply и автоматически рендерятся генератором документации Terraform Registry при публикации провайдеров и модулей.
Как это работает
Переменные (variable) — язык конфигурации: блоки (resource "type" "name" { ... }), атрибуты, ссылки (module.foo.output, aws_instance.web.id), переменные (var.x), локалы (local.y), data-источники (data "..." "..."), функции (string, collection, encoding, numeric, date, file). Выражения поддерживают тернарники (a ? b : c), for-циклы в выражениях ([for x in xs : x.id]), splat (module.foo[*].output), dynamic-блоки для повторяющихся nested блоков.
Когда применять
locals — для именования повторяющихся выражений (local.common_tags). for_each лучше count, когда нужно add/remove отдельные элементы без пересоздания остальных. data-источники — для lookup существующих ресурсов вместо hardcoded ID. dynamic-блоки — осторожно, мощны, но быстро бьют по читаемости. Форматируйте terraform fmt; канонический стиль непреклонен.
Типичные ошибки
Ловушки Переменные (variable): глубокие тернарники со side-effect-like ссылками; count для стабильной индексации, потом переупорядочивание списка (всё destroy + re-create); local-блоки, импортирующие друг друга в путаных цепочках; расчёт, что HCL — Тьюринг-полный (почти — но использовать его для общего программирования это запах, пишите CDK или Pulumi).