4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TerraformのS3 + DynamoDBでのstate管理が非推奨になっていた。

Posted at

1. はじめに

TerraformでS3バックエンドを利用してterraform.tfstateを管理する際、これまではDynamoDBを併用してロックを行う構成がよく採用されていました。
DynamoDBテーブルを作成し、そこにロック情報を保存することで、複数のユーザーやCI/CDパイプラインが同時にstateを更新する競合を防ぐ仕組みです。

先日、会社のメンバーから

「DynamoDB使わなくてもstate管理できるよ。」

と教えてもらい、調べてみたところ、
Terraform v1.11.0のリリースにより、DynamoDBを利用したロックは非推奨(deprecated) とされ、S3自体の機能を利用したネイティブなstate lockが正式にサポートされていたようです。
公式のリリース情報を中心に背景情報などを整理してみました。
誰かの参考に慣れば嬉しいです。

2. S3のtfstate管理のネイティブサポートについて

従来、backend "s3" を利用する際には、S3 バケットで状態ファイルを管理しつつ、並行実行による競合を防ぐために DynamoDB を利用してロックを行うのが一般的でした。
Terraform v1.11 では、S3 バックエンド自体がロック機能を持つようになり、追加の DynamoDB リソースを用意せずにロック管理が可能となりました。

3. 背景と実装の仕組み

この仕組みは、S3の 条件付き書き込み(conditional writes) を活用して実現されているそうです。
Terraformは操作開始時に.tflockファイルをS3に作成し、同一ファイルがすでに存在する場合は書き込みを拒否します。操作完了後に.tflockファイルを削除することでロックが解除されます。

4. GAまでの流れと今後の見通し

この変更は v1.10 系で実験的機能として導入され、その後 v1.11 で General Availability (GA) となりました。
Terraform 公式ドキュメントによると、今後は DynamoDB を利用したロックは非推奨となり、use_lockfile オプションを利用することが推奨されています。

ドキュメント内では DynamoDB を利用したロックが Deprecated と明記されており、将来的に削除される可能性も示唆されています。

5. 設定例

以下に、S3 バックエンドでの設定例を示します。DynamoDB テーブルを指定する必要がなくなり、代わりに use_lockfile = true を指定するだけでロックが有効になります。

terraform {
  backend "s3" {
    bucket        = "your-bucket"
    key           = "terraform.tfstate"
    region        = "ap-northeast-1"
    use_lockfile  = true
  }
}

6. まとめ

  • Terraform v1.11 で S3 バックエンドにネイティブロックが追加された。
  • DynamoDB を利用したロックは非推奨となり、use_lockfile の利用が推奨されている。
  • 公式ドキュメント上で非推奨が明記されており、将来的に DynamoDB サポートが削除される可能性がある。

今後は新規構成では DynamoDB を利用せず、use_lockfile を前提として設計していきましょう!

参考記事

  • Terraform 公式ドキュメント

  • v1.11.0リリースノート

  • 参考にさせていただいた記事

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?