Airflow手动触发DAG时传入params参数未生效始终返回默认值
问题根因
该问题由Airflow 2.2.2版本的原生机制导致,与MWAA托管环境无关:
- Airflow直到2.3.0版本才正式支持「手动触发DAG时传入的运行配置自动覆盖DAG定义中Param默认值」的特性,2.2.2版本无此逻辑。
- 在2.2.2版本中,DAG初始化时定义的
params={"x": Param(42)}属于静态配置,模板渲染{{ params.x }}时只会读取这个静态默认值,不会主动拉取手动触发时传入的动态参数。 - 2.2.2版本下手动触发传入的自定义参数,实际存储在
dag_run.conf对象中,不会自动合并到params字典内。
修复方案
针对2.2.2版本,只需要调整模板取值逻辑,优先从运行时配置读取参数,不存在时回退到默认值即可,修改后的任务代码如下:
PythonOperator( task_id="print_x", op_kwargs={ "x": "{{ dag_run.conf.get('x', params.x) }}", }, python_callable=print_x, )
补充:如果后续升级到Airflow 2.3及以上版本,你最初编写的
{{ params.x }}写法就可以正常读取触发时传入的覆盖值,无需额外调整取值路径。
内容的提问来源于stack exchange,提问作者LondonRob
相关产品推荐
相关产品推荐

