Terraformで環境ごとにバックエンド(tfstate)を切り替える


stg, prodなどAWSリソースを別アカウントに構築する際にTerraformのバックエンドも別個にしたい、という場合の簡単な実現方法。
構築するメインのリソースをアカウントごとに切り替える記事はWorkspace利用やファイル分割など色々あるが、バックエンドを切り替える記事があまり見られなかったので備忘を兼ねて。

結論

terraform initコマンドの-reconfigure-backend-configのオプションで利用するバックエンドを切り替える。
切り替えた後、terraform applyなど目的のコマンドを実行する。
※前提としてロール/アカウントの切り替えやバックエンドのS3バケット作成は必要。

設定ファイル例

Terraformの他のファイルと同じディレクトリに適当な設定ファイルを配置する。

└── backend
   ├── dev.tfbackend
   ├── stg.tfbackend
   └── prod.tfbackend

dev.tfbackendの例

bucket  = "tfstate-project-name-dev"
region  = "ap-northeast-1"

コマンド例

$ terraform init -reconfigure -backend-config=backend/dev.tfbackend

参考

Command: init | Terraform by HashiCorp

Re-running init with an already-initialized backend will update the working directory to use the new backend settings. Either -reconfigure or -migrate-state must be supplied to update the backend configuration.

すでに初期化されたバックエンドで init を再実行すると、新しいバックエンドの設定を使用するように作業ディレクトリが更新される。バックエンドの設定を更新するには、-reconfigure または -migrate-state のいずれかを指定する必要があります。