1
0

More than 1 year has passed since last update.

[Terraform]ネストされたmapから関数values,keysを使って値を取得する

Posted at

はじめに

これまであまり使わなかったが、terraformの関数values,keysを使うケースがあったので使い方を記載する。
さらに、ネストされたmapから取得する方法も記載する。

公式ページは以下

mapで記載された場合の取得方法

mapにて以下のように記載があったとする。

terraform.tf
variable "subnet" {
 type    = map
 default = {}
}
terraform.tfvars
subnet = {
  "1a" = "10.0.0.0/20",
  "1c" = "10.0.16.0/20",
  "1d" = "10.0.32.0/20"
}

この場合、それぞれの値を取得したい際は、関数valuesを使用すればvaluesが取得できる。
この際はmapからlistとなる。

output "subnet" {
  value = values(var.subnet)
}
--- result ---
tolist([
  "10.0.0.0/20",
  "10.0.16.0/20",
  "10.0.32.0/20",
])

keyの値を取得したい際は、関数keysを使用すればkeyが取得できる。

output "subnet_key" {
  value = keys(var.subnet)
}
--- result ---
tolist([
  "1a",
  "1c",
  "1d",
])

ネストされたmapから特定の値を取得したいとき

ここからが本題。mapにてネストされた以下のような記載があったとする。

terraform.tf
variable "subnet_nest" {
  type = map(object({    
    az            = string
    subnet_public = string
  }))
  default = {}
}
terraform.tfvars
subnet_nest = {
  "1a" = {
    az                 = "ap-northeast-1a"
    subnet_public      = "10.0.0.0/20"
  },
  "1c" = {
    az                 = "ap-northeast-1c"
    subnet_public      = "10.0.16.0/20"
  },
  "1d" = {
    az                 = "ap-northeast-1d"
    subnet_public      = "10.0.32.0/20"
  }
}

先程と同様にすると、以下のように複数の値が取得できる

output "subnet_nest" {
  value = values(var.subnet_nest)
}
--- result ---
tolist([
  {
    "az" = "ap-northeast-1a"
    "subnet_public" = "10.0.0.0/20"
  },
  {
    "az" = "ap-northeast-1c"
    "subnet_public" = "10.0.16.0/20"
  },
  {
    "az" = "ap-northeast-1d"
    "subnet_public" = "10.0.32.0/20"
  },
])

ここから特定の値を出力したい際は以下のように設定する

output "subnet_nest_az" {
  value = values(var.subnet_nest)[*].az
}
--- result ---
tolist([
  "ap-northeast-1a",
  "ap-northeast-1c",
  "ap-northeast-1d",
])
output "subnet_nest_cidr" {
  value = values(var.subnet_nest)[*].subnet_public
}
--- result ---
tolist([
  "10.0.0.0/20",
  "10.0.16.0/20",
  "10.0.32.0/20",
])

key取得は同様

output "subnet_nest_key" {
  value = keys(var.subnet_nest)
}
--- result ---
tolist([
  "1a",
  "1c",
  "1d",
])

その他

ネストされたmapを扱うときは取得方法なども合わせて調べると良い。
あとは、mapのkeyとvalueを入れ替える関数transposeのあるのでいずれ試してみたい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0