ADF中如何将Copy Data步骤的文件名/路径传递给Azure Functions
实现方案总览
你可以直接通过ADF内置的动态表达式,从Copy Data活动的运行输出中提取文件路径/文件名,直接嵌入到Azure Functions活动的请求Body中,无需额外配置存储触发器,具体实现步骤如下:
步骤1:捕获Copy Data活动的输出文件信息
Copy Data活动运行完成后会生成结构化输出,你可以先触发一次测试运行,在管道运行历史的「输出」tab中查看实际返回的字段结构,根据你是单文件复制还是批量多文件复制选择对应取值方式:
- 单文件复制场景:直接从输出的
sink节点取字段即可,ADLS Gen2完整路径拼接示例:@concat('abfss://<你的容器名>@<存储账号名>.dfs.core.windows.net/', activity('Copy Data').output.sink.folderPath, '/', activity('Copy Data').output.sink.fileName) - 批量多文件复制场景:进入Copy Data活动的「设置」页,勾选
日志记录,选择记录「已复制的文件」,将日志输出到指定的ADLS路径;后续增加Lookup活动读取该日志文件,解析出所有复制成功的文件路径列表,再嵌套ForEach活动循环调用Azure Functions即可。
步骤2:配置Azure Functions活动的请求Body
在管道中添加Azure Functions活动,选择POST请求方法,在Body配置框中直接使用动态表达式填入你需要传递的参数,示例配置如下:
{ "fileFullPath": "@concat('abfss://<你的容器名>@<存储账号名>.dfs.core.windows.net/', activity('Copy Data').output.sink.folderPath, '/', activity('Copy Data').output.sink.fileName)", "fileName": "@activity('Copy Data').output.sink.fileName", "opType": "sftp_sync_process" }
你可以根据自己的Azure Functions代码逻辑调整参数名、增加其他自定义参数。
步骤3:VNet适配配置注意事项
因为你的PostgreSQL部署在VNet内,需要额外完成以下配置避免访问失败:
- 确保ADF已配置VNet集成,Azure Functions已开启VNet接入,二者和PostgreSQL在同一VNet或已配置对等互通
- PostgreSQL的防火墙规则放行Azure Functions所在子网的IP段
- 如果ADLS也配置了网络访问限制,需要同时放行ADF和Azure Functions的访问权限,建议优先用托管身份做身份校验,无需传递密钥信息。
常见问题规避
- 路径拼接时如果出现多余斜杠,可以用
@replace()函数处理,例如@replace(<拼接后的路径>, '//', '/') - 如果Copy Data活动配置了错误处理、跳过失败文件,建议在传递路径前先判断
activity('Copy Data').output.status的值为Succeeded再调用Azure Functions,避免传递无效文件路径。
内容的提问来源于stack exchange,提问作者YusufD
相关产品推荐
相关产品推荐

