State и backends
Тема дорожной карты · Terraform
Состояние Terraform — это авторитетная запись, сопоставляющая каждый блок HCL-ресурса с реальным объектом, который он представляет — инстансом EC2, S3-бакетом, Kubernetes-неймспейсом — вместе с текущими значениями атрибутов и графом зависимостей. Без состояния Terraform terraform plan не имел бы базы для сравнения и не мог бы определить, какие изменения нужны для достижения желаемой конфигурации. Состояние хранится в terraform.tfstate локально по умолчанию, но все production-рабочие процессы должны использовать remote-бэкенд (S3 с DynamoDB-блокировкой, Azure Blob Storage, GCS или Terraform Cloud), чтобы состояние было общим, версионируемым и заблокированным во время terraform apply. Состояние Terraform также является механизмом обнаружения дрейфа: запуск terraform plan сравнивает живую инфраструктуру с последним известным состоянием, помечая ресурсы, изменившиеся вне IaC-управления.
Как это работает
State и backends — источник истины того, что Terraform считает существующим. Маппит HCL-ресурсы к реальным ID + трекает атрибуты. Local state (terraform.tfstate) ок для соло-обучения; всегда используйте remote backend (S3+DynamoDB, Yandex Object Storage+lockable, Terraform Cloud, GitLab, или terraform login) для команды и production — даёт state locking (предотвращает конкурентные apply), versioned history, контроль доступа. State может содержать секреты — шифруйте.
Когда применять
Remote backend — с первого дня любого командного проекта. Делите state per environment + per concern (один большой state = blast radius на плохом изменении). Подкоманды terraform state (mv, rm, import) — осторожно, они напрямую мутируют state. Drift-detection — terraform plan в CI по расписанию.
Типичные ошибки
Ловушки State и backends: коммит terraform.tfstate в git (содержит секреты + не выдержит конкурентных правок); удаление state "начать заново" (осиротит каждый ресурс — останутся в облаке, не отслеживаются, тратят деньги); два человека одновременный apply без локинга (corruption state); state-хирургия (state rm + import) без бекапа предыдущего state.