新手求助:如何通过REST API获取ADF Pipeline的运行状态?
问题描述
我是Azure Data Factory(ADF)新手,想通过REST API检查Pipeline A是否在运行。写了一段WebActivity代码,但不知道该传哪些参数,也搞不懂怎么通过这个活动获取运行状态,触发后根本拿不到输出结果。查过相关文档但问题没解决,后续还要根据Pipeline的运行状态走IF ELSE逻辑。
原代码如下:
"name": "get pipeline A runs", "description": "pipeline A runs.", "type": "WebActivity", "dependsOn": [ { "activity": "Lookup1", "dependencyConditions": [ "Succeeded" ] } ], "policy": { "timeout": "0.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": false, "secureInput": false }, "userProperties": [], "typeProperties": { "url": "https://management.azure.com/subscriptions/xx/resourceGroups/yy/providers/Microsoft.DataFactory/factories/zz/queryPipelineRuns?api-version=2018-06-01", "method": "GET", "headers": { "Content-Type": "application/json" }, "body": "()" }
问题修正与实现步骤
先说说你代码里的几个关键问题:
- 请求方法错了:
queryPipelineRuns接口要求用POST,你用了GET,接口根本没法处理。 - Body格式完全不对:这个接口需要传JSON格式的查询条件,你写的
"()"完全无效,而且GET方法本来就不该带Body。 - 权限没配置:WebActivity得有访问ADF管理API的权限,要么给ADF托管标识分配
Data Factory Contributor角色,要么用服务主体认证(得在headers里加令牌)。
修正后的WebActivity代码
"name": "get pipeline A runs", "description": "Check if Pipeline A is running", "type": "WebActivity", "dependsOn": [ { "activity": "Lookup1", "dependencyConditions": [ "Succeeded" ] } ], "policy": { "timeout": "0.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": false, "secureInput": false }, "userProperties": [], "typeProperties": { "url": "https://management.azure.com/subscriptions/xx/resourceGroups/yy/providers/Microsoft.DataFactory/factories/zz/queryPipelineRuns?api-version=2018-06-01", "method": "POST", "headers": { "Content-Type": "application/json" }, "body": { "lastUpdatedAfter": "@{adddays(utcnow(), -1)}", "lastUpdatedBefore": "@{utcnow()}", "filters": [ { "operand": "PipelineName", "operator": "Equals", "values": ["PipelineA"] }, { "operand": "Status", "operator": "Equals", "values": ["InProgress"] } ] }, "authentication": { "type": "MSI", "resource": "https://management.azure.com/" } }
关键参数说明
- 请求方法改成
POST,和接口要求匹配。 - 请求体(Body):
lastUpdatedAfter和lastUpdatedBefore:限定查询时间范围,这里查最近1天的运行记录,你可以根据需要调整。filters:指定要查的流水线名称(PipelineName填你的Pipeline A)和状态(Status设为InProgress就是查运行中的记录)。
- 认证方式用MSI(托管标识):提前给ADF的托管标识在资源组或订阅级别分配
Data Factory Contributor权限,这样WebActivity能自动获取令牌访问API,不用手动处理认证。
获取状态与IF ELSE逻辑实现
- 拿输出结果:WebActivity的输出里会有匹配的运行记录,用表达式
@activity('get pipeline A runs').output.value就能拿到结果数组。 - 判断是否在运行:用
length()函数判断数组长度,如果大于0,说明Pipeline A正在运行:@greater(length(activity('get pipeline A runs').output.value), 0) - 加IF ELSE分支:在ADF里添加
If Condition活动,把上面的表达式作为条件:- 条件为真(数组长度>0):走“Pipeline正在运行”的逻辑。
- 条件为假(数组长度=0):走“Pipeline没在运行”的逻辑。
内容的提问来源于stack exchange,提问作者cinnamonroll
相关产品推荐
相关产品推荐

