为什么我得到参数“env”是必需的,但没有找到定义?

ako*_*a01 3 terraform terraform-provider-azure

我有以下目录/文件结构:

.
??? main.tf
??? modules
? ??? Resource_group
? ??? main.tf
? ??? vars.tf
Run Code Online (Sandbox Code Playgroud)

配置文件

./main.tf

module "app-rg" {
  source = "./modules/Resource_Group"
}
Run Code Online (Sandbox Code Playgroud)

./modules/resource_group/main.tf

provider "azurerm" {
  version = "=2.11.0"
  features { }
}

resource "azurerm_resource_group" "rg" {
  name = "${lookup(var.resource_group, var.env)}"
  location = "${lookup(var.location, var.env)}"
}
Run Code Online (Sandbox Code Playgroud)

./modules/resource_group/vars.tf

variable "env" {
  description = "env : dev or prod"
}

variable "resource_group" {
  type = "map"
  default = {
    dev = "rg-dev"
    prod = "rg-prod"
  }
}

variable "location" {
  type = "map"
  default = {
    dev = "westindia"
    prod = "westeurope"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行“terraform plan”时,我会收到以下错误。

错误:缺少必需的参数

在 main.tf 第 6 行,在模块“app-rg”中:6:模块“app-rg”{

参数“env”是必需的,但没有找到定义。

为什么我得到参数“env”是必需的,但没有找到定义?

小智 7

您尚未提供env输入变量。

由于不存在默认值,因此 terraform 不知道您要使用什么环境。您有几个选项可以解决这个问题。首先,您可以main.tf在调用模块时在 中包含变量值。它看起来像这样:

module "app-rg" {
source = "./modules/Resource_Group"
env = "dev"
}
Run Code Online (Sandbox Code Playgroud)

您还可以将此输入变量包含在外部变量定义文件中,例如terraform.tfvars,或将其作为环境变量传递,或在/modules/resource_group/vars.tf

以下是 HasiCorp 关于变量和模块的一些资源: