Если вы удалили стейт-файл с локальной машины и загрузили его в бэкенд (провайдер), будет ли он подгружаться при выполнении terraform init?

«Если вы удалили стейт-файл с локальной машины и загрузили его в бэкенд (провайдер), будет ли он подгружаться при выполнении terraform init?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, если бэкенд (например, S3, Terraform Cloud) был корректно настроен изначально, то terraform init подгрузит состояние (state) из удаленного хранилища.

Сценарий и действия:

  1. Исходная конфигурация: В вашем коде есть блок backend, например, для AWS S3:
    terraform {
      backend "s3" {
        bucket = "my-terraform-state-bucket"
        key    = "prod/network.tfstate"
        region = "us-east-1"
      }
    }
  2. Удаление локального state: Вы удалили локальный файл terraform.tfstate.
  3. Выполнение terraform init:
    • Terraform прочитает конфигурацию бэкенда из кода.
    • Он подключится к указанному удаленному хранилищу (S3).
    • Загрузит актуальный файл состояния по указанному пути (key) в бакете (bucket).
    • В выводе команды вы увидите сообщение: "Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes."

Критически важные условия:

  • Бэкенд должен быть сконфигурирован до удаления локального state. Если вы удалите state до настройки бэкенда, восстановить его автоматически будет невозможно.
  • У вас должны быть корректные права доступа (IAM-роли, ключи) для чтения из удаленного бэкенда.
  • Если удаленный state также был утерян, Terraform создаст новое пустое состояние, что приведет к расхождению с реальной инфраструктурой. Восстановление потребует ручного импорта (terraform import) каждого ресурса.