Data sources

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

Источники данных HCL — это блоки data в HashiCorp Configuration Language, которые во время terraform plan запрашивают существующую инфраструктуру или внешние системы и предоставляют результаты как атрибуты только для чтения для использования в блоках resource, locals и output. В отличие от блоков resource, источники данных HCL не создают инфраструктуру и не управляют ею — они просто получают информацию: последний ID AWS AMI, CIDR подсети существующей Azure Virtual Network, номер проекта GCP или имя неймспейса Kubernetes, чтобы конфигурации Terraform оставались динамичными и не полагались на захардкоженные значения. Источники данных HCL объявляются как data "<provider>_<type>" "<name>" и ссылаются через data.<type>.<name>.<attribute>, что упрощает создание конфигураций, адаптирующихся к актуальному состоянию облачных окружений без ненужной связности между state-файлами. Типичные сценарии использования: чтение секретов из Vault, получение выходных данных remote-state (data "terraform_remote_state"), запрос hosted zone в AWS Route 53 и определение текущего идентификатора вызывающей стороны через data "aws_caller_identity" для использования в ARN IAM-политик. Правильное использование источников данных HCL сохраняет идемпотентность IaC-конфигураций в циклах terraform init, terraform plan и terraform apply и поддерживает принцип DRY, исключая дублирование значений, уже управляемых в другом месте.

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

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

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

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

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

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