Terraform 用户 TF_VAR 不工作的嵌套模块
Posted
技术标签:
【中文标题】Terraform 用户 TF_VAR 不工作的嵌套模块【英文标题】:Terraform User TF_VAR not working nested module 【发布时间】:2019-06-08 00:44:24 【问题描述】:我正在为我的基础设施开发一个 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 ,我没有收到任何错误。
问题:通过模块使用环境变量而不在每次调用中分配它(!!来自模块!!)
我该如何解决这个问题??
谢谢。
【问题讨论】:
【参考方案1】:在您的模块中,它无法通过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
【讨论】:
【参考方案2】:我认为您缺少从模块发送变量。哟可以将你的 main.tf 更改为:
module "terra_module"
source = "./terra1/"
PW = "someValue"
【讨论】:
错误答案,PO 要求从TF_VAR_xxxx
获取变量的值。用你的代码硬编码值,它永远不会工作,以上是关于Terraform 用户 TF_VAR 不工作的嵌套模块的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudFormation:使用 resolve 具有动态引用的嵌套子会导致错误并且不执行解析以从 Parameter Store 获取值
使用 arrayFilters 更新 MongoDB 中的嵌套子文档
使用 Terraform 在阿里云上快速部署 MQTT 集群