はじめに
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 楽しい。