Terraform:can模块';谁的名字是动态解析的?

Terraform:can模块';谁的名字是动态解析的?,terraform,Terraform,给定一系列模块,其名称遵循一种模式: module "mod-a" { // ... } module "mod-b" { // ... } module "mod-b" { // ... } 假设每个模块都定义了一个名为my_output的输出,我可以根据动态解析的名称引用特定模块吗 e、 g 上面的语法给出了错误: The "module" object cannot be accessed directly. Instead, access one of its attr

给定一系列模块,其名称遵循一种模式:

module "mod-a" {
  // ...
}

module "mod-b" {
  // ...
}

module "mod-b" {
  // ...
}
假设每个模块都定义了一个名为
my_output
的输出,我可以根据动态解析的名称引用特定模块吗

e、 g

上面的语法给出了错误:

The "module" object cannot be accessed directly. Instead, access one of its
attributes.

有没有其他方法可以访问仅在运行时才知道名称的模块?

要在Terraform(Terraform 0.12.13)中实现这一点,您需要显式地构建一个合适的映射作为本地值,然后索引该映射:

locals {
  modules = {
    mod_a = module.mod_a
    mod_b = module.mod_b
    mod_c = module.mod_c
  }
}
在配置的其他地方,您可以使用类似于
local.modules[local.dynamic\u module\u key]
的表达式,从映射中选择所需的对象


Terraform需要对这样的对象进行静态引用,以便能够正确地构建依赖关系图。在这种情况下,Terraform推断出
local.modules
依赖于所有这三个模块的所有输出,因此任何涉及
local.modules
的内容都必须等待,直到所有这些模块的所有输出都准备好,以确保最终的索引操作具有完整的值才能使用。

Nope。无论如何,您都无法动态访问中的资源地址,无论是资源名称、资源类型还是模块名称。如果你试着用一个真实的例子来解释你想要达到的目标,那么我们可能会提供一个对你有用的替代方案。发布问题的人从未接受过你的答案。多亏了你的回答,它帮我解决了一个棘手的问题。
locals {
  modules = {
    mod_a = module.mod_a
    mod_b = module.mod_b
    mod_c = module.mod_c
  }
}