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

Terraform:嵌套for_each的dynamic资源中如何访问列表值

解决Terraform dynamic块中列表值访问问题

你的问题出在dynamic块的上下文混淆:外层databricks_cluster资源的each和内部dynamic "init_scripts"块的each是两个不同的迭代上下文,你现在用的each.value指向的是外层集群对象,而非当前循环的脚本路径。

正确写法及优化点

直接用dynamic块的名称作为迭代器引用,同时简化for_each的写法:

variable "clusters" {
  type = map(object({
    cluster_name            = string # 建议用下划线命名,符合Terraform惯例
    init_scripts            = list(string)
  }))
}

resource "databricks_cluster" "cluster" {
  for_each = var.clusters

  cluster_name = each.value.cluster_name # 用each.value直接访问集群属性,更简洁

  dynamic "init_scripts" {
    # 直接遍历当前集群的init_scripts列表,空列表会自动跳过生成块
    for_each = each.value.init_scripts
    content {
      file {
        # 用dynamic块的名称init_scripts来引用当前循环的脚本值
        destination = init_scripts.value
      }
    }
  }
}

关键说明

  1. 上下文区分:dynamic块会创建自己的迭代上下文,默认迭代器名称就是dynamic块的名称(这里是init_scripts),所以要用init_scripts.value访问当前循环的列表元素,而不是外层的each.value。
  2. 简化for_each:外层each.value就是当前集群的对象,直接用each.value.init_scripts代替var.clusters[each.key].init-scripts,代码更简洁易读。
  3. 空列表处理:如果init_scripts是空列表,for_each = each.value.init_scripts会自动跳过,不需要额外的if判断;如果要处理可能的null值,可以写成for_each = coalesce(each.value.init_scripts, [])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:25:39