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 不工作的嵌套模块的主要内容,如果未能解决你的问题,请参考以下文章

我的嵌套子查询和 substr 函数有啥问题

AWS CloudFormation:使用 resolve 具有动态引用的嵌套子会导致错误并且不执行解析以从 Parameter Store 获取值

使用 arrayFilters 更新 MongoDB 中的嵌套子文档

使用 Terraform 在阿里云上快速部署 MQTT 集群

将 GitHub Actions 工作流程中的输入值绕过到 terraform 变量文件

猫鼬中的嵌套子模式