■ はじめに
https://dk521123.hatenablog.com/entry/2023/04/20/172823
において、 エラー「AlreadyExistsException: Workflow with name 'xxx-xxxx' already Exists」 について、ひとまずの回避案を提示したが、ちゃんとした解決案が分かった。 その解決案に、tfstateファイルってのが深くかかわってくるので、メモ。
目次
【1】前提知識:Terraformの環境への適用の仕方について 【2】tfstateファイル 【3】目的 【4】terraform init コマンドでの生成物について 【5】tfstateファイルの管理場所 1)解決案 【6】tfstateをS3に置く 1)補足:State Locking(複数人での開発のために)
【1】前提知識:Terraformの環境への適用の仕方について
terraform では、 terrafrom apply の後に、再度、terrafrom apply を行うと、 前回までの差分のみを適用して、実行される => この前回の状態などを保持する役割をするものが 「tfstateファイル (TerraForm State;Terraform状態ファイル)」になる
【2】tfstateファイル
* Terraformが管理しているリソースの現在の状態を表すファイル * 形式は、JSON * デフォルトのファイル名は、「terraform.tfstate」
https://qiita.com/masaaania/items/0ed291b267032a7699ad
【3】目的
* 「terraform plan」を実行した場合、現在の状態との差分が表示されるが これは、tfstateファイルに記述されている現在の状態と HCLで記述された定義との差分で表示する => 詳細は、以下の公式ドキュメントを参照のこと。
https://developer.hashicorp.com/terraform/language/state/purpose
【4】terraform init コマンドでの生成物について
* tfstateファイルを含む terraform init コマンドでの生成物について説明する
[1] .terraformディレクトリ
* terraformがキャッシュされたプラグインとモジュールを 管理するディレクトリ
[2] .tfstateファイル
* Terraformによって作成された現在の構成状態を記録してあるファイル => ★今回のテーマ★
[3] .terraform.lock.hclファイル
* プロバイダーとモジュールの依存関係や互換性が記録
https://rurukblog.com/post/terraform-lock-hcl/
【5】tfstateファイルの管理場所
* デフォルトでは、ローカルに生成される => 1人で開発している場合であればローカルでもいいが(それでもダメだが) 複数で開発していた場合、以下の関連記事で扱ったようなエラーになる等 トラブルの原因になる
Terraform ~ 特定リソースのみデプロイする ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823
1)解決案
* AWSであれば、S3に置く * 可能であれば、「Terraform Cloud」ってのもあり (外部サイトに繋ぐので、できない現場が多いかもしれないが) => 利点については、以下のサイトを参照
https://dev.classmethod.jp/articles/terraform_tfstate_management_tfc/
【6】tfstateをS3に置く
* 「backend "s3"」を指定した後に 「terraform init」を実行
https://developer.hashicorp.com/terraform/language/settings/backends/s3
backend.tf
terraform { # ★ここに注目★ backend "s3" { bucket = "your-s3-bucket" key = "tf/dev/terraform.tfstate" region = "us-west-2" encrypt = true }
1)補足:State Locking(複数人での開発のために)
* DynamoDB 使うと実現可能
参考文献
https://zenn.dev/sway/articles/terraform_staple_sharestate
https://techgrowup.net/2022/04/18/terraform%E3%81%A7tfstate%E3%82%92s3%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B/
https://zenn.dev/sway/articles/terraform_staple_sharestate
関連記事
Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
Terraform ~ Docker ~
https://dk521123.hatenablog.com/entry/2023/04/10/193239
Terraform ~ 特定リソースのみデプロイする ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823
Terraform ~ 複数環境へデプロイすることを考える ~
https://dk521123.hatenablog.com/entry/2023/05/06/003645
Terraform ~ 機密情報の扱いを考える ~
https://dk521123.hatenablog.com/entry/2023/05/18/005103