如何从Azure Data Factory(ADF)管道运行Azure CLI命令?
在Azure Data Factory管道中运行Azure CLI命令追加ADLS文件数据的实现方案
我来给你梳理几种实际项目里常用的实现方式,都是经过验证可行的路子:
方案1:Azure Function活动(最推荐,轻量灵活)
这是我平时用得最多的方式,把CLI命令封装到Azure Function里,再用ADF的Azure Function活动调用,既安全又好维护:
- 创建Azure Function
选PowerShell或者Python runtime都行,这里以PowerShell为例,函数代码里用托管身份登录Azure,然后执行你的追加命令:# 用Function的系统托管身份自动登录,不用存密钥 Connect-AzAccount -Identity # 执行ADLS文件追加的CLI命令,参数可以从Function的请求参数里传入 $adlsAccount = $env:ADLS_ACCOUNT_NAME $fileSystem = $env:FILE_SYSTEM_NAME $targetPath = $env:TARGET_FILE_PATH $contentToAppend = $env:CONTENT_TO_APPEND az storage fs file append ` --account-name $adlsAccount ` --file-system $fileSystem ` --path $targetPath ` --content $contentToAppend ` --auth-mode login - 配置权限
给Azure Function的系统托管身份分配Storage Blob Data Contributor角色到目标ADLS账户,确保它有写入权限。 - ADF管道集成
在ADF管道里添加「Azure Function活动」,关联你创建的Function,把需要的参数(比如ADLS账户名、文件路径、要追加的数据)通过活动的「参数」或「环境变量」传入。
方案2:自定义活动+Azure Batch池(适合批量/重型操作)
如果你的追加操作涉及大量数据或者需要多节点并行处理,可以用这个方案:
- 创建Azure Batch池
根据需求选择Windows或Linux虚拟机规格,启用系统托管身份。 - 编写执行脚本
写一个Shell(Linux)或批处理(Windows)脚本,里面包含CLI命令:# 用Batch池的托管身份登录Azure az login --identity # 从临时文件读取要追加的数据,或者直接传入内容 az storage fs file append \ --account-name my-adls-account \ --file-system my-file-system \ --path raw-data/logs.txt \ --content "$(cat /mnt/temp/new-log-entries.txt)" \ --auth-mode login - ADF管道配置
添加「自定义活动」,选择你的Batch池,上传脚本文件,配置必要的环境变量和输入数据集(比如把要追加的数据作为输入传给Batch节点)。 - 权限配置
给Batch池的托管身份分配ADLS的写入权限。
方案3:Shell脚本活动(仅限Self-hosted Integration Runtime)
如果你的ADF用了Self-hosted IR,并且IR机器能访问Azure服务,可以直接用这个方式:
- 准备Self-hosted IR机器
在IR机器上安装Azure CLI,并且配置好身份验证(优先用托管身份,如果机器在Azure内;否则用服务主体)。 - 编写脚本
比如PowerShell脚本:# 如果用服务主体登录,注意密钥要存在安全的地方,比如Key Vault az login --service-principal -u $env:SP_CLIENT_ID -p $env:SP_SECRET --tenant $env:TENANT_ID # 执行追加命令 az storage fs file append ` --account-name my-adls-account ` --file-system my-fs ` --path data/metrics.csv ` --content "2024-05-20,123,456" ` --auth-mode login - ADF管道添加活动
在管道里添加「Shell脚本活动」(Windows选PowerShell,Linux选Shell),把脚本内容粘贴进去,或者引用IR机器上的脚本文件,配置环境变量传入参数。
几个重要注意事项
- 身份验证优先选托管身份:比服务主体更安全,不需要存储密钥,避免泄露风险。
- 先单独测试CLI命令:在本地或Azure Function里先验证CLI命令能正常追加数据,再集成到ADF管道,减少排查难度。
- 数据传递灵活处理:如果要追加的数据来自ADF的其他数据源(比如SQL、Blob),可以先把数据写到临时存储(比如ADLS的临时文件夹),再让CLI命令读取这个临时文件的内容进行追加。
内容的提问来源于stack exchange,提问作者NP007
相关产品推荐
相关产品推荐

