使用 Amazon MWAA 托管运维 Apache Airflow - DAG 设计与工作流自动化
解析通过 MWAA 构建 Airflow 环境、DAG 设计、S3 集成及 Operator 的活用。
MWAA 概述
MWAA 是以托管方式运行 Apache Airflow 2.x 的工作流编排服务,最多可扩展到 25 个 Worker。与 Step Functions 适合事件驱动的状态转换不同,Airflow 适合基于调度的复杂数据管道 (ETL、ML 管道、报表生成)。MWAA 将 Airflow 的调度器、Web 服务器和元数据 DB (PostgreSQL) 的管理委托给 AWS,运维人员可专注于 DAG 开发。
DAG 与 AWS Operator
DAG 用 Python 定义,通过 >> 运算符描述任务间的依赖关系。以 extract >> transform >> load 的方式直观构建管道。将 Python 文件上传到 S3 的 dags/ 文件夹后自动注册到调度器。AWS Operator 包括 EcsRunTaskOperator 执行 ECS 任务、LambdaInvokeFunctionOperator 调用 Lambda、GlueJobOperator 启动 Glue 作业等。Sensor (S3KeySensor、SqsSensor 等) 可声明式地等待和轮询外部事件,实现事件驱动与调度驱动混合的工作流。
环境设计与插件
MWAA 环境通过类大小 (mw1.small、mw1.medium、mw1.large) 选择 Worker 资源。设置最小和最大 Worker 数,根据 DAG 并行执行数自动扩展。通过 requirements.txt 添加 Python 包,通过 plugins.zip 部署自定义 Operator 和 Hook。DAG 文件上传到 S3 存储桶后自动反映到环境中。Airflow Web UI 可通过私有或公共网络访问模式公开,通过 IAM 认证控制访问。 如需拓展服务集成知识,也可参阅Amazon 专业书籍。
与 Step Functions 的选择
MWAA 与 Step Functions 都提供工作流编排,但适用场景不同。Step Functions 是无服务器的,等待时间不计费,适合事件驱动的短时任务协调 (API 调用、Lambda 链、审批流程)。MWAA 在 cron 调度的日/周数据管道、复杂依赖图 (条件分支、重试、SLA 监控) 以及现有 Airflow DAG 迁移方面具有优势。判断标准:管道包含 10 个以上具有复杂依赖关系的任务且以调度执行为主时选择 MWAA;任务少且以事件触发为主时选择 Step Functions。两者并用也是有效的架构,如由 Step Functions 触发 MWAA 的 DAG。
设计最佳实践与陷阱
MWAA 生产环境运维有几个重要设计要点。第一,DAG 文件的导入错误有停止整个调度器的风险,因此需要在 CI/CD 管道中于部署前执行语法检查 (python -c "import dag_file")。第二,requirements.txt 的依赖解析如果耗时较长会延迟环境更新,因此需严格固定版本并排除不必要的包。第三,Worker 横向扩展的冷启动需要数分钟,需要估算峰值并行任务数并适当设置最小 Worker 数。第四,Web UI 设为公共模式可通过互联网访问,建议使用私有模式 + VPN 或 Client VPN。DAG 之间有隐式依赖时,使用 TriggerDagRunOperator 而非 ExternalTaskSensor 进行显式链接,便于故障调试。
MWAA 的费用
MWAA 的费用由环境运行时间和 Worker 执行时间构成。mw1.small 环境每小时约 0.49 美元 (月约 353 美元)。额外 Worker 每小时约 0.055 美元。与 Step Functions (每 1,000 次状态转换约 0.025 美元) 相比,MWAA 环境常驻成本较高,DAG 执行频率低时 Step Functions 更经济。成本优化方面,开发/测试环境可在非工作时间停止 (可通过 API 删除和重建环境),仅保持生产环境持续运行。建议从 mw1.small 开始,当 Worker CPU 使用率持续超过 70% 时升级到 mw1.medium。
总结
MWAA 是以托管方式提供 Apache Airflow 的工作流编排服务。用 Python 定义 DAG,通过 AWS Operator (Glue、EMR、ECS、Lambda) 实现与 AWS 服务的集成。通过 requirements.txt 和 plugins.zip 添加自定义包和 Operator,DAG 上传到 S3 即自动注册。与 Step Functions 的适用领域不同,在基于调度的复杂数据管道方面具有优势。由于存在环境常驻成本,根据管道规模和执行频率选择合适的服务非常重要。