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

リソースアドレス指定

リソースアドレスとは、設定全体でゼロ個以上のリソースインスタンスを識別する文字列です。

アドレスは2つの部分で構成されます

コードブロック
[module path][resource spec]

OpenTofuは、モジュール全体のみを参照する、または複数インスタンスリソースのインデックスを省略する、不完全なリソースアドレスを許可する場合があります。このような場合、意味はコンテキストによって異なります。リソースアドレスを解析する特定の機能のドキュメントを参照する必要があります。

モジュールパス

モジュールパスは、モジュールツリー内のモジュールをアドレス指定します。次の形式を取ります

コードブロック
module.module_name[module index]
  • module - 子モジュール(ルート以外)を示すモジュールキーワード。パス内の複数のmoduleキーワードはネストを示します。
  • module_name - ユーザー定義のモジュール名。
  • [module index] - (オプション) 複数インスタンスを持つモジュール呼び出しからインスタンスを選択するためのインデックス。角括弧([])で囲みます。

リソース仕様のないアドレス、つまりmodule.fooは、単一モジュールであればモジュール内のすべてのリソースに適用され、モジュールに複数インスタンスがある場合はすべてのモジュールインスタンスに適用されます。特定のモジュールインスタンスのすべてのリソースをアドレス指定するには、module.foo[0]のようにアドレスにモジュールインデックスを含めます。

モジュールパスが省略された場合、アドレスはルートモジュールに適用されます。

複数インスタンスを持つ2つのモジュールを区切るmoduleキーワードの例

コードブロック
module.foo[0].module.bar["a"]

リソース仕様

リソース仕様は、選択したモジュール内の特定のリソースインスタンスをアドレス指定します。次の構文があります

コードブロック
resource_type.resource_name[instance index]
  • resource_type - アドレス指定されるリソースのタイプ。
  • resource_name - ユーザー定義のリソース名。
  • [instance index] - (オプション) 複数インスタンスを持つリソースからインスタンスを選択するためのインデックス。角括弧([])で囲みます。

モジュールパスプレフィックスのないリソース仕様は、ルートモジュール内のリソースのみと一致します。

モジュールとリソースのインデックス値

以下の仕様は、複数インスタンスを持つモジュールとリソースのインデックス値に適用されます

  • [N]Nは、countメタ引数で指定された複数インスタンスを持つリソースへの0ベースの数値インデックスです。 count > 1であるリソースをアドレス指定するときにインデックスを省略すると、アドレスはすべてのインスタンスを参照することを意味します。
  • ["INDEX"]INDEXは、for_eachメタ引数で指定された複数インスタンスを持つリソースへの英数字キーインデックスです。

countの例

OpenTofu設定に以下が含まれている場合

コードブロック
resource "aws_instance" "web" {
# ...
count = 4
}

このようなアドレス

コードブロック
aws_instance.web[3]

設定の最後のインスタンスのみを参照し、このようなアドレス

コードブロック
aws_instance.web

4つの「web」インスタンスすべてを参照します。

for_eachの例

OpenTofu設定に以下が含まれている場合

コードブロック
resource "aws_instance" "web" {
# ...
for_each = {
"tofu": "value1",
"resource": "value2",
"indexing": "value3",
"example": "value4",
}
}

このようなアドレス

コードブロック
aws_instance.web["example"]

設定の「example」インスタンスのみを参照し、「value4」に解決されます。