Terraform 1.15: динамические источники модулей, устаревание переменных и новая функция convert()
В версии 1.15 появились const-переменные для динамических источников модулей, встроенный атрибут deprecated и функция convert(). Разбираем все изменения.
Новости TprogerTerraform 1.15, вышедший 13 мая 2026 года, позволяет использовать переменные прямо в путях к модулям — раньше это требовало жёсткого прописывания путей или обходных скриптов. Кроме того, в релизе появились атрибут deprecated для плавного вывода переменных из обращения, встроенная функция преобразования типов convert() и нативные сборки под Windows ARM64.
Релиз вышел 13 мая 2026 года. Авторы: Apoorva Murthy и Jacob Plicque, команда платформенной инженерии HashiCorp.
Ключевые выводы
Terraform 1.15: что изменилось
- Атрибут
const = trueу переменной позволяет использовать её вsourceмодуля и версионных ограничениях — динамические пути без хардкода - Новый атрибут
deprecatedна блокахvariableиoutput: при использовании устаревшего параметра выдаётся предупреждение - Функция
convert(value, type)— явное приведение типов для устранения неоднозначности в условных выражениях и пустых коллекциях - Нативные бинарники для Windows ARM64 (Surface Pro, Parallels на M1/M2)
- S3-бэкенд теперь поддерживает аутентификацию через
aws login(AWS CLI v2.32.0+) без долгосрочных ключей доступа
Terraform 1.15: динамические источники модулей
До версии 1.15 путь к модулю в блоке source должен был быть строковым литералом. Это вынуждало команды либо дублировать конфигурации, либо прибегать к скриптовым обёрткам. В 1.15 вводится атрибут const для переменных: он сигнализирует Terraform, что переменная известна на этапе terraform init и может участвовать в разрешении источников.
Атрибут const нельзя совмещать с sensitive или ephemeral — они взаимоисключающие. При попытке использовать в источнике обычную переменную без const = true Terraform выдаст ошибку на стадии init.
Эта функциональность работает и для вложенных модулей, если их входные переменные также объявлены с const = true. Изменение особенно востребовано в крупных монорепозиториях, где среда окружения (dev/staging/prod) определяет, из какого пути загружается модуль.
Устаревание переменных и выходных значений
Авторы модулей теперь могут явно пометить переменную или выходное значение как устаревшее, не удаляя их из кода. Новый атрибут deprecated принимает строку с объяснением — она появляется в диагностическом предупреждении при валидации.
Предупреждение выдаётся в трёх ситуациях:
- Значение передаётся в устаревшую переменную через CLI, переменные окружения или tfvars
- В вызывающем модуле есть ссылка на устаревший вывод дочернего модуля
- В вызывающем модуле есть ссылка на устаревший вывод в
localsили других выражениях
Важное исключение: атрибут deprecated запрещён на выходных значениях корневого модуля — там его использование завершится ошибкой. Это ограничение сделано намеренно: корневой модуль — конечная точка исполнения, и устаревание на этом уровне лишено смысла.
Встроенное приведение типов: функция convert()
Система типов Terraform обычно справляется с неявными преобразованиями, но в ряде случаев выводит не тот тип: условные выражения с разными типами в ветках, пустые коллекции ({} как пустой объект, [] как пустой кортеж), сравнение без неявного приведения.
Новая функция convert() решает эти проблемы явным приведением типов прямо в HCL-выражении, без введения промежуточных переменных:
Дополнительные изменения
Нативные сборки для Windows ARM64
Terraform теперь официально поддерживает Windows ARM64: устройства Surface Pro, Windows Dev Kit 2023, а также виртуальные машины Windows на Mac M1/M2 через Parallels. Отдельная сборка под архитектуру устраняет накладные расходы на эмуляцию x86_64.
S3-бэкенд: аутентификация через aws login
AWS CLI v2.32.0 представил метод aws login, позволяющий использовать учётные данные консоли управления для программного доступа без долгосрочных ключей доступа. S3-бэкенд Terraform теперь напрямую поддерживает этот механизм — нет необходимости отдельно настраивать AWS Provider.
Ограничения типов для выходных значений
Блоки output теперь поддерживают явные ограничения типов через атрибут type — аналогично тому, как это давно работает для входных переменных. Это помогает документировать и валидировать контракты модулей.
Функции в mock-блоках тестов
Terraform Test теперь разрешает вызовы функций внутри mock-блоков. Это открывает возможность генерировать тестовые данные нужного формата: GUID через uuid(), идентификаторы Azure-ресурсов через format(). Ранее попытка вызвать функцию в mock завершалась ошибкой «Functions may not be called here».
Валидация переменных в Stacks
Для переменных в Terraform Stacks (CLI-фича) добавлена поддержка блока validation с атрибутами condition и error_message. Условие ссылается на значение переменной через var.value. Это позволяет авторам модулей выявлять ошибки конфигурации на стадии init, а не во время apply.
Часто задаваемые вопросы
Что такое const-переменная в Terraform 1.15?
Это переменная с атрибутом const = true, значение которой Terraform может использовать на стадии init — до основного цикла планирования. Такие переменные разрешены в атрибутах source и версионных ограничениях модулей. Обычные переменные в этих контекстах по-прежнему запрещены.
Как использовать атрибут deprecated для переменных?
Добавьте deprecated = "..." в блок variable или output. При передаче значения в эту переменную или ссылке на устаревший вывод Terraform выдаст диагностическое предупреждение с вашим сообщением. На выходные значения корневого модуля атрибут не распространяется.
Зачем нужна функция convert(), если Terraform и так выполняет приведение типов?
Неявное приведение работает не везде: в условных выражениях с разными типами в ветках, при создании пустых коллекций ({} интерпретируется как объект, а не map), при сравнениях без автоматического преобразования. Функция convert() снимает неоднозначность явно и делает намерение автора понятным из кода.
Как обновиться до Terraform 1.15?
Скачайте бинарник с официального сайта HashiCorp или обновите через менеджер пакетов. Перед обновлением ознакомьтесь с руководством по миграции на 1.15 — несмотря на то что это минорный релиз, в нём есть изменения в поведении диагностических предупреждений. Terraform Cloud и Enterprise-поддержка также обновлены.
Поддерживается ли Terraform 1.15 на Apple Silicon без Parallels?
Terraform на macOS ARM64 (Apple Silicon) поддерживался раньше. Нативные сборки ARM64 в 1.15 добавлены для Windows ARM64 — устройств на базе Snapdragon X (Surface Pro) и Dev Kit 2023. Для Mac M1/M2 речь идёт о поддержке виртуальных машин Windows через Parallels, а не о macOS-бинарниках.
Итоги
Terraform 1.15 закрывает один из самых популярных запросов на GitHub — динамические источники модулей. Это меняет подход к организации монорепозиториев платформенных команд.
Terraform 1.15 сосредоточен на удобстве авторов модулей: три крупных улучшения снижают количество шаблонного кода и делают конфигурации более выразительными. Поддержка Windows ARM64 и обновлённая аутентификация в S3 расширяют охват платформ и упрощают работу в корпоративных средах.
Скачайте Terraform 1.15, изучите руководство по обновлению и ознакомьтесь с полным списком изменений на GitHub.