くりにっき

フルスタックキュアエンジニアです

Terraformでエスケープさせずにダブルクオーテーションを含む文字列を書く

前提

こういうやつ。

json = "{\"key\": \"value\"}"

余計な文字が入ってるとミスるのでもうちょっと見やすく書きたい。

Rubyであればこういう場合 ' (シングルクオーテーション)が使えるんだけど、Terraformはヒアドキュメント以外だと " (ダブルクオーテーション)で囲むしかないのでちょっと工夫がいります。

方法1. ヒアドキュメント

末尾改行が許される場合にはヒアドキュメント一択

json = <<-JSON
  {"key": "value"}
JSON

方法2. ヒアドキュメント + chomp

末尾改行が許されない場合にはchomp*1も組み合わせる。(他にも色々やり方はありそう)

json = chomp(
  <<-JSON
    {"key": "value"}
  JSON
)

余談だけどRubyでメソッドの引数の中にヒアドキュメントを書くのは下記のような形式なので、Terraformで同じようなことをやる方法を見つけるのに苦労しました。

json = foo(<<~JSON)
  {"key": "value"}
JSON