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

Terraform创建Azure Databricks集群失败问题排查

Terraform创建VNet注入式Databricks集群卡住的排查与修复

核心常见原因

  • 你配置的是无公网IP(No Public IP)模式的VNet注入Databricks工作区,默认配置下Databricks provider会尝试通过公网访问工作区API,该部署模式下工作区公网管控端点默认关闭,API请求持续超时无响应,表现为创建流程一直挂起,无明确报错。
  • 工作区custom_parameters块配置错误:你当前给public_subnet_network_security_group_association_id和private_subnet_network_security_group_association_id传的是子网资源ID,这两个字段要求传入子网与NSG关联对象的资源ID,配置错误会导致工作区网络平面初始化异常,无法接收集群创建指令。
  • Databricks provider未正确配置鉴权与工作区地址,没有关联刚创建的工作区实例,使用的凭据无工作区集群管理权限,或访问地址错误导致请求无法送达。
  • 子网关联的NSG出站规则缺漏,未放通Databricks管控平面、Azure AD、Azure存储的必要出站流量,工作区内部无法拉取集群镜像、无法和管控层通信,集群创建任务一直pending。
  • databricks_cluster资源存在冗余依赖与字段类型错误:is_pinned是布尔类型字段,你当前传入的是字符串"true",旧版本provider会出现静默解析错误;冗余的VNet、子网、NSG依赖可能导致provider在工作区未完全就绪时就发起创建请求。

修复步骤

  1. 修正工作区网络配置参数,将NSG关联ID字段替换为正确的关联资源引用:
    custom_parameters {
      no_public_ip = true
      virtual_network_id = azurerm_virtual_network.vnet.id
      public_subnet_name  = azurerm_subnet.public_subnet.name
      private_subnet_name = azurerm_subnet.private_subnet.name
      # 修正为子网NSG关联对象的ID,而非子网ID
      public_subnet_network_security_group_association_id  = azurerm_subnet_network_security_group_association.public-sn-nsg-assoc.id
      private_subnet_network_security_group_association_id = azurerm_subnet_network_security_group_association.private-sn-nsg-assoc.id
    }
    
  2. 正确配置Databricks provider,显式关联工作区地址与资源ID,走Azure AD原生鉴权,避免公网访问超时:
    provider "databricks" {
      host                        = azurerm_databricks_workspace.dbworkspace.workspace_url
      azure_workspace_resource_id = azurerm_databricks_workspace.dbworkspace.id
    }
    
    不要硬编码工作区地址,直接引用工作区输出的workspace_url属性,provider会自动复用当前Terraform使用的Azure服务主体/CLI凭据完成鉴权,无需手动生成个人访问令牌。
  3. 修正集群资源配置,清理冗余依赖:
    resource "databricks_cluster" "dbcluster" {
      cluster_name            = "${var.applicationName}-${var.environment}-cluster"
      spark_version           = "10.4.x-scala2.12"
      node_type_id            = "Standard_DS3_v2"
      autotermination_minutes = 10
      enable_local_disk_encryption = true
      is_pinned               = true # 移除引号,使用布尔值
    
      autoscale {
        min_workers = 1
        max_workers = 8
      }
      # 仅保留工作区依赖即可,其余Azure资源依赖已被工作区资源持有
      depends_on = [azurerm_databricks_workspace.dbworkspace]
    }
    
  4. 校验NSG出站规则,确保两个Databricks子网放通以下出站流量:
    • 到AzureDatabricks、AzureActiveDirectory、Storage服务标签的443端口出站
    • 两个Databricks子网之间的所有端口互通
      若配置了强制隧道将流量引到防火墙/网络虚拟设备,需要确保设备未拦截上述HTTPS流量,且配置了对应的服务端点放行规则。

快速定位方法

  • 执行apply时增加debug日志参数:TF_LOG=DEBUG terraform apply,观察Databricks provider的HTTP请求日志,如果出现TCP连接超时,就是网络连通性问题;如果返回403/401就是鉴权问题;如果返回400就是参数配置错误。
  • 工作区创建完成后手动登录Databricks控制台,尝试手动创建集群:如果手动创建也卡住,就是工作区网络规则配置错误;如果手动创建正常,就是Terraform侧Databricks provider的配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:45:29