Prefect 2.0:如何仅通过curl触发Flow运行?
问题描述
- 已编写简单Prefect Flow,启动Orion和Agent后可通过Web UI触发运行
- 尝试用curl触发Flow,已知Flow ID为
7ca8a456-94d7-4aa1-80b9-64894fdca93b,需传入参数{'msg':'Hello world'} - 执行curl命令后收到307临时重定向响应,需正确触发方式
我的Flow代码
from prefect import flow import datetime @flow def firstflow(inreq): retval={} retval['type']=str(type(retval)) retval['datetime']=str(datetime.datetime.now()) print(retval) return retval
尝试的curl命令
curl -X POST -H 'Content-Type: application/json' http://127.0.0.1:4200/api/flow_runs \ -d '{"flow_id": "7ca8a456-94d7-4aa1-80b9-64894fdca93b", "parameters": {"msg": "Hello World"}, "tags": ["test"]}'
收到的响应
INFO: 127.0.0.1:53482 - "POST /flow_runs HTTP/1.1" 307 Temporary Redirect
解决方案
- 修正API路径:Prefect Orion的API必须指定版本前缀,正确路径为
http://127.0.0.1:4200/api/0/flow_runs,缺失版本号会直接导致307重定向。 - 匹配Flow参数名:你的Flow定义的参数是
inreq,但curl中传入的参数键是msg,二者必须一致。如果要传递msg参数,要么修改Flow的参数名为msg,要么在curl中将参数结构调整为"parameters": {"inreq": {"msg": "Hello World"}}(根据实际业务需求选择)。 - 可选:跟随重定向:如果暂时不想修改路径,可以在curl命令中添加
-L参数让工具自动跟随重定向,但更推荐使用规范的带版本号API路径。
修正后的curl命令示例:
# 场景1:Flow参数已改为msg curl -X POST -H 'Content-Type: application/json' http://127.0.0.1:4200/api/0/flow_runs \ -d '{"flow_id": "7ca8a456-94d7-4aa1-80b9-64894fdca93b", "parameters": {"msg": "Hello World"}, "tags": ["test"]}' # 场景2:保留Flow参数inreq,传入包含msg的字典 curl -X POST -H 'Content-Type: application/json' http://127.0.0.1:4200/api/0/flow_runs \ -d '{"flow_id": "7ca8a456-94d7-4aa1-80b9-64894fdca93b", "parameters": {"inreq": {"msg": "Hello World"}}, "tags": ["test"]}'
内容的提问来源于stack exchange,提问作者Bino Oetomo
相关产品推荐
相关产品推荐

