terraform apply падает с Error acquiring the state lock — диагностируйте и безопасно решите
Ваш terraform apply в CI сразу падает с ошибкой ниже. Предыдущий запуск пайплайна был отменён в середине apply час назад. Объясните, что такое блокировка state, почему это произошло, и БЕЗОПАСНЫЙ способ решить — включая то, что нужно проверить перед любым силовым действием.
Error: Error acquiring the state lock
Lock Info:
ID: 9db590f1-4c2a
Operation: OperationTypeApply
Who: ci-runner@build-42
Created: 1 hour ago
Info: s3 backend / dynamodb lock table
Terraform acquires a state lock to protect your state from writes
by multiple users at the same time.
Определите причину и дайте безопасное решение.
Блокировка бэкенда защищает state от одновременных записей. Отменённый запуск умер, не сняв блокировку, поэтому она застряла — на деле никто не применяет. Убедитесь по полям Who/Created, что apply не идёт, затем — terraform force-unlock с показанным ID. Не снимайте силой вслепую.
- ✗Снимать блокировку силой, не проверив, идёт ли apply
- ✗Удалять файл state или таблицу блокировок, чтобы убрать ошибку
- ✗Считать, что блокировка сама истекает по таймауту
- →Почему слепой
force-unlockопасен во время реального одновременного apply? - →Как таблица блокировок DynamoDB упорядочивает apply над бэкендом S3?
Блокировка (lock) бэкенда сериализует записи в state, чтобы два apply не смешали их. Отменённый запуск умер, не сняв аренду, поэтому она застряла — это не активный apply, а «осиротевшая» блокировка.
Безопасный порядок
# 1. Убедиться, что реальный apply НЕ идёт: поля Who/Created + статус пайплайна CI.
# 2. Только затем снять застрявшую блокировку по её ID:
terraform force-unlock 9db590f1-4c2a
# 3. Повторить apply.
Не удаляйте файл state и не чистите таблицу блокировок — это теряет данные или ломает бэкенд. force-unlock во время живого apply приведёт к повреждению state.