Terraform无法通过服务主体认证Databricks的问题及解决办法
Terraform配置Databricks认证报错处理
一、服务主体认证报错:Error: cannot create schema: invalid Databricks Workspace configuration
问题原因
你当前将host配置为账号级URL https://accounts.azuredatabricks.net,但创建工作区内资源(如schema)时,必须使用工作区专属URL,而非账号管理入口的URL。
修正后的配置示例
将host替换为目标Databricks工作区的URL,可通过data.azurerm_databricks_workspace获取:
provider "databricks" { host = data.azurerm_databricks_workspace.workspace_data.workspace_url account_id = module.global_settings.databricks_account_id azure_client_id = module.global_settings.databricks_client_id azure_client_secret = data.azurerm_key_vault_secret.sp_db.value azure_tenant_id = module.global_settings.azure_tenant_id }
二、MSI认证超时错误:failed during request visitor: inner token: token request: Get "http://XXX.XXX.XXX.XXX/metadata/identity/oauth2/token?api-version=2018-02-01&resource=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX": context deadline exceeded
问题原因
- 运行环境限制:MSI认证依赖Azure实例元数据服务(IMDS),如果Terraform在Azure外部环境运行(如本地机器),无法访问IMDS的专属地址
http://169.254.169.254,导致请求超时。 - 网络策略拦截:若在Azure资源内部运行,可能存在NSG规则或防火墙阻止了对IMDS地址的访问。
- 资源ID配置错误:
azure_workspace_resource_id需填写完整的工作区资源ID(格式为/subscriptions/{订阅ID}/resourceGroups/{资源组}/providers/Microsoft.Databricks/workspaces/{工作区名称}),而非仅workspace_id字段值。
解决办法
- 若在本地运行Terraform,放弃MSI认证,使用上述修正后的服务主体认证配置。
- 若在Azure资源内运行,检查网络规则,确保允许访问
http://169.254.169.254的元数据服务端口。 - 修正
azure_workspace_resource_id为完整资源ID,示例:
provider "databricks" { host = data.azurerm_databricks_workspace.workspace_data.workspace_url azure_workspace_resource_id = data.azurerm_databricks_workspace.workspace_data.id azure_use_msi = true }
内容的提问来源于stack exchange,提问作者limitIntegral314
相关产品推荐
相关产品推荐

