Для чего нужен state file в Terraform?

«Для чего нужен state file в Terraform?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

State file (terraform.tfstate) — это JSON-файл, который хранит полное текущее состояние управляемой инфраструктуры: идентификаторы реальных облачных ресурсов, их атрибуты и зависимости между ними.

Основные функции:

  1. Сопоставление кода с реальностью: Сравнивает конфигурацию (.tf файлы) с фактическим состоянием в облачном провайдере, чтобы определить план изменений (terraform plan).
  2. Хранение метаданных: Содержит чувствительные данные, такие как внутренние ID ресурсов от провайдера (например, i-0abc123def456 для EC2-инстанса), которые нельзя получить повторно из кода.
  3. Управление зависимостями: Отслеживает граф зависимостей ресурсов для корректного порядка создания, обновления или удаления.

Практический пример удаленного бэкенда (S3 с блокировкой DynamoDB):

terraform {
  backend "s3" {
    bucket         = "company-terraform-state-prod"
    key            = "network/terraform.tfstate"
    region         = "eu-west-1"
    encrypt        = true
    dynamodb_table = "terraform-state-lock"
  }
}

Почему это важно: Без state file Terraform не сможет понять, какие ресурсы уже созданы, и при каждом запуске будет пытаться создать всё заново. Удаленное хранение с блокировкой (state locking) критично для командной работы, чтобы предотвратить конфликтующие одновременные изменения.