Выражения и функции
Тема дорожной карты · Terraform
Выражения HCL — это конструкции динамического вычисления в HashiCorp Configuration Language, позволяющие конфигурациям Terraform и OpenTofu вычислять значения во время планирования, а не полагаться на статические строки. Выражения включают ссылки на другие ресурсы и источники данных (aws_instance.web.id), входные переменные (var.environment), локальные значения (local.common_tags), встроенные функции (format(), merge(), lookup(), toset()) и условные выражения (var.enable_https ? 443 : 80), адаптирующие инфраструктуру к разным окружениям и входным значениям tfvars. Выражения HCL лежат в основе выражения for и мета-аргумента for_each, обеспечивая динамическое создание нескольких ресурсов AWS, Azure, GCP или Kubernetes из одного блока resource без дублирования кода — краеугольный камень принципа DRY в IaC. Строковые шаблонные выражения ("${var.prefix}-${local.environment}") формируют имена ресурсов и теги единообразно, а splat-выражения (aws_instance.web[*].id) собирают атрибуты всех экземпляров набора ресурсов в список для использования в выводах или других ресурсах. Понимание выражений HCL необходимо для написания лаконичных, поддерживаемых конфигураций Terraform, которые остаются читаемыми после terraform fmt и дают точный вывод terraform plan в сложных многопровайдерных развёртываниях.
Как это работает
Выражения и функции — язык конфигурации: блоки (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; канонический стиль непреклонен.
Типичные ошибки
Ловушки Выражения и функции: глубокие тернарники со side-effect-like ссылками; count для стабильной индексации, потом переупорядочивание списка (всё destroy + re-create); local-блоки, импортирующие друг друга в путаных цепочках; расчёт, что HCL — Тьюринг-полный (почти — но использовать его для общего программирования это запах, пишите CDK или Pulumi).