工作流管理 - 使用 Amazon MWAA 托管运维 Apache Airflow
解析 Amazon MWAA(Managed Workflows for Apache Airflow)的数据管道编排。从设置、DAG 管理到与 Step Functions 的选型进行实践介绍。
MWAA 的定位与 Airflow 的挑战
Apache Airflow 是数据管道编排的事实标准。用 Python 定义 DAG(有向无环图),声明式管理任务间的依赖关系、调度、重试和告警。但自行运维 Airflow 需要构建和运维 Web 服务器、调度器、Worker、元数据 DB(PostgreSQL),版本升级和扩缩容也需要专业知识。MWAA 将这些全部托管化,开发者只需专注于 DAG 的编写。
环境构建与 DAG 部署
创建 MWAA 环境需要存放 DAG 的 S3 存储桶、VPC(2 个以上私有子网)和执行角色(IAM)。环境类别有 mw1.small、mw1.medium、mw1.large、mw1.xlarge、mw1.2xlarge 五个级别,可同时执行的任务数和调度器性能不同。mw1.small 适合小规模验证环境,mw1.medium 以上适合生产环境。DAG 文件上传到 S3 后自动同步到 MWAA 环境。
AWS 服务集成与运维
MWAA 通过 apache-airflow-providers-amazon 包提供丰富的 AWS 服务集成 Operator。Glue(ETL 作业执行)、Athena(SQL 查询)、EMR(Spark 作业)、Redshift(数据仓库查询)、Lambda(函数调用)、ECS(容器任务执行)、SageMaker(ML 训练)等均可在 DAG 中作为任务调用。Secrets Manager 集成安全管理连接信息和凭证。
与 Step Functions 的选型
MWAA 和 Step Functions 都是工作流编排服务,但设计理念和擅长领域不同。Step Functions 是事件驱动型,对来自 API Gateway 或 EventBridge 的触发以低延迟(毫秒级)响应。用 JSON(ASL)定义状态转换,组合 Lambda、ECS、Bedrock 等。MWAA 是调度驱动型,适合定时执行的批处理管道。用 Python 定义 DAG,适合复杂的数据依赖和条件分支。两者可组合使用。
MWAA 的定价
MWAA 的定价由环境类别和 Worker 的时间计费组成。mw1.small 环境每小时约 0.49 美元(月费约 353 美元)。额外 Worker 为 mw1.small 每小时约 0.055 美元。环境 24 小时运行,月最低成本约 353 美元。与自托管 Airflow(EC2 + RDS + Redis)相比,运维工作量大幅减少,但固定成本较高。适合 DAG 数量多、需要稳定运行的生产环境。
总结 - MWAA 的活用指南
Amazon MWAA 作为 Apache Airflow 的托管服务,无运维负担地实现数据管道编排。Python DAG 定义与版本管理和测试亲和性高,丰富的 AWS 服务 Operator 集成可高效构建 ETL、分析和 ML 管道。Step Functions 适合事件驱动和无服务器场景,MWAA 适合调度驱动的批处理管道,根据用例选型。