はじめに
Terraform CloudはStateファイルをTerraform Cloud上で管理してくれる最強のツールです。
強いところや基本的な使い方は以下の記事を参考にしてください。
本題
一つのリポジトリで複数のstateを管理することがあるのですが、Terraformではそれをworkspaceという単位で分けます。
.
└── services
├── common # workspace ここで一つのtfstateを管理する
│ └── main.tf
├── prod # workspace ここで一つのtfstateを管理する
│ └── main.tf
├── stage # workspace ここで一つのtfstateを管理する
│ └── main.tf
└── test # workspace ここで一つのtfstateを管理する
└── main.tf
例えば、commonにはネットワーク周りの共通の構成管理を入れておき、最初にterraform apply
しておくことで、コードを改修するたびにapplyされるのを回避することができます。
Terraform Cloudでもその設定を簡単に行うことができます。
Workspaceを作る際に、リポジトリルートからのpathをTerraform Working Directoryに指定してあげるだけです。
また、Terraform CloudはCIと連携できるのですが、そのトリガーとしてリポジトリの変更だけでなくそのpath以下の変更に絞ることもできます。(Automatic Run Triggering)
workspace作成後でも「Settings→General」から変更することができます。
別のworkspaceのstateファイルからdataを取り出す際もnameを指定してあげるだけで簡単にできます。
data "terraform_remote_state" "foo" {
backend = "remote"
config = {
organization = "hikimochi"
workspaces = {
name = "hikimochi-terraform-other-workspace"
}
}
}
また、Terraform Cloud上で管理されていればbackendの指定をしなくても自動でstateファイルがそのworkspace上で保存されます。(違ってたら指摘してください)
COOLですね。
おわりに
22日に結構頑張って書いたやつが、全然いいねつかないのでもう一本書きました。