TerraformのstateをS3でリモート管理する

Terraformの管理下にあるリソースの情報は tfstate ファイルに保存されている。たとえば、チームでこのtfstateを共有したいときにどうすべきかというのが課題になる。

tfstate ファイルをS3バケットに保存する(version >= 0.9.0)

Terraform 0.9.0 から terraform remote の変わりに Remote Backend になった。 - terraform/CHANGELOG.md at master · hashicorp/terraform · GitHub

❯ tf remote pull 
Local and remote state in sync

tfstate ファイルをS3バケットに保存する(version < 0.9.0)

S3バケットにこの状態ファイルを保存するのは簡単で、単に以下のコマンドで設定すれば良い。

terraform remote config \
  -backend=S3 \
  -backend-config="region=ap-northeast-1" \
  -backend-config="bucket=<YOUR_STATE_BUCKET_NAEM>" \
  -backend-config="key=<STATE_PATH>/<STATE_FILE_NAME>.tfstate"

この設定を行った後にpushする。

terraform remote push

以下のコマンドを実行すればpushしたファイルが一覧されるはず。

aws s3 ls s3://<YOUR_STATE_BUCKET_NAME> --recursive

ローカルにリモートのステートを持ってくるにはpullを実行する。

terraform remote pull

また、

terraform remote config -disable

でリモート管理をやめ、ローカルに戻せるらしい。

References