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

Terraform动态资源中从对象变量提取值的查找问题

Terraform动态块内提取对象变量值的正确方法

先明确对象变量的合理结构(基于你的描述补充),假设myobjectvar定义如下:

variable "myobjectvar" {
  type = object({
    var1 = string
    var2 = number
    # 假设var3是存储多组资源配置的map,每个元素包含domainname和http_port
    var3 = map(object({
      domainname = string
      http_port  = number
    }))
  })
}

针对嵌套的dynamic "resource1"与dynamic "resource2"块,正确提取属性的写法如下:

resource "example_parent" "main" {
  # 父资源基础配置...

  # 外层动态块:迭代myobjectvar.var3中的所有配置项
  dynamic "resource1" {
    for_each = var.myobjectvar.var3
    content {
      # 用resource1.key获取map的键值(作为资源标识)
      resource_id = resource1.key

      # 内层动态块:基于当前resource1的配置生成子资源
      dynamic "resource2" {
        # 若每个resource1对应一个resource2,将当前元素转为单元素集合
        for_each = [resource1.value]
        content {
          # 直接通过迭代上下文访问属性
          domainname = resource2.value.domainname
          http_port  = resource2.value.http_port
        }
      }
    }
  }
}

常见问题修正

  • lookup函数误用:只有当domainname或http_port是可选属性时才需要用lookup,正确写法为lookup(resource1.value, "domainname", "default-domain");如果属性是对象类型的必选字段,直接引用resource1.value.domainname即可。
  • 上下文引用错误:动态块内必须通过each.value(或动态块标签名,如resource1.value)访问当前迭代的元素,不能直接写var.myobjectvar.var3.domainname,因为var.myobjectvar.var3是集合而非单个对象。
  • 迭代集合类型错误:for_each要求传入map或set类型,如果你的目标属性是单个对象而非集合,需要用[var.myobjectvar]转为单元素集合后再使用动态块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:12:52