ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

terraform おもしろ build-in function

ネタが見つからなさすぎた。この記事は Terraform Advent Calendar 2023 16日目の記事です。

developer.hashicorp.com

を眺めた。

title

いつ使うんだこれ...

> title("hello world")
"Hello World"

anytrue

これも使い所よくわからん...

> anytrue([true, false])
true
> anytrue([false, false])
false

chunklist

これは使いどころあるかもしれない。

何らかの rule set 的なものをいくつかの chunk にわけて管理したい場合とか。わかりづらくはなる。

> chunklist(["a","b","c"], 2)
tolist([
  tolist([
    "a",
    "b",
  ]),
  tolist([
    "c",
  ]),
])

lookup

これ面白い。

> lookup({a="hoge", b="fuga"}, "a", "hogehuga")
"hoge"
> lookup({a="hoge", b="fuga"}, "d", "hogehuga")
"hogehuga"

環境3つぐらいなら3項演算子でいいだろうが、独自の何かしらの key/value に対して分岐させたい時とか。

そもそも普段から terraform であんまりロジック書きたくない派なので使わんが(この記事全否定)

one

何のために使うのこれ...

コレクションを受け取って、空なら null を返す、そうでなければ最初の要素を返す、引数に2つ以上与えるとエラーになる。

2値を扱いたい時に使うやつっぽい。

module の output の際に、instance が作られていた場合は private ip を返し、なければ null を返す、みたいな例が書いてあった。

setproduct

掛け合わせるのか。面白い。

大量にブツ作るときに便利かも。

> setproduct(["development", "staging", "production"], ["app1", "app2"])
tolist([
  [
    "development",
    "app1",
  ],
  [
    "development",
    "app2",
  ],
  [
    "staging",
    "app1",
  ],
  [
    "staging",
    "app2",
  ],
  [
    "production",
    "app1",
  ],
  [
    "production",
    "app2",
  ],
])

base64encode/decode

base64 も扱える。

> base64encode("chaspy")
"Y2hhc3B5"
> base64decode("Y2hhc3B5")
"chaspy"

yamlencode/decode

yaml も扱えるんだ。

> yamldecode("hello: [hoge,huga]")
{
  "hello" = [
    "hoge",
    "huga",
  ]
}

formatdate

これは便利そう。リソース名にユニーク性を持たせたい時とか...あんまないか

> formatdate("YYYY-MM-DD-hh-mm", timestamp())
"2023-12-28-08-38"

uuid

そういうのもあるのか

> uuid()
"ff045942-704f-371d-b540-97e0f149d0e0"

cidrsubnet

計算むずいので便利ね

おしまい

なんかしたいなーってときに探してみると良さそうです 意外と何でもできる

でもやっぱ terraform であんまり複雑なことしたくないが...