- コマンドライン
- OpenTofuの状態の操作
- リソースアドレス指定
リソースアドレス指定
リソースアドレスとは、設定全体でゼロ個以上のリソースインスタンスを識別する文字列です。
アドレスは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」に解決されます。