Terraform 在这个地形配置中,为什么我需要在多个地方使用变量?

Terraform 在这个地形配置中,为什么我需要在多个地方使用变量?,terraform,Terraform,我的文件夹层次结构如下所示: / -> live/ : main.tf : variables.tf -> modules/ -> logs/ : logs.tf : variables.tf 在我的main.tf中,我有: 在my logs.tf中,我有: 在这两个variables.tf文件中,我都有: variable "env" {default = "test"} 如果我从其中任何一个删除它,我会得到一个不

我的文件夹层次结构如下所示:

/
  -> live/
    : main.tf
    : variables.tf
  -> modules/
    -> logs/
      : logs.tf
      : variables.tf
在我的main.tf中,我有:

在my logs.tf中,我有:

在这两个variables.tf文件中,我都有:

variable "env" {default = "test"} 

如果我从其中任何一个删除它,我会得到一个不受支持的参数错误-为什么?在这种情况下,我不清楚哪个变量优先,以及为什么需要这两个集合。

在Terraform中,每个目录都被视为一个单独的名称空间,可以作为一个名称空间重用。根据经验,您可以假设在目录中需要定义目录中使用的所有变量


而且,Terraform不关心目录嵌套,所以即使a包含b,b也完全独立于a。如果您想从目录a中包含b中的内容,则需要将整个内容作为一个模块显式引入。

将其视为编程语言中的嵌套方法/函数。如果您有一个签名为foo,bar,baz的函数a,然后是另一个将baz设置为false但允许调用方设置foo和bar的函数b,那么您仍然需要在签名中将其作为foo,bar公开。这可能是对等模块设计的另一个参数,而不是嵌套的。换句话说,您可能想重新组织模块结构。@MattSchuchard您能提供一个指向“对等模块设计”的链接吗?
resource "datadog_monitor" "logs-fatal" {
  env = var.env
  ...
}
variable "env" {default = "test"}