Azure DevOps+Terraform部署Databricks Notebook遇执行错误
解决Azure DevOps流水线部署Databricks Notebook的Terraform认证与配置问题
1. 认证错误:无法读取Notebook,提示需执行az login
问题原因
本地运行时依赖个人Azure CLI登录凭证,但Azure DevOps流水线代理环境未自动将服务连接身份传递给Terraform的Databricks provider,导致provider无法获取访问Databricks的有效令牌。
解决方案
调整Databricks Provider配置
在providers.tf中指定Azure CLI认证方式,并绑定目标Databricks工作区资源ID:
provider "databricks" { azure_workspace_resource_id = "/subscriptions/你的订阅ID/resourceGroups/目标资源组名/providers/Microsoft.Databricks/workspaces/目标工作区名称" auth_type = "azure-cli" }
在流水线中添加Azure CLI登录任务
利用Azure DevOps服务连接身份自动完成Azure CLI认证,让后续Terraform任务复用该上下文:
- task: AzureCLI@2 inputs: azureSubscription: "你的服务连接名称" scriptType: "bash" inlineScript: | # 验证登录状态,确保上下文正确 az account show
该任务会自动使用服务连接的所有者身份完成认证,无需手动执行az login。
2. Terraform Plan提示无配置文件
问题原因
- 流水线执行Terraform的工作目录错误,未指向存放
.tf文件的路径 - 未执行
terraform init初始化步骤,导致Provider/模块未加载,无法识别配置文件 - Git仓库中遗漏必要的
.tf文件,或被.gitignore规则排除
解决方案
指定正确的工作目录
在Terraform任务中明确设置workingDirectory,指向你的配置文件所在路径(例如terraform/databricks):
- task: TerraformCLI@0 inputs: command: "plan" workingDirectory: "terraform/databricks" environmentServiceNameAzureRM: "你的服务连接名称"
确保执行Terraform初始化步骤
流水线中必须先执行init再执行plan/apply,同时配置远程backend(若使用):
- task: TerraformCLI@0 inputs: command: "init" workingDirectory: "terraform/databricks" backendType: "azurerm" backendServiceArm: "你的服务连接名称" backendAzureRmResourceGroupName: "Backend存储账户所在资源组" backendAzureRmStorageAccountName: "Backend存储账户名" backendAzureRmContainerName: "存储容器名" backendAzureRmKey: "terraform.tfstate"
检查代码仓库完整性
确认所有.tf配置文件(包括providers.tf、变量文件、Notebook部署相关配置)都已提交到Git仓库,且未被.gitignore规则排除。
额外权限验证
由于你的服务连接是Azure订阅所有者,需确认该身份具备:
- Databricks工作区的Contributor权限,确保能读写Notebook
- Terraform Backend存储账户的存储Blob数据所有者权限,确保能读写状态文件
内容的提问来源于stack exchange,提问作者BI Dude
相关产品推荐
相关产品推荐

