Locals

Тема дорожной карты · Terraform

Локальные значения HCL — это именованные промежуточные выражения, определённые в блоке locals, которые вычисляются однократно и переиспользуются по всей конфигурации Terraform или OpenTofu, сокращая дублирование и делая сложные выражения поддерживаемыми. В отличие от входных переменных variable, локальные значения HCL не могут переопределяться через tfvars-файлы или флаги CLI -var — они вычисляются исключительно из других выражений, что делает их идеальными для построения префиксов имён ресурсов, слияния карт тегов через merge() или формирования CIDR-блоков из входных переменных. Типичный случай использования — определение locals { common_tags = merge(var.base_tags, { Environment = var.env }) } и последующее обращение к local.common_tags во всех ресурсах AWS, Azure, GCP или Kubernetes для обеспечения единообразной разметки без повторения вызова merge(). Локальные значения HCL разрешаются во время terraform plan, поэтому они отображаются в выводе плана и могут ссылаться на атрибуты источников данных data, входные значения var и даже другие local-значения (при отсутствии циклических зависимостей). Эффективное использование локальных значений HCL приводит к конфигурациям Terraform, которые чисто проходят проверки tflint и terraform validate, дают читаемый вывод terraform apply и требуют меньших изменений при эволюции соглашений об именовании или политик разметки.

Как это работает

Locals — язык конфигурации: блоки (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; канонический стиль непреклонен.

Типичные ошибки

Ловушки Locals: глубокие тернарники со side-effect-like ссылками; count для стабильной индексации, потом переупорядочивание списка (всё destroy + re-create); local-блоки, импортирующие друг друга в путаных цепочках; расчёт, что HCL — Тьюринг-полный (почти — но использовать его для общего программирования это запах, пишите CDK или Pulumi).

Связанные понятия

Полезные ресурсы