Lapis Lazuli

technical blog for web developer

【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"
  }
}

では今回はこのあたりで。