资源寻址
一个资源地址是一个字符串,它标识您整体配置中的零个或多个资源实例。
一个地址由两部分组成
[module path][resource spec]
在某些情况下,OpenTofu 可能允许使用不完整的资源地址,该地址仅引用整个模块,或省略多实例资源的索引。在这些情况下,含义取决于上下文,因此您需要参考您正在使用的特定功能的文档,该功能解析资源地址。
模块路径
模块路径引用模块树中的一个模块。它采用以下形式
module.module_name[module index]
module
- 表示子模块(非根)的模块关键字。路径中的多个module
关键字表示嵌套。module_name
- 用户定义的模块名称。[module index]
- (可选)索引 用于从具有多个实例的模块调用中选择一个实例,用方括号([
和]
)包围。
没有资源规范的地址,即module.foo
,如果是一个单独的模块,则应用于模块中的每个资源,如果模块具有多个实例,则应用于模块的所有实例。要寻址特定模块实例的所有资源,请在地址中包含模块索引,例如module.foo[0]
。
如果省略模块路径,则该地址将应用于根模块。
module
关键字区分两个具有多个实例的模块的示例
module.foo[0].module.bar["a"]
资源规范
资源规范引用所选模块中的特定资源实例。它具有以下语法
resource_type.resource_name[instance index]
resource_type
- 正在寻址的资源的类型。resource_name
- 用户定义的资源名称。[instance index]
- (可选)索引 用于从具有多个实例的资源中选择一个实例,用方括号([
和]
)包围。
没有模块路径前缀的资源规范仅匹配根模块中的资源。
模块和资源的索引值
以下规范适用于具有多个实例的模块和资源上的索引值
[N]
,其中N
是一个0
为基的数字索引,指向由count
元参数指定的多实例资源。在寻址count > 1
的资源时,省略索引意味着该地址引用所有实例。["INDEX"]
,其中INDEX
是由for_each
元参数指定的多实例资源中的字母数字键索引。
示例
count 示例
假设 OpenTofu 配置包括
resource "aws_instance" "web" {
# ...
count = 4
}
像这样的地址
aws_instance.web[3]
仅引用配置中的最后一个实例,像这样的地址
aws_instance.web
引用所有四个“web”实例。
for_each 示例
假设 OpenTofu 配置包括
resource "aws_instance" "web" {
# ...
for_each = {
"tofu": "value1",
"resource": "value2",
"indexing": "value3",
"example": "value4",
}
}
像这样的地址
aws_instance.web["example"]
仅引用配置中的“example”实例,并解析为“value4”。