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

Azure多Databricks工作区部署时Terraform Provider配置问题

解决方案

1. 根模块配置多实例Databricks Provider

修改./providers.tf,为每个工作区创建带唯一别名的Databricks Provider实例,确保每个工作区有独立的认证配置:

# ./providers.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.29"
    }
    databricks = {
      source  = "databricks/databricks"
      version = "~> 1.6"
    }
  }

  backend "azurerm" {
    # 环境变量配置保持原有设置
  }
}

provider "azurerm" {
  features {}
}

# 为每个Databricks工作区生成独立的Provider实例
provider "databricks" {
  for_each                     = toset(var.dbw-names)
  alias                        = each.value
  azure_workspace_resource_id = module.dbw-default[index(var.dbw-names, each.value)].id
}

2. 调整根模块的集群模块调用

修改./main.tf,让集群模块与工作区模块一一对应,绑定对应的Provider别名:

# ./main.tf
# Databricks workspace 配置保持不变
module "dbw-default" {
  count                                 = length(var.dbw-names)
  source                                = "./modules/dbw"
  dbw-name                              = var.dbw-names[count.index]
  dbw-project                           = var.project
  dbw-env                               = var.env
  dbw-resource-group-name               = module.rg-default[index(var.rg-names, "databricks")].name
  dbw-location                          = var.location
  dbw-sku                               = var.dbw-sku
  dbw-tags                              = merge(var.tags, { "purpose" = "databricks", "env" = var.env })
}

# Databricks Cluster:与工作区一一创建
module "db-cluster-default" {
  count                = length(var.dbw-names)
  source               = "./modules/db-cluster"
  # 绑定对应工作区的Provider实例
  providers            = {
    databricks = databricks.${var.dbw-names[count.index]}
  }
  # 为集群添加工作区后缀,避免名称冲突
  db-cluster-name      = "${var.db-cluster-name}-${var.dbw-names[count.index]}"
  db-cluster-env       = var.env
  db-cluster-project   = var.db-cluster-project

  db-cluster-tags                    = merge(var.tags, { "purpose" = "databricks", "env" = var.env, "workspace" = var.dbw-names[count.index] })
  db-cluster-min-workers             = var.db-cluster-min-workers
  db-cluster-max-workers             = var.db-cluster-max-workers
  db-cluster-autotermination-minutes = var.db-cluster-autotermination-minutes
}

3. 优化db-cluster模块配置

移除模块内重复的Provider声明,补充缺失的数据源配置:

# ./modules/db-cluster/main.tf
# 移除模块内的terraform required_providers块(根模块已统一管理)

# 补充缺失的Spark版本和节点类型数据源
data "databricks_spark_version" "latest_lts" {
  long_term_support = true
}

data "databricks_node_type" "smallest" {
  local_disk = true
}

resource "databricks_cluster" "shared_autoscaling" {
  cluster_name            = format("db-cluster-%s-%s", var.db-cluster-project, var.db-cluster-env)
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = var.db-cluster-autotermination-minutes
  autoscale {
    min_workers = var.db-cluster-min-workers
    max_workers = var.db-cluster-max-workers
  }
}

核心逻辑说明

  • Databricks Provider的azure_workspace_resource_id是全局配置,无法动态切换,因此必须为每个工作区创建独立的Provider实例,通过别名区分。
  • 集群模块调用时必须显式指定对应的Provider别名,确保Terraform将集群绑定到正确的工作区。
  • 为集群名称添加工作区后缀,避免多工作区下的资源名称冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:20:26