- OpenTofu言語
- 式
- 型と値
型と値
式の結果は値です。すべての値には型があり、その値がどこで使用できるか、どのような変換を適用できるかを規定します。
型
OpenTofu言語では、値に以下の型を使用します。
string
: テキストを表すUnicode文字の並びで、"hello"
のようなものです。number
: 数値。number
型は、15
のような整数値と、6.283185
のような小数値を両方表現できます。bool
: ブール値で、true
またはfalse
のいずれかです。bool
値は条件ロジックで使用できます。list
: 値のシーケンスで、["us-west-1a", "us-west-1c"]
のようなものです。リスト内の要素は、ゼロから始まる連続した整数で識別されます。set
: 順序や二次識別子のない、一意な値のコレクションです。map
: 名前付きラベルで識別される値のグループで、{name = "Mabel", age = 52}
のようなものです。
文字列、数値、およびブール値は、プリミティブ型と呼ばれることがあります。リストとセットはタプルの形式です。マップはオブジェクトの形式です。タプルとマップは、複合型、構造型、またはコレクション型と呼ばれることがあります。複合型の詳細については、型の制約を参照してください。
最後に、型を持たない特別な値が1つあります。
null
: 不在または省略を表す値です。リソースの引数をnull
に設定すると、OpenTofuは完全に省略したかのように動作します。引数にデフォルト値がある場合はそれを使用し、引数が必須の場合はエラーを発生させます。null
は条件式で最も役立ち、条件が満たされない場合に引数を動的に省略できます。
リテラル式
リテラル式は、特定の定数値を直接表す式です。OpenTofuには、上記で説明した各値型のリテラル式構文があります。
文字列
文字列は通常、"like this"
のような、二重引用符で囲まれたUnicode文字のシーケンスで表現されます。より複雑な文字列には「ヒアドキュメント」構文もあります。
文字列リテラルはOpenTofuの中で最も複雑な種類のリテラル式であり、独自のドキュメントページがあります。エスケープシーケンス、ヒアドキュメント構文、補間、およびテンプレートディレクティブの詳細については、文字列を参照してください。
数値
数値は、15
や6.283185
のように、小数点がある場合とない場合がある、引用符で囲まれていない数字のシーケンスで表されます。
ブール値
ブール値は、引用符で囲まれていないシンボルtrue
とfalse
で表されます。
Null
null値は、引用符で囲まれていないシンボルnull
で表されます。
リスト/タプル
リスト/タプルは、["a", 15, true]
のように、コンマ区切りの値のシーケンスを含む角かっこで囲まれたペアで表されます。
リストリテラルは、読みやすくするために複数行に分割できますが、常に値の間にコンマが必要です。最後の値の後のコンマは許可されていますが、必須ではありません。リスト内の値は任意の式にすることができます。
マップ/オブジェクト
マップ/オブジェクトは、一連の<KEY> = <VALUE>
ペアを含む中かっこで囲まれたペアで表されます。
{
name = "John"
age = 52
}
キー/値のペアは、コンマまたは改行で区切ることができます。
マップ内の値は任意の式にすることができます。
マップ内のキーは文字列である必要があります。有効な識別子である場合は引用符で囲まないままにできますが、それ以外の場合は引用符で囲む必要があります。(var.business_unit_tag_name) = "SRE"
のように、括弧で囲むことで、キーとして非リテラル文字列式を使用できます。
インデックスと属性
リスト/タプルおよびマップ/オブジェクト値の要素には、local.list[3]
のような角かっこインデックス表記を使用してアクセスできます。角かっこ内の式は、リストおよびタプル値の場合は整数、マップおよびオブジェクト値の場合は文字列である必要があります。
有効な識別子である名前を持つマップ/オブジェクト属性には、local.object.attrname
のようなドット区切りの属性表記を使用してアクセスすることもできます。マップに任意のユーザー指定のキーが含まれる可能性がある場合は、角かっこインデックス表記(local.map["keyname"]
)のみを使用することをお勧めします。
複合型について詳しく
ほとんどの場合、リストとタプルは同じように動作し、マップとオブジェクトも同様です。区別が重要ではない場合、OpenTofuのドキュメントでは、これらの用語ペアを互換的に使用します(「リスト」と「マップ」が歴史的に優先されています)。
しかし、モジュール作成者およびプロバイダー開発者は、これらの類似した型(および関連するset
型)の違いを理解しておく必要があります。これらは、入力変数とリソース引数に許可される値を制限するさまざまな方法を提供するからです。
これらの型に関する詳細(および、なぜ違いが通常重要ではないのかの説明)については、型制約を参照してください。
型変換
式は、リソースと子モジュールの引数の値を設定するためによく使用されます。これらの場合、引数には期待される型があり、与えられた式はその型の値を生成する必要があります。
可能な場合、OpenTofuは期待される型を生成するために、ある型から別の型へ自動的に値を変換します。これが不可能な場合、OpenTofuは型の不一致エラーを生成し、より適切な式で構成を更新する必要があります。
OpenTofuは、必要に応じて数値とブール値を文字列に自動的に変換します。また、文字列が数値またはブール値の有効な表現を含んでいる限り、文字列を数値またはブール値に変換します。
true
は"true"
に変換され、逆もまた同様です。false
は"false"
に変換され、逆もまた同様です。15
は"15"
に変換され、逆もまた同様です。