- OpenTofu言語
- 関数
- templatestring
templatestring
関数
templatestring
関数は、プレースホルダーを、提供されたテンプレート変数セットの値で置換することにより、文字列をテンプレートとしてレンダリングできるようにします。
templatestring(str, vars)
テンプレート構文は、OpenTofuのメイン言語における文字列テンプレートのルールに従い、${ ... }
で区切られた補間シーケンスを使用します。この関数は、可読性と管理性を向上させるために、長いテンプレートシーケンスを別の文字列に抽出する柔軟性を提供します。
templatestring
関数を使用する際は、早すぎる補間を防ぐためにエスケープシーケンスを使用することを覚えておくことが重要です。プレースホルダーがテンプレート変数に変換されるまでリテラルとして扱われるようにするには、エスケープシーケンス$${...}
および%%{...}
を使用して、それぞれ${...}
および%{...}
リテラルを表します。このアプローチにより、テンプレートが処理される前にプレースホルダーを補間またはテンプレートディレクティブシーケンスとして解釈するのを防ぎます。この規則に従うことで、予期しない構文エラーを発生させることなく、テンプレート文字列を正確に表現できます。テンプレート文字列を定義する際は、templatestring
関数で適切に処理されるように、これらのエスケープシーケンスを適用することを忘れないでください。
"vars"引数はオブジェクトでなければなりません。テンプレート文字列内では、マップ内の各キーが補間のための変数として機能します。さらに、テンプレートでは、OpenTofu言語で利用可能な他の関数も使用できます。変数名は、OpenTofuの命名規則に従う必要があり、文字で始まり、その後に0個以上の文字、数字、またはアンダースコアが続きます。
OpenTofuの文字列はUnicode文字のシーケンスを表すため、templatestringはテンプレート文字列をUTF-8エンコードされたテキストとして解釈し、Unicode文字の適切な処理を保証します。テンプレート文字列内の無効なUTF-8シーケンスはエラーになります。
例
単純な文字列テンプレート
静的な文字列にtemplatestringを使用する基本的な例。
output "result" {
value = templatestring("Hello, Jodie!", {})
}
result = Hello, Jodie!
変数を使用した文字列補間
この例は、テンプレートに変数値を入れることによる文字列補間を示しています。
output "result" {
value = templatestring("Hello, $${name}!", { name = "Alice" })
}
result = Hello, Alice!
リスト
この例は、リスト変数でtemplatestring関数を使用する方法を示しています。
output "result" {
value = templatestring("List Items: $${join(\", \", list)}", { list=["value1","value2","value3"] })
}
result = "List Items : value1, value2, value3"
マップ
この例は、マップ変数でtemplatestring関数を使用する方法を示しています。マップ内のキーと値のペアを反復処理します。
output "result" {
value = templatestring("%%{ for key, value in list ~} $${key}:$${value} %%{ endfor ~}", { list={key1="value1", key2="value2", key3="value3"} })
}
result = "key1:value1 key2:value2 key3:value3 "
JSONまたはYAMLの生成
JSONやYAMLの構文文字列を生成する際、多数の補間シーケンスやディレクティブを含むテンプレートを書くのは面倒な場合があります。代わりに、jsonencode
またはyamlencode
への単一の補間呼び出しで構成されるテンプレートを使用し、次の例のように標準のOpenTofu式構文を使用してエンコードする値を指定することで、プロセスを簡略化できます。
locals {
list = ["Value1", "Value2", "Value3"]
formatted_list = "%{ for value in local.list ~}${value} %{ endfor ~}"
}
output "result" {
value = templatestring(yamlencode(local.formatted_list), {})
}
result = <<-EOT
"Value1 Value2 Value3 "
EOT
詳細については、jsonencode
とyamlencode
のメインドキュメントを参照してください。