map関数っぽい表現
Terraformでlistやmapのようなコレクションのそれぞれの要素を変換した新たなlistやmapを作るにはfor式を使う。
list → list の場合
list型の値をlist型に変換する場合は以下のように書く。
[for 要素が入る変数 in 変換元のリスト : 新たな要素]
例
locals {
  ids = [1, 2, 3]
}
output "names" {
  value = [for id in local.ids : "name-${id}"]
}
terraform planの結果は以下のようになる。
$ terraform plan
...
Changes to Outputs:
  + names = [
      + "name-1",
      + "name-2",
      + "name-3",
    ]
list → map の場合
結果がmapの場合は以下のように書く。
{ for 要素が入る変数 in 変換元のリスト : 新たな要素のキー => 新たな要素の値 }
例
locals {
  ids = [1, 2, 3]
}
output "names" {
  value = { for id in local.ids : "name-${id}" => id }
}
terraform planの結果は以下のようになる。
$ terraform plan
...
Changes to Outputs:
  + names = {
      + name-1 = 1
      + name-2 = 2
      + name-3 = 3
    }
map -> list の場合
map型の値をlist型に変換する場合は以下のように書く。
[for キーの変数, 値の変数 in 変換元のマップ : 値]
例
locals {
  ids = {
    id1 = 1
    id2 = 2
  }
}
output "names" {
  value = [for key, value in local.ids : "${key}-${value}"]
}
terraform planの結果は以下のようになる。
$ terraform plan
...
Changes to Outputs:
  + names = [
      + "id1-1",
      + "id2-2",
    ]
map -> map の場合
map型の値をmap型に変換する場合は以下のように書く。
{ for キーの変数, 値の変数 in 変換元のマップ : 新たな要素のキー => 新たな要素の値 }
例
locals {
  ids = {
    id1 = 1
    id2 = 2
  }
}
output "names" {
  value = { for key, value in local.ids : "test-${key}" => "test-${value}" }
}
terraform planの結果は以下のようになる。
$ terraform plan
...
Changes to Outputs:
  + names = {
      + test-id1 = "test-1"
      + test-id2 = "test-2"
    }
\手を動かしながらTerraformを学びたい人にオススメ!/

