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

如何从对象列表创建Terraform动态块?代码报错求解

Terraform动态块遍历数组错误修复

变量定义

variable "volumes" {
  default = [
    {
      "name" : "mnt",
      "value" : "/mnt/cvdupdate/"
    },
    {
      "name" : "efs",
      "value" : "/var"
    },
  ]
}

错误的动态块实现

dynamic "volume" {
  for_each = var.volumes == "" ? [] : [true]
  content {
    name = volume["name"]
  }
}

执行报错信息

name = volume["name"]
│
│ The given key does not identify an element in this collection value.

期望生成的配置

volume {
  name = "mnt"
}

volume {
  name = "efs"
}

问题分析与修复

核心问题点

  1. for_each逻辑完全错误
    var.volumes是数组类型,和字符串""做相等判断没有意义,而且返回[true]只会让动态块执行一次,无法遍历数组内的每个元素。
  2. 迭代器元素引用错误
    Terraform动态块的迭代器(这里命名为volume),其对应数组元素的引用是volume.value,直接写volume["name"]会把迭代器对象当成映射来取值,自然报错。

修复后的代码

dynamic "volume" {
  for_each = var.volumes
  content {
    name = volume.value["name"]
  }
}

如果需要兼容var.volumes为空的场景,直接使用var.volumes即可——空数组会让动态块不生成任何volume块,无需额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:10:52