terraform init

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

terraform init — это первая команда Terraform CLI, которую нужно выполнить в любой рабочей директории с HCL-конфигурационными файлами: она загружает и устанавливает провайдеры, объявленные в required_providers, получает удалённые модули из Terraform Registry или приватного реестра и настраивает remote-бэкенд состояния, указанный в блоке terraform. Запуск terraform init создаёт директорию .terraform/ и файл .terraform.lock.hcl, фиксирующий точные версии провайдеров — это гарантирует, что terraform plan и terraform apply используют одинаковые бинарники провайдеров для всех членов команды и CI-раннеров. Повторный запуск terraform init -upgrade обновляет версии провайдеров и модулей в рамках ограничений, заданных в HCL, тогда как terraform init -backend=false пропускает инициализацию бэкенда для локального тестирования. terraform init нужно повторно запускать при добавлении нового провайдера, изменении конфигурации бэкенда или клонировании репозитория на новую машину.

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

terraform init — один 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.

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

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

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

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