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

在Azure Data Factory中通过Function App运行Python脚本报Unauthorized错误如何解决

ADF调用Azure Function报401未授权错误解决方案

你遇到的Unauthorized报错是Azure Data Factory调用Azure Function阶段的身份鉴权失败,和你代码中操作存储账户的逻辑无关,按以下步骤排查修复:

排查步骤

  • 检查Azure Function的授权级别配置
    进入Function App对应的HTTP触发器函数页面,左侧菜单选择「函数密钥」,查看授权级别:
    • 如果授权级别为Function或Admin:复制页面中默认的函数密钥,回到ADF的Azure Function活动配置页,在「函数密钥」输入框中粘贴该密钥即可。
    • 如果授权级别为Anonymous:无需配置密钥,但生产环境不建议使用该级别。
  • 检查ADF中Azure Function链接服务配置
    确认链接服务中填写的「Function App URL」和Function App概览页显示的官方地址完全一致,无多余后缀。
    若你的Function App开启了App Service身份验证(Azure AD鉴权),还需要额外配置托管身份权限:
    1. 为ADF实例开启系统分配托管身份
    2. 进入Function App的「访问控制(IAM)」页面,添加角色分配,给ADF的托管身份分配Function App调用者角色
    3. 回到ADF的Function链接服务配置页,选择「系统分配托管身份」作为认证方式
  • 检查网络访问限制
    如果Function App配置了IP访问限制,需要将ADF对应区域的服务出站IP添加到Function App的白名单;若使用私有端点部署,需确保ADF和Function App网络连通。

额外代码优化建议(与当前报错无关,提升Function运行稳定性)

你现有代码存在两个可优化点:

  1. 语法错误:file2 = pd.DataFrame(])多了一个右括号,需修正为file2 = pd.DataFrame()
  2. 临时文件路径兼容性问题:Windows格式的反斜杠路径在Linux环境的Function App中无法识别,建议直接用内存流操作,无需写入本地磁盘:
from io import BytesIO
# 下载blob时直接读入内存,省略写本地步骤
blob_data = blob_client_instance.download_blob()
if i == 'file1.csv':
    file1 = pd.read_csv(BytesIO(blob_data.readall()))
if i == 'file2.csv':
    file2 = pd.read_csv(BytesIO(blob_data.readall()))

# 合并后直接转字节流上传ADLS,省略写本地步骤
output = BytesIO()
summary.to_csv(output, index=False, encoding='utf-8')
output.seek(0)
file_client.upload_data(output.read(), overwrite=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:03