症状
plan 或 apply 以 Error acquiring the state lock 失败,并打印出锁 ID、持有者与获取时间。这是后端在保护状态免受并发修改。锁可能被活跃的同事或 CI 运行持有,也可能由崩溃的运行遗留;区分这两者很重要,因为对活跃运行强制解锁可能损坏状态。
诊断
读取锁 ID 与持有者;确认无运行在进行;仅在确认是陈旧锁时用 force-unlock。
terraform plan 2>&1 | head -20
根因
状态后端持有一个来自活跃或陈旧运行的锁,Terraform 拒绝继续,以防两个运行并发修改同一状态。
修复
若持有者仍在运行,等待或与其协调;仅在确认运行已死时用确切锁 ID 强制解锁。通过串行化 CI 运行并确保被中断的运行释放锁来防止复发。
验证
再次运行 plan 确认能获取锁并继续,并确认后端的锁对象已消失。干净获取即证明陈旧锁已清除。
常见陷阱
不了解持有者就强制解锁会让两个运行同时写同一状态;务必先确认无活跃运行。