Terraform用户TF_VAR无法使用嵌套模块

时间:2019-01-14 00:39:52

标签: amazon-web-services terraform devops infrastructure-as-a-code

我正在为我的基础设施的terraform配置模块工作。 我的结构如下所示,

terra1
|
|---terra1.tf

main.tf

main.tf

 module "terra_module" {
   source = "./terra1/"

  }

terra1.tf

variable "PW" {}

output "data"  {
     value = "${var.PW}"
}

terra1.tf在子目录中,它包含我的模块代码。当我通过main.tf文件调用它时,它给了我变量错误。

 ##Command
 TF_VAR_PW=bar terraform apply

顺便说一句,  如果我在自己的目录上运行terra1,则不会出现任何错误。

问题:通过模块使用环境变量,而不在每次调用中分配它(!! from模块!!)

我该如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

在您的模块中,它不知道您尝试通过TF_VAR_XXX执行的环境变量。您必须搭建一座桥来转移它。

这是解决方法

variable "PW" {}

module "terra_module" {
  source = "./terra1/"

  PW = "${var.PW}"
}

我知道这是一件烦人的复制/粘贴工作,但这就是terraform的工作方式

如果要从此模块获取输出,则需要添加另一个output(将其传输回去)

因此完整的main.tf变为:

variable "PW" {}

module "terra_module" {
  source = "./terra1/"

  PW = "${var.PW}"
}

output "data" {
  value = "${module.terra_module.data}"
}

那么您将得到:

$ TF_VAR_PW=bar terraform apply

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

data = bar

答案 1 :(得分:0)

我认为您缺少从模块发送varialbe的功能。您可以将main.tf更改为:

module "terra_module" {
   source = "./terra1/"
   PW     = "someValue"
  }