Module Terraform模块变量.tf

Module Terraform模块变量.tf,module,terraform,terraform-provider-azure,Module,Terraform,Terraform Provider Azure,我尝试使用terraform模块,遇到了一个奇怪的问题(我想)。这是我的结构: [TF目录结构][1] [1]: https://i.stack.imgur.com/P4fyr.png 下面是根main.tf: provider "azurerm" { features { } } module "createrg" { source = "./modules/rg"

我尝试使用terraform模块,遇到了一个奇怪的问题(我想)。这是我的结构: [TF目录结构][1] [1]: https://i.stack.imgur.com/P4fyr.png

下面是根main.tf:

    provider "azurerm" {
      features {
      }
    }
   
    module "createrg" {
      source = "./modules/rg"
      my_loc = var.my_loc
      rgName = var.rgName
    }
这是根变量。tf

    variable "my_loc" {
      type = "string"
    }
    
    variable "rgName" {
      type = "string"
    }
以下是“rg”模块的main.tf:

这是“rg”模块的变量.tf

这是dev.tfvars

    my_loc = "canadacentral"
    rgName = "rg_ModuleTest"
我的计划是:

terraform plan -var-file=./variables/dev.tfvars
因为我刚开始使用terraform,所以我使用的是最新版本。如果我从一个或两个variable.tf中删除任何变量,就会出现错误,并且计划不会执行。例如,如果我从根variables.tf文件中删除变量声明,则会出现错误:“错误:引用未声明的输入变量”;如果我在rg模块中从variable.tf中删除变量声明,则会出现错误:“错误:不支持的参数……此处不需要名为“rgName”的参数。”计划工作的唯一方式是在根模块和rg模块的variables.tf文件中有相同的变量时

这就是模块的工作原理吗?我在互联网上搜寻了一个解释,但我想我遗漏了一些东西。我的意思是,如果我要为20个资源创建模块,那么认为我必须在这两个位置复制变量(root和相应模块的variables.tf文件)感觉很荒谬

提前感谢您的帮助。

是独立的。成功执行rg模块所需的所有变量都在
/modules/rg/variables.tf
中定义

因为您没有为它们定义任何,所以它们是统一的。因此,在root main.tf中,当您创建
createrg
模块时,必须显式设置所有这些变量

关于命名,在“.root/main”中,变量
var.my_loc
var.rgName
不需要与
/modules/rg/variables.tf中的变量具有相同的名称。它们可以有任何名称,也可以是常量,只要您要设置模块的所有这些未初始化变量

    my_loc = "canadacentral"
    rgName = "rg_ModuleTest"
terraform plan -var-file=./variables/dev.tfvars