SuperAPI AI 工具集

migrate-airflow-kestra

部署与运维

查看项目

更新于 10-15 23:45

技能介绍

用途:把 Apache Airflow DAG 文件迁移为生产可用的 Kestra flow,生成命名空间文件、正确的任务顺序和通过 schema 校验的 YAML。适用于将 .py DAG 转为 Kestra flow YAML、把 @task 装饰函数或 operator 翻译为 Kestra 任务、将 Airflow 依赖转为 Kestra 顺序/并行结构。

必要输入:Airflow DAG .py 文件路径($ARGUMENTS);输出目录(默认 DAG 旁的 kestra-migrate/);目标 Kestra 命名空间(未提供则询问,默认 company.team)。

主要流程:先完整读取 DAG,提取 dag_id、schedule、default_args、tags,逐任务记录 ID、Python 依赖、是否含重要业务逻辑、依赖关系与并行性、XCom 数据传递;再拉取并校验 Kestra schema(curl -s https://api.kestra.io/v1/plugins/schemas/flow -o /tmp/kestra_schema.json),未读取校验前不生成 YAML;随后把含业务逻辑的任务抽为 <output-dir>/scripts/<task_id>.py 命名空间文件,去除 Airflow 导入,用 json.dump/json.load 替代 XCom;最后生成 flow.yaml。

生成规则:任务块中 YAML 列表符号 - 必须位于 id 行,type 紧随其后;Python 任务固定 containerImage: python:3.11;重要逻辑用 namespaceFiles 引用脚本;任务间用 outputFiles 与 inputFiles 传递数据;共享上游且互不依赖的任务包在 io.kestra.plugin.core.flow.Parallel 中;schedule 映射为 Schedule trigger(@daily、@hourly 等,None 则省略);dag_id→id、tags→labels、description→description;仅使用 schema 中定义的属性,不硬编码密钥,使用 {{ secret('SECRET_NAME') }}。

输出结构:flow.yaml 与 scripts/ 下每任务一个 .py。部署可配合 kestra-ops 技能,命名空间文件需逐个上传:for f in <output-dir>/scripts/*.py; do name=$(basename "$f"); kestractl nsfiles upload <namespace> "$f" "scripts/$name" --override; done,避免目录上传导致 scripts/scripts/ 嵌套。

限制:资料未提供收费、价格、平台支持范围等信息;retries 不在 flow 级设置,需按任务处理;catchup=False 无对应项。