Azure Terraform-如何将环境变量传递给Terraform中的子模块

Azure Terraform-如何将环境变量传递给Terraform中的子模块,azure,kubernetes,terraform,azure-aks,Azure,Kubernetes,Terraform,Azure Aks,我的解决方案: ├── main.tf ├── modules │   ├── cluster1 │   │   ├── cluster1.tf │   │   ├── main.tf │   │   ├── output.tf │   │   └── variables.tf │   ├── cluster2 │   │   ├── cluster.tf │   │   ├── main.tf │   │   ├── output.tf │   │   └── variables.tf │  

我的解决方案:

├── main.tf
├── modules
│   ├── cluster1
│   │   ├── cluster1.tf
│   │   ├── main.tf
│   │   ├── output.tf
│   │   └── variables.tf
│   ├── cluster2
│   │   ├── cluster.tf
│   │   ├── main.tf
│   │   ├── output.tf
│   │   └── variables.tf
│   └── trafficmanager
│       ├── main.tf
│       ├── output.tf
│       ├── trafficmanager.tf
│       └── variables.tf
├── README.md
└── variables.tf

为了让我创建Azure k8s群集,每个群集都需要服务主体id和密码。我非常感兴趣地看到一些关于如何将包含服务主体和机密的环境变量传递给每个集群的示例。

您可以在模块中指定变量并将信息传递给它们:

模块.tf:

variable "hack" {}
variable "reference" {
  "type" = "map"
}    
variable "ports" {
  "default" = [2379, 6443]
}
模块调用:

module "master" {
  source = "./vmLoop"

  vmName    = "master"
  reference = "${var.reference}"
  hack      = "${element(azurerm_subnet.subnets.*.id, 1)}"
}

Terraform将以TF_VAR_name的形式读取环境变量,以查找变量的值。例如,可以设置TF_VAR_access_key变量来设置access_key变量

例子 将模块传递到地形模块

variable "region" {}
variable "alist" {}
variable "map" {}

module "test" {
  source = "./module/testmodule" # module location
  region = "${var.region}"
  list   = "${var.alist}"
  map    = "${var.map}"
}

更多信息请访问link和some

谢谢您的快速回复,我尝试了与您建议类似的解决方案,这次我按照您的建议进行了尝试,但不幸的是,它似乎不起作用,如果我想创建一个集群,所有的东西都在根上运行,那么terraform似乎能够获取环境变量(TF_VAR_client_id,TF_VAR_client_secret),但是当im与子模块一起运行时,它不会获取环境变量值,当运行terraform plan service principal设置为null时。请随时发表评论。您是否可以在没有敏感信息的情况下共享子模块terraform代码?模块是否可以收集环境变量,还是必须从根目录中提取并传递给子模块?
variable "region" {}
variable "alist" {}
variable "map" {}

module "test" {
  source = "./module/testmodule" # module location
  region = "${var.region}"
  list   = "${var.alist}"
  map    = "${var.map}"
}