Outputs

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

Выходные значения Terraform — это блоки output в HCL, которые экспонируют выбранные атрибуты конфигурации Terraform или OpenTofu после завершения terraform apply, делая их доступными для операторов, CI/CD-конвейеров и потребляющих конфигураций через data "terraform_remote_state". Каждый блок output объявляет имя, выражение value, ссылающееся на атрибут ресурса или локальное значение, необязательное description для документации и флаг sensitive = true, предотвращающий отображение значения в выводе terraform plan или terraform apply — что критически важно для секретов, таких как пароли баз данных или токены Vault. Выходные значения Terraform служат публичным API модуля: родительские конфигурации вызывают дочерние модули и потребляют их выходные данные (например, module.vpc.subnet_ids) для связывания ресурсов AWS, Azure, GCP и Kubernetes без дублирования управления состоянием между корневыми модулями. Команда CLI terraform output извлекает значения выходных данных из текущего state-файла, позволяя скриптам и шагам конвейеров GitHub Actions или GitLab CI программно потреблять атрибуты созданных ресурсов — DNS-имена балансировщиков нагрузки или ARN S3-бакетов. Разработка чётких, хорошо задокументированных выходных значений Terraform является ключевым аспектом проектирования модулей, снижающим межкомандную зависимость и позволяющим потребителям обновлять версии модулей независимо, не ломая свои конфигурации.

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

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

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

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

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

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