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

如何从DevOps Pipeline传递Storage Account Key至Databricks参数

问题分析与修复:Azure DevOps Pipeline传递存储账户密钥到Databricks失败

问题描述

尝试从Azure DevOps Pipeline传递存储账户密钥到Databricks参数,Pipeline日志显示已成功获取密钥,但Databricks中打印的env参数为空,执行存储挂载时出现错误:

shaded.databricks.org.apache.hadoop.fs.azure.AzureException: java.lang.IllegalArgumentException: Storage Key is not a valid base64 encoded string.

核心原因

  1. 变量跨任务传递失效:AzureCLI任务中仅将密钥设置为当前任务的环境变量,未通过Pipeline变量机制传递到后续Bash任务,导致Bash任务中$STORAGE_ACCOUNT_KEY为空。
  2. Databricks参数格式错误:Databricks的base_parameters仅支持字符串类型,但请求体中把env参数设为JSON对象{"STORAGE_ACCOUNT_KEY": "..."},导致参数解析失败,最终传递到Notebook的是空值。
  3. 空密钥引发挂载错误:由于传递的密钥为空,Hadoop无法解析空字符串为有效的Base64编码密钥,触发报错。

修复步骤

步骤1:将存储密钥设置为Pipeline全局变量

在AzureCLI任务的inlineScript中,添加Pipeline变量设置命令,让后续任务能访问到密钥:

# 原代码中设置环境变量后,新增以下行
echo "##vso[task.setvariable variable=STORAGE_ACCOUNT_KEY]$accountKey"

步骤2:修正Databricks API请求体的参数格式

修改Bash任务中的body2,将base_parameters改为传递字符串类型的密钥,而非JSON对象:

body2='{
  "name": "'$jobName2'",
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "node_type_id": "Standard_DS3_v2",
    "num_workers": 0
  },
  "notebook_task": {
    "notebook_path": "'$notebookPath1'",
    "base_parameters": {
      # 直接传递密钥字符串,或改为更清晰的参数名
      "storage_account_key": "'$STORAGE_ACCOUNT_KEY'"
    }
  }
}'

步骤3:调整Databricks Notebook代码匹配参数

修改Notebook中的widget定义,直接获取密钥参数:

# Cell1
dbutils.widgets.text("storage_account_key", "", "Storage Account Key")
storage_account_access_key = dbutils.widgets.get("storage_account_key")
print("Storage Account Key:", storage_account_access_key)

# Cell2
storage_account_name = "你的存储账户名"
container = "raw"
mountDir = "你的挂载目录"
dbutils.fs.mount(
  source = f"wasbs://{container}@{storage_account_name}.blob.core.windows.net",
  mount_point = f"/mnt/{mountDir}",
  extra_configs = {f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net": storage_account_access_key}
)

验证要点

  • 检查Pipeline日志中Bash任务的$STORAGE_ACCOUNT_KEY是否输出正确值(会被自动脱敏显示为***)。
  • 运行Notebook后,确认打印的密钥不为空。
  • 挂载操作成功执行,无Base64编码错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:13:11