【Terraform】tfstateをs3で管理する
前回に引き続きterraformの話題です。
terraformにはリソースの状態を管理しているtfstateというファイルがあります。
これはtfファイルとの差分を見て、
terraform plan
したときに追加や変更、削除などの判断をしています。
なのでこれを消してしまうと管理の前提が崩れてしまい、正しくリソースを追加出来なかったりします。
terraformでも一番と言っても過言ではないくらい、超重要なファイルです。
そんなtfstateですが、既存の管理されていないリソースを追加したときには、このファイルを手動で書いたりすることがあります。
1人で管理している分にはいいのですが、複数人でやるとコンフリクトおこしたりと、管理が面倒になったりする可能性があります。
そこでまずバックアップとコンフリクト対策の為に、stateをローカルではなくs3で管理する方法があります。
これなら複数人で作業しても共有できるし、ローカルにないので安全です。
今回、terraformを導入するにあたって、僕もこの方法をとりました。
やり方としては簡単で、単純にbackendを設定するだけでOKです。
terraform { backend "s3" { bucket = "sample-bucket" key = "terraform.tfstate.aws" region = "ap-northeast-1" } }
これであとは、
terraform init
してワークスペースを初期化すればbackendを変更しますか?と確認してきますので、yes
とうてば完了です。
これでs3と同期され、他の人が追加したリソースを共有できるようになりました。
1人で作業する分には必要ないかな・・・と思いましたが、バックアップとしてもお手軽なので有用性は高いと思います。
一つ注意しないといけないのは、terraform自体のバージョンが0.11以上じゃないと対応していません。
なのでバージョンチェックを入れておけば更に厳密かも。
terraform { required_version = ">= 0.11.0" backend "s3" { bucket = "sample-bucket" key = "terraform.tfstate.aws" region = "ap-northeast-1" } }
では今回はこのあたりで。