Короткий ответ
terraform init скачивает и устанавливает указанные providers и модули, инициализирует backend для state и подготавливает рабочую директорию (.terraform) к выполнению plan/apply; без неё Terraform не знает, какие плагины использовать.
Как это работает подробнее
Terraform читает блоки required_providers и module.source, скачивает нужные версии плагинов провайдеров в .terraform/providers, а модули — в .terraform/modules, и настраивает подключение к backend (например, S3) для хранения state.
Пример кода
commands.sh
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 5.0"...
- Installing hashicorp/aws v5.31.0...
Terraform has been successfully initialized!Что использовать на практике
- Практика. init нужно повторять при клонировании репозитория на новую машину, при добавлении/обновлении провайдера или модуля, при смене backend. В CI/CD это всегда первый шаг пайплайна перед plan.
Подводные камни
- Ошибка. забывать перезапустить init после изменения блока backend (Terraform может продолжать использовать старую конфигурацию до явного
terraform init -reconfigureили-migrate-state); коммитить папку.terraformв git, что раздувает репозиторий и может привести к конфликтам версий плагинов.