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を学びたい人にオススメ!/