用途:帮助把 Airflow 2.x 的 DAG 代码迁移到 Airflow 3.x,重点是代码改动而非环境部署。资料建议迁移前先升级到 Airflow 2.11,再升到至少 3.0.11(理想为 3.1)。
主要能力与用法:先用 Ruff 的 Airflow 迁移规则自动修复,命令为 ruff check --preview --select AIR --fix --unsafe-fixes .,再运行 ruff check --preview --select AIR . 复查。规则中 AIR30/AIR301/AIR302 针对已移除的代码与导入,AIR31/AIR311/AIR312 针对已弃用的代码与导入。随后按清单人工排查:直接访问元数据数据库、遗留导入、调度与上下文变化、XCom 序列化、Dataset 改为 Asset、REST API 与认证、插件与文件路径。按文件与问题类型制定计划,逐步实施并反复运行 Ruff,最后说明改动并建议测试。
架构变化:Airflow 3 中 Worker 不再直连元数据数据库,任务代码通过 Task Execution API 运行,DAG 处理器与调度器分离。直接使用 ORM 会报错:RuntimeError: Direct database access via the ORM is not allowed in Airflow 3.x。需要搜索 provide_session、create_session、@provide_session、from airflow.settings import Session/engine 以及 session.query(DagModel) 等模式。替代方案是 Airflow Python 客户端,需在 requirements.txt 中加入 apache-airflow-client==<your-airflow-runtime-version>,并用 Configuration、DAGApi 等调用 API。
关键导入变化示例:DummyOperator 改为 airflow.providers.standard.operators.empty.EmptyOperator;BashOperator 与 PythonOperator 移入 providers.standard;airflow.decorators.dag/task 改为 airflow.sdk.dag/task;airflow.datasets.Dataset 改为 airflow.sdk.Asset。上下文键方面:execution_date 改为 context["dag_run"].logical_date;tomorrow_ds/yesterday_ds 改用宏 macros.ds_add;triggering_dataset_events 改为 triggering_asset_events;templates_dict 改为 context["params"]。默认行为变化:schedule 由 timedelta(days=1) 改为 None,catchup 由 True 改为 False。
限制:页面仅给出上述迁移要点与参考链接,未提供更多具体迁移步骤、收费或平台信息;实际迁移效果取决于项目代码与版本,暂未提供进一步说明。