どちらかというと備忘のためなので、雑な記事でご容赦ください。
Terraformでよくあるループ処理
locals {
clouds = {
aws = {
company = "amazon"
contury = "us"
}
azure = {
company = "microsoft"
contury = "us"
}
sakura = {
company = "sakura-internet"
contury = "jp"
}
}
}
resource "sample_resource" "cloud_vender" {
for_each = local.cloud
description = "this is ${each.key} produced by ${each.value.company}"
.....
}
Local Valueに作成するリソース分の変数を定義して、リソースをfor_eachでループさせることにより類似したリソースを複数作る方法です。
上の例だとcloudsにて定義された"aws", "azure", "sakura"の3つ分のリソースが作成されます。
こういうケースありませんか?
ではcountry="us"となっているものだけ、リソースを作成したいという場合はどうすればいいでしょうか?
こうしましょう。
resource "sample_resource" "cloud_vender" {
for_each = { for k, v in local.clouds : k => v if v.country == "us" }
description = "this is ${each.key} produced by ${each.value.company}"
.....
}
for文とifによるフィルタリングを利用することで、country="us"の値を持つ変数だけリソース作成の対象になります。
for文の中をカスタマイズすることで、色々応用ができます。