テクノロジー · 実用ガイド

Terraform の「Error acquiring the state lock」?force-unlock 前に backend と owner を証明する

active writer、abandoned lock、wrong backend、permission failure を区別し、lock record を保存して最小の復旧を選びます。

Original technical diagram separating Terraform backend identity, lock metadata, and the active operation owner.
オリジナルイラスト:backend、lock record、owner を別々に証明します。 Watch at Ease

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 です。

Original recovery decision diagram for live Terraform operations, stale locks, Azure blob leases, and permission errors.
オリジナルイラスト:故障 class を確認してから recovery を選びます。 Watch at Ease