Terraform:对未声明输入变量的引用

Terraform:对未声明输入变量的引用,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我对地形有这样的结构: 三个模块(app、db、vpc)和两个目录(prod、stage) 当我从“stage”或“prod”目录启动Terraform并输入变量时: terraform/prod - (main) > terraform plan var.cluster_name Enter a value: prod 然后,我收到一个错误,变量未设置: │ Error: Reference to undeclared input variable │ │ on ../mod

我对地形有这样的结构: 三个模块(app、db、vpc)和两个目录(prod、stage)

当我从“stage”或“prod”目录启动Terraform并输入变量时:

terraform/prod - (main) > terraform plan
var.cluster_name
  Enter a value: prod
然后,我收到一个错误,变量未设置:

│ Error: Reference to undeclared input variable
│ 
│   on ../modules/app/main.tf line 47, in resource "google_compute_address" "app_ip":
│   47:   name    = var.cluster_name

│ An input variable with the name "cluster_name" has not been declared. This variable can be declared with a
│ variable "cluster_name" {} block.
有人能帮忙吗,有什么问题吗?如何正确设置变量,以便在所选项目的所有模块中查看?

我发现问题: 每个项目(/prod和/stage)中的main.tf文件必须像函数一样定义变量: cluster\u name=var.cluster\u name-缺少它 模块中的cluster_名称是独立变量,必须在“函数”中定义,以下是配置:

module "app" {
  source = "../modules/app"
  cluster_name = var.cluster_name
}

module "db" {
  source = "../modules/db"
  cluster_name = var.cluster_name
}

module "vpc" {
  source = "../modules/vpc"
  cluster_name = var.cluster_name
}

我假设您正在prod/main.tf中调用../modules/app/main.tf模块-检查是否将变量显式传递给模块。请记住,子模块不仅仅从父模块继承变量。
module "app" {
  source = "../modules/app"
  cluster_name = var.cluster_name
}

module "db" {
  source = "../modules/db"
  cluster_name = var.cluster_name
}

module "vpc" {
  source = "../modules/vpc"
  cluster_name = var.cluster_name
}