tfenv для версий

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

tfenv — это менеджер версий Terraform, позволяющий инженерам устанавливать, переключаться между несколькими бинарниками Terraform и фиксировать конкретные версии на macOS, Linux и WSL, решая типичную проблему поддержки нескольких проектов с разными требованиями к синтаксису HCL или совместимости провайдеров. Установка версии — это просто tfenv install 1.9.0, а tfenv use 1.9.0 активирует её глобально; размещение файла .terraform-version в директории проекта заставляет tfenv автоматически переключаться при cd в неё. tfenv особенно ценен при обновлении с синтаксиса Terraform 0.12 до 0.13+ или при тестировании совместимости с OpenTofu рядом со сборками HashiCorp Terraform. Для команд, стандартизирующихся на OpenTofu, эквивалентный инструмент — tofuenv, следующий тем же соглашениям и поддерживающий тот же формат файла фиксации .terraform-version.

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

tfenv для версий — один Go-бинарник (terraform или tofu). Установка: tfenv / tfswitch (версионник — рекомендуется, проекты пинят версии), официальный tarball, пакетные менеджеры (Homebrew, apt). Раскладка проекта: *.tf конфиги, terraform.tfvars (или *.auto.tfvars) для значений переменных, .terraform/ (в gitignore — плагины провайдеров + lockfile), terraform.tfstate (state-файл — НИКОГДА не коммитьте, если содержит секреты; используйте remote backend). Команды: init, plan, apply, destroy, validate, fmt.

Когда применять

Всегда закрепляйте версию Terraform / OpenTofu (required_version = ">= 1.5") и провайдеров (required_providers { ... version = "~> 5.0" }) — иначе у разных членов команды разное поведение. tfenv/tfswitch — чтобы per-project версии не конфликтовали. Коммитьте .terraform.lock.hcl (этот — да), версии провайдеров детерминированы. Всегда terraform fmt перед коммитом; CI должна enforce.

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

Ловушки tfenv для версий: нет пиннинга версий → "работает на моём ноуте" / breaking change в CI; удаление .terraform/ и init без lockfile (можете получить другую patch-версию провайдера); terraform apply с ноута в production (нет audit trail — используйте CI); переключение Terraform на OpenTofu в середине проекта без тестов миграции (мелкие, но реальные расхождения).

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

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

Проверить знания (1)

Загрузка вопросов…