はじめに
Terraformで terraform plan や terraform apply を実行した際に、以下のようなエラーが出て操作できなくなったことはありませんか?
Error: Error acquiring the state lock
これは、前回の terraform apply が途中で中断された(Ctrl+Cなど)ことにより、S3上のステートファイルにロックが残ってしまったケースで発生します。
本記事では、このロックの解除方法を紹介します。
環境
- Terraform v1.14.3
- バックエンド: S3
エラー内容
terraform plan を実行すると、以下のエラーが表示されます。
╷
│ Error: Error acquiring the state lock
│
│ Error message: operation error S3: PutObject, https response error StatusCode: 412,
│ RequestID: ~~~~~~~~~~~~, api error PreconditionFailed:
│ At least one of the pre-conditions you specified did not hold
│ Lock Info:
│ ID: 8b406b57-abaf-859b-e60f-b7bddbc1e985
│ Path: ~~~~~~~~~~~~/terraform.tfstate
│ Operation: OperationTypeApply
│ Who: test@Mac
│ Version: 1.14.3
│ Created: 2026-02-07 07:07:48.431836 +0000 UTC
│ Info:
│
│ Terraform acquires a state lock to protect the state from being written
│ by multiple users at the same time. Please resolve the issue above and try
│ again. For most commands, you can disable locking with the "-lock=false"
│ flag, but this is not recommended.
原因
Terraformはステートファイルの同時書き込みを防ぐため、apply や plan(書き込みを伴う場合)の実行時にロックを取得します。
通常は処理完了後に自動で解放されますが、以下のようなケースでロックが残ってしまうことがあります。
-
terraform applyの実行中に Ctrl+C で強制終了した - ネットワーク障害で処理が中断された
- プロセスが予期せずクラッシュした
解決方法
1. 他に実行中の操作がないことを確認する
これが最も重要なステップです。
ロックを強制解除する前に、チームメンバーが同じステートに対して terraform apply を実行中でないことを必ず確認してください。実行中のロックを解除すると、ステートファイルが破損する危険性があります。
エラーメッセージの Who や Created の情報を確認し、誰がいつロックを取得したのかを把握しましょう。
2. terraform force-unlock を実行する
安全を確認したら、エラーメッセージに表示されている Lock ID を指定して以下のコマンドを実行します。
terraform force-unlock 8b406b57-abaf-859b-e60f-b7bddbc1e985
確認プロンプトが表示されるので、yes と入力します。
Do you really want to force-unlock?
Terraform will remove the lock on the remote state.
This will allow local Terraform commands to modify this state, even though it
may still be in use. Only 'yes' will be accepted to confirm.
Enter a value: yes
Terraform state has been successfully unlocked!
3. 動作確認
ロック解除後、正常に操作できることを確認します。
terraform plan
エラーが解消されていれば完了です。
-lock=false は使わないで
エラーメッセージにも記載されていますが、-lock=false フラグを使えばロックを無視して操作を実行できます。
# 非推奨!
terraform plan -lock=false
しかし、これはロックの仕組みそのものを無効化するため、複数人での運用時にステートの競合・破損を引き起こすリスクがあります。必ず force-unlock で正しくロックを解除しましょう。
まとめ
| 手順 | コマンド |
|---|---|
| ロックIDの確認 | エラーメッセージの ID フィールドを確認 |
| 他の実行がないことを確認 |
Who と Created をチェック |
| ロック解除 | terraform force-unlock <LOCK_ID> |
| 動作確認 | terraform plan |
ステートロックはチーム開発において重要な安全機構です。
解除する際は、必ず他に実行中の操作がないことを確認してから行いましょう。