テクノロジー · 実用ガイド
Terraform の「Error acquiring the state lock」?force-unlock 前に backend と owner を証明する
active writer、abandoned lock、wrong backend、permission failure を区別し、lock record を保存して最小の復旧を選びます。

Terraform の state lock は concurrent writer を防ぐ安全境界です。同じ error が active terminal、CI job、中断した remote session、wrong backend、permission failure から生じるため、stale file とは限りません。
まず完全な lock record を保存し、effective backend、state object、workspace、active owner を証明します。同じ state の abandoned lock だけが force-unlock や provider-specific lease break の対象です。
完全なエラーとロック情報を保存
再試行前に最初の error を保存します。Lock ID、Path、Operation、Who、Version、Created、Info と、正確な command、directory、workspace、Terraform version を記録します。credential だけを伏せ、identity は残します。
permission denial、table 不在、誤った key、空 metadata、conditional write conflict は同じ故障ではありません。status code と resource 名を保持します。
実際の backend と state object を証明
実際の作業 directory で初期化された backend を確認し、type、account/project、bucket/container、key/prefix、workspace を記録します。別 checkout の command が同じ state を指すとは限りません。
S3 では .tflock と非推奨 DynamoDB lock を区別して権限を確認します。GCS は bucket/prefix、Azure は正確な blob と lease を特定します。
active owner がいないことを確認
local terminal と process、CI job、retry、remote run、deployment concurrency を調べ、operation、user、time、workspace、state path を lock record と照合します。
writer が active なら待つか正常停止し、Terraform に release させます。-lock=false を併用しません。
stale lock と権限・設定エラーを分離
stale lock は owner operation が終了し automatic release だけ失敗した状態です。wrong backend、local fallback、DeleteObject denial、missing table、broken metadata は別の故障です。
backend evidence を保存してから再初期化し、secret を公開せず lock object に必要な最小 permission だけを修正します。
backend 別の最小復旧を実行
検証済み configuration で自分の abandoned lock だけに正確な LOCK_ID で terraform force-unlock を使います。command は infrastructure を変更しませんが、誤った unlock は別 writer を許します。
Azure の Break lease も owner proof 後だけです。broken lease は renew できず break period があり得ます。state 自体は決して削除しません。
state identity を検証し再発防止
通常 locking を有効にした read-only plan を一度実行し、同じ backend、workspace、state serial/version、resource を確認します。versioning と recovery control も確認します。
state object ごとに CI writer を直列化し、置換された job を安全に cancel します。同じ state が一人の lock owner だけを受け入れることが closure です。
