← 中文资源

简体中文版本

Terraform 报 Error acquiring the state lock

通过确认没有正在运行的 plan/apply,仅在安全时 force-unlock,解决 Terraform 的状态锁错误。

阅读英文原文

症状

plan 或 apply 以 Error acquiring the state lock 失败,并打印出锁 ID、持有者与获取时间。这是后端在保护状态免受并发修改。锁可能被活跃的同事或 CI 运行持有,也可能由崩溃的运行遗留;区分这两者很重要,因为对活跃运行强制解锁可能损坏状态。

诊断

读取锁 ID 与持有者;确认无运行在进行;仅在确认是陈旧锁时用 force-unlock。

terraform plan 2>&1 | head -20

根因

状态后端持有一个来自活跃或陈旧运行的锁,Terraform 拒绝继续,以防两个运行并发修改同一状态。

修复

若持有者仍在运行,等待或与其协调;仅在确认运行已死时用确切锁 ID 强制解锁。通过串行化 CI 运行并确保被中断的运行释放锁来防止复发。

验证

再次运行 plan 确认能获取锁并继续,并确认后端的锁对象已消失。干净获取即证明陈旧锁已清除。

常见陷阱

不了解持有者就强制解锁会让两个运行同时写同一状态;务必先确认无活跃运行。