メインコンテンツにスキップ

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

詳細については、jsonencodeyamlencodeのメインドキュメントを参照してください。