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