Terraform:模块之间共享资源

Dev*_*NRZ 5 terraform terraform-modules

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

我在想是否有一种方法可以让模块在第一次调用它时创建一个角色,并在后续模块中继续使用相同的角色

Jor*_*dan 12

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

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

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

main.tf

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

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

output "mod2" {
  value = module.mod2
}
Run Code Online (Sandbox Code Playgroud)

mymodule1/main.tf

output "some_field" {
  value = "foo"
}
Run Code Online (Sandbox Code Playgroud)

mymodule2/main.tf

variable "input_module" {}

output "module_that_was_input" {
  value = var.input_module
}
Run Code Online (Sandbox Code Playgroud)

结果:

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

Outputs:

mod2 = {
  "module_that_was_input" = {
    "some_field" = "foo"
  }
}
Run Code Online (Sandbox Code Playgroud)