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

Terragrunt中for_each元参数方案:保留指定Databricks集群

解决Terraform/Terragrunt集群模块for_each类型不一致问题

问题根源

你原来的代码存在两个核心问题:

  1. 逻辑不符合需求:当run_cluster_module为true时,会遍历所有集群,而非仅保留clusterX
  2. 类型不匹配:local.clusters是包含特定结构对象的map(map(object({...}))),而{}是默认的map(any)类型,Terraform会判定两者类型不一致,抛出错误

修复方案

直接构建一个仅包含clusterX的过滤后map,若clusterX不存在则返回空map,确保其类型与原clusters完全一致:

修改main.tf中的locals块

locals {
    #... 其他本地变量
    clusters = {
      clusterA = {
        name = "clusterA"
        #... 其他集群配置
      },
      clusterB = {
        name = "clusterB"
        #... 其他集群配置
      },
      clusterX = {
        name = "clusterX"
        #... 其他集群配置
      }
    }

    # 过滤出仅clusterX的配置,不存在则为空map
    filtered_clusters = tomap({
      for cluster_key, cluster_config in local.clusters : cluster_key => cluster_config
      if cluster_key == "clusterX"
    })
}

修改集群模块的for_each配置

module "cluster" {
    for_each = local.filtered_clusters
    # 传递集群配置到模块,示例:
    name = each.value.name
    #... 其他模块属性(对应原集群配置的字段)
}

说明

  • filtered_clusters会完全继承原clusters的类型(map(object({...}))),即使为空时也与原类型一致,彻底解决类型不匹配问题
  • 当clusterX存在时,模块仅会创建该集群;不存在时,模块不会执行(因为for_each是空map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:33:25