State locking
Тема дорожной карты · Terraform
Блокировка состояния Terraform — это механизм безопасности, предотвращающий одновременное изменение одного и того же terraform.tfstate двумя параллельными операциями terraform apply или terraform plan -lock=true, что привело бы к его повреждению. Исторически при S3-бэкенде блокировка требовала отдельной DynamoDB-таблицы, куда Terraform писал запись блокировки до любой операции, меняющей состояние, и освобождал её по завершении. Начиная с Terraform 1.10 (и в OpenTofu) S3-бэкенд умеет нативную блокировку через lock-файл прямо в бакете — параметр use_lockfile = true, и отдельная DynamoDB больше не нужна. Terraform Cloud, Azure Blob Storage и GCS-бэкенды предоставляют нативную блокировку состояния без дополнительной инфраструктуры. Если процесс прерывается в середине apply и блокировка не освобождается автоматически, можно принудительно снять её через terraform force-unlock <lock-id> — но только после подтверждения отсутствия других активных операций, поскольку обход блокировки состояния Terraform на живом воркспейсе может привести к повреждению состояния.
Как это работает
Блокировка состояния идёт в связке с remote backend — источником истины того, что Terraform считает существующим. Local state (terraform.tfstate) ок для соло-обучения; всегда используйте remote backend (S3 с use_lockfile, Yandex Object Storage, 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 по расписанию.
Типичные ошибки
Ловушки блокировки состояния: коммит terraform.tfstate в git (содержит секреты + не выдержит конкурентных правок); удаление state "начать заново" (осиротит каждый ресурс — останутся в облаке, не отслеживаются, тратят деньги); два человека одновременный apply без локинга (corruption state); state-хирургия (state rm + import) без бекапа предыдущего state.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…