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在工作区未完全就绪时就发起创建请求。
修复步骤
- 修正工作区网络配置参数,将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 } - 正确配置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凭据完成鉴权,无需手动生成个人访问令牌。 - 修正集群资源配置,清理冗余依赖:
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] } - 校验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
相关产品推荐
相关产品推荐

