tl;dr
- terraform Advent Calendar 2023 の9日目の記事です
- 誰も書かないみたいなので手軽な記事でお茶を濁します
- このくらい短い記事でいいと思うんだよねって例ということでひとつw
- terraform でよく使うイディオムとして文字列の選択的組み立て
コード
resource "r" "x" {
query = join(" ", compact([
"string",
can(each.value.key) ? "q:${each.value.key}" : "",
can(each.value.key) ? "" : "h:${each.value.other_key}",
]))
}
- query というパラメータを文字列代入(joinの結果はstringなので)
- join() で " "(半角スペース)を区切り文字にして文字列を連結。第二引数にはlistが要る
- compact() で list の中の値がない value を詰める("" や null があると連結時に余計な隙間が出来るので list を詰めるの大事)
- [] はカンマ区切りで list ができる
- if 文のない HCL で三項演算子を使って then と else を表現(片方は "" になるけど compact() で詰められる)
- can() の仲間に try() がある。変数の値が存在したらそのまま使うなら try() のほうが簡潔(この例では出力したい値が違うので can() を使っている)
- 実際のコードは for_each で回しているので each があるけど察して
- each.value.key は存在したりしなかったりする。other_key は必ずある、みたいな前提で書いてある(仕様によっては other_key はチェックするべき)
- 長くなりがちなので例のように改行しておくと、追加変更が容易なところにも注目して欲しい
- ちなみに for_each で回さないなら locals に切り出したほうが見やすいよ(たぶん)