向AWS MWAA(托管Airflow)环境上传非dags自定义目录的问题咨询
AWS MWAA 加载外部依赖目录的实践方案
不需要将所有代码平铺到dags/根目录,以下是三种经过验证的可行方案:
方案1:依赖目录直接放入dags路径下
- 把tasks这类依赖目录整体上传到S3关联桶的
dags/路径下,最终路径为s3://<你的MWAA存储桶名>/dags/tasks/ - 确保tasks目录下存在空的
__init__.py文件,让Python识别为可导入的模块包 - MWAA的调度器和工作节点默认会把
/usr/local/airflow/dags加入Python的sys.path,直接在DAG文件中按正常模块规则导入即可,示例:from tasks.my_task import MyCustomTask
方案2:依赖托管至plugins目录
- 适合多个DAG共用的公共工具类代码,将tasks目录上传到S3关联桶和dags/平级的
plugins/路径下 - 无需额外配置,MWAA会自动加载plugins目录下的内容到系统路径,导入规则和方案1一致
- 优势是不会占用dags目录的扫描资源,避免拖慢DAG的加载刷新速度
方案3:打包为Python包安装
- 适合有版本管控需求、逻辑复杂的依赖代码,将tasks目录打包为
.whl格式的Python安装包 - 将wheel包上传到S3关联桶的任意路径,在requirements.txt中添加对应的本地包引用即可完成安装,可直接在DAG中导入对应模块
注意:不要在dags/目录下存放超过1000个非DAG文件,否则会触发MWAA的DAG扫描超时问题,大量通用依赖优先选择方案2或方案3处理。
内容的提问来源于stack exchange,提问作者taraf
相关产品推荐
相关产品推荐

