Блоки и аргументы

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

Блоки HCL — это верхнеуровневые структурные единицы HashiCorp Configuration Language, определяющие каждый элемент конфигурации Terraform или OpenTofu: от создаваемых ресурсов инфраструктуры до учётных данных провайдера и экспонируемых выходных значений. Наиболее распространённые блоки HCL: resource (объявляет управляемый объект, например инстанс AWS EC2 или Cloud SQL GCP), provider (настраивает аутентификацию и конечную точку для облачного провайдера), variable (объявляет входное значение), output (экспонирует значение после terraform apply), data (читает существующую инфраструктуру), locals (определяет вычисляемые промежуточные значения) и module (вызывает переиспользуемую дочернюю конфигурацию). Блоки HCL следуют единому синтаксису: ключевое слово типа блока, необязательные метки типа и имени, а также тело в фигурных скобках, содержащее назначения атрибутов и вложенные блоки. Terraform и OpenTofu обрабатывают все .tf-файлы в директории как единую логическую конфигурацию, поэтому блоки HCL можно разбивать по файлам — main.tf, variables.tf, outputs.tf — без влияния на обработку terraform plan или terraform init. Понимание блоков HCL и правил их допустимого вложения необходимо для написания корректных конфигураций Terraform, предотвращения ошибок terraform validate и создания переиспользуемых модулей для AWS, Azure, Kubernetes и других провайдеров.

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

Блоки и аргументы — язык конфигурации: блоки (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).

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

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