Ephemeral values и ресурсы
Тема дорожной карты · Terraform
Ephemeral values (эфемерные значения) — механизм Terraform, появившийся в версии 1.10, для работы с чувствительными или временными данными, которые не должны попадать ни в terraform.tfstate, ни в plan-файл. В отличие от sensitive = true (значение всё равно хранится в state, просто скрыто в выводе CLI), эфемерные значения существуют только в памяти во время текущей операции plan/apply и уничтожаются по её завершении. Основные конструкции: блок ephemeral (эфемерный ресурс — например, генерация пароля или чтение секрета из Vault), а также аргумент ephemeral = true у variable и output. Обращение к результату — через ephemeral.<type>.<name>.<attr>. OpenTofu поддерживает эфемерные ресурсы с версии 1.9+.
Как это работает
Эфемерный ресурс объявляется блоком ephemeral, а не resource:
ephemeral "random_password" "db" {
length = 20
}
У эфемерного ресурса особый жизненный цикл: Terraform «открывает» его (open), при долгих операциях «продлевает» (renew) и «закрывает» (close) в конце — вместо create/update/delete. Значение можно передать только туда, где оно тоже не сохраняется: в write-only аргументы ресурсов (суффикс _wo), в конфигурацию провайдера или в другой эфемерный ресурс. variable "token" { ephemeral = true } помечает входную переменную эфемерной; output c ephemeral = true разрешён только внутри модулей, но не в корне.
Когда применять
- Динамические секреты из Vault / AWS Secrets Manager, которые нужно прочитать в рантайме и отдать провайдеру, не сохраняя в state.
- Генерация одноразовых паролей и bootstrap-токенов.
- Короткоживущие OIDC/STS-креды для аутентификации провайдера.
Если значение нужно сохранить (ID ресурса, endpoint) — эфемерность не подходит: это для «пронести и забыть».
Типичные ошибки
- Путать
ephemeralсsensitive:sensitiveне убирает значение из state, а лишь маскирует его в CLI — секрет всё равно лежит в state-файле. - Ссылаться на эфемерное значение из обычного
resource-аргумента или из корневогоoutput— Terraform выдаст ошибку. - Ожидать стабильности между запусками: эфемерное значение вычисляется заново каждый
apply(для управляемой ротации есть write-only +*_wo_version).
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…