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
相关产品推荐
相关产品推荐

