你好,
你目前遇到的情況,是 CI/CD Agent 在持有 Terraform state lock 期間意外終止,導致用於 state 協調的 DynamoDB Table 中仍然保留鎖定記錄,這是相當常見的情況。在強制解除鎖定之前,最重要的是先確認目前沒有其他 Terraform 操作正在使用相同的 state file,因為移除仍在使用中的有效鎖定可能導致 state corruption。
如果確認該鎖定已經成為孤立鎖定(orphaned lock),Terraform 提供了 terraform force-unlock <LOCK_ID> 指令。這通常是最安全且建議使用的方法,因為它會按照 Terraform 預期的工作流程移除 state lock。你通常可以在失敗的 plan 或 apply 操作所產生的錯誤訊息中取得 Lock ID。
如果執行 force-unlock 後鎖定記錄仍然存在,可以進一步檢查對應的 DynamoDB lock entry。在考慮手動刪除記錄之前,請先確認 lock owner、timestamp 以及 operation 都與已失敗的 CI Job 相符,確保該鎖定確實已經失效。
另外,我也建議檢查 CI/CD Pipeline 的 logs,以了解 Agent 為甚麼會意外終止。在許多環境中,加入 Job cleanup logic、graceful shutdown handling,以及針對 stale lock 的監控,可以降低類似問題再次發生的機會。如果多個團隊共用同一個 remote state,建議建立正式的 force-unlock procedure,避免誤刪仍然有效的 lock。
希望以上資訊可以幫助你進一步處理這個問題。如果你覺得這個回答有幫助,請點擊 「Accept Answer」,讓我知道這個回答已解決你的疑問。
Jason