ようへいの日々精進XP

よかろうもん

Terraform ビルトイン関数 de Night Vol.1 ~ まじで merge ~

はじめに

HashiTalksアーカイブを見返していて、「Taking your Terraform Skills to the Next Level」というセッションで Terraform のビルトイン関数が紹介されていて、頑張ってコードを書かなくても Terraform で遊べるなーと思ったので、これから気が向いたらお酒をチビチビやりながら Terraform のビルドイン関数を触っていきたいと思う。

尚、本記事および、これからの記事で利用する Terraform のバージョンは 1.2.x 系を想定している。

$ terraform version
Terraform v1.2.8
on linux_amd64

8/25 時点では 1.2.8 を利用する。また、基本的には terraform console を使って動作確認等を行っていく。

merge

今日は、HashiTalk のセッションで取り上げられていた merge 関数を弄る。

merge 関数は、その名の通り、マップやオブジェクトをマージする関数。

> merge({a="b", c="d"}, {e="f", c="z"})
{
  "a" = "b"
  "c" = "z"
  "e" = "f"
}

>  merge({a="b"}, {a=[1,2], c="z"}, {d=3})
{
  "a" = [
    1,
    2,
  ]
  "c" = "z"
  "d" = 3
}

キーが同じである場合、後の引数が優先されるため、c="d"a="b" が無視されている。

更に、expansion symbol (...)を使った例も示されているが、expansion symbol 自体の挙動がちゃんと理解出来ておらず、「ふーん、こんなものかー」位でしか理解出来ずに残念。

> merge([{a="b", c="d"}, {}, {e="f", c="z"}]...)
{
  "a" = "b"
  "c" = "z"
  "e" = "f"
}

コードで merge 関数を使ってみると、以下のような感じになる。

locals {
  common_tag = {
    Foo = "Bar"
  }
}

variable "custom_tag" {
  type = map
}

output "merged_tag" {
  value = merge(local.common_tag, var.custom_tag)
}

実際に動かしてみる。

$  terraform plan -var='custom_tag={Baz="Qux"}' -no-color

Changes to Outputs:
  + merged_tag = {
      + Baz = "Qux"
      + Foo = "Bar"
    }

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

確かにマージされた。

以上

今宵は merge 関数を使ってみた。ユースケースがパッと思いつかないのは、自分の terraform 力が足りていないからかな。

お疲れ様でした。Terraform 楽しい。