2

我正在创建一个运行良好的 terraform 模块。但是,当我多次使用它时,它会创建多个角色和策略,它们实际上是相同的。

我在考虑是否有办法让模块在我第一次调用它时创建一个角色并继续为后续模块使用相同的角色

4

1 回答 1

4

不,Terraform 不支持这一点。您最好的选择是在模块外部(或在单独的模块中)创建共享资源,然后将它们作为输入参数传递给您多次创建的模块。

我喜欢使用“共享”资源模块的方法,因为这样您就可以将整个模块作为输入参数传递到使用这些共享资源的任何模块中。

编辑:共享模块的示例代码:

main.tf

module "mod1" {
  source = "./mymodule1"
}

module "mod2" {
  source       = "./mymodule2"
  input_module = module.mod1
}

output "mod2" {
  value = module.mod2
}

mymodule1/main.tf

output "some_field" {
  value = "foo"
}

mymodule2/main.tf

variable "input_module" {}

output "module_that_was_input" {
  value = var.input_module
}

结果:

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

mod2 = {
  "module_that_was_input" = {
    "some_field" = "foo"
  }
}
于 2021-07-15T19:21:53.170 回答