如何在terraform中定义全局变量?

Dan*_*Dan 16 terraform

我正在开发一个 terraform 项目。在其中,我想要一个文件包含许多变量。我希望可以从项目的任何模块访问这些变量。我已经查看了文档和 udemy 课程,但仍然不知道如何做到这一点。在 Terraform 中如何做到这一点?谢谢!

pab*_*xio 14

我认为这是不可能的。Github 上有很多关于此的讨论,但这不是Hashicorp团队想要的。

总的来说,我们反对全局变量的特定解决方案,因为它使模块的输入 -> 资源 -> 输出流程不那么明确,而明确性是核心设计目标。

我知道,我们必须在不同模块之间重复很多变量


Ale*_*hev 7

对于许多模块之间的路径常量,我们可以使用以下简单的方法。

/modules/global_constants/outputs.tf:

描述具有全局常量作为输出的模块:

output "parameter_1" {
  value     = "value_1"
  sensitive = true
}

output "parameter_2" {
  value     = "value_2"
  sensitive = true
}
Run Code Online (Sandbox Code Playgroud)

/example_1.tf

之后我们就可以在任何*.tf中使用

module "global_settings" {
   source = "./modules/global_constants"
}

data "azurerm_key_vault" "keyvault" {
   name                = module.global_settings.parameter_1
   resource_group_name = module.global_settings.parameter_2
}
Run Code Online (Sandbox Code Playgroud)

/modules/module2/main.tf

或者在其他任何模块中:

module "global_settings" {
   source = "../global_constants"
}

data "azurerm_key_vault" "keyvault" {
   name                = module.global_settings.parameter_1
   resource_group_name = module.global_settings.parameter_2
}
Run Code Online (Sandbox Code Playgroud)


ha9*_*3ar 6

我尝试这样做

  1. 定义一组公共变量,例如在所有模块的文件common_tags底部/顶部。variables.tf通常,您的技术操作管理员/云管理员将为此创建一个模板项目。

  2. 对于每个模块,我添加以下内容作为最后一项

    global_var = var.global_var_val

一个例子是常见标签。在任何根/子模块中,我使用merge()函数将它们组合起来。我希望这是有道理的。