You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform的tfvars数组中引用random_password资源结果?

问题:如何在tfvars数组中引用random_password的结果?

我创建了如下random_password资源:

resource "random_password" "secret1" {
  length = 12
  special = false
  numeric = true
}

尝试在terraform.tfvars的fields数组中引用该资源结果:

fields = [
    {
      fieldname = "Username"
      itemvalue = "terraform"
    },
    {
      fieldname = "Password"
      itemvalue = random_password.secret1.result
    }
  ]

但触发报错:

│ Error: Variables not allowed
│
│   on terraform.tfvars line 17:
│   17:       itemvalue = random_password.random_secret.result
│
│ Variables may not be used here.

请问如何实现不使用静态值,将random_password的结果作为itemvalue?


核心原因

terraform.tfvars是静态变量定义文件,只能存放静态值,不支持引用Terraform资源、数据源或表达式——这就是报错的根源。

正确实现方式

方案1:直接在主配置中定义含动态值的fields

把原本写在tfvars里的fields数组移到主配置文件(比如main.tf),直接引用random_password的结果:

resource "random_password" "secret1" {
  length = 12
  special = false
  numeric = true
}

# 定义包含动态密码的本地变量
locals {
  fields = [
    {
      fieldname = "Username"
      itemvalue = "terraform"
    },
    {
      fieldname = "Password"
      itemvalue = random_password.secret1.result
    }
  ]
}

# 后续资源直接使用local.fields
resource "your_target_resource" "example" {
  fields = local.fields
}

方案2:保留tfvars静态部分,主配置中合并动态值

如果需要保留tfvars里静态字段的可配置性,只动态追加密码字段:

  1. 在terraform.tfvars中定义静态字段:
static_fields = [
    {
      fieldname = "Username"
      itemvalue = "terraform"
    }
  ]
  1. 在主配置文件中合并静态变量和动态密码:
# 声明接收静态字段的变量
variable "static_fields" {
  type = list(object({
    fieldname = string
    itemvalue = string
  }))
  default = []
}

resource "random_password" "secret1" {
  length = 12
  special = false
  numeric = true
}

# 合并静态字段和动态密码
locals {
  fields = concat(
    var.static_fields,
    [
      {
        fieldname = "Password"
        itemvalue = random_password.secret1.result
      }
    ]
  )
}

# 后续资源使用合并后的local.fields
resource "your_target_resource" "example" {
  fields = local.fields
}

补充说明

  • Terraform的.tfvars文件仅用于提供静态输入值,所有动态计算、资源引用的逻辑都必须放在.tf配置文件中。
  • 如果需要对外暴露可配置项,优先通过variable定义输入参数,再在主配置中结合动态值生成最终数据结构。

内容的提问来源于stack exchange,提问作者Lieferer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:29:57