工作流管理 - 使用 Amazon MWAA 以托管方式运行 Apache Airflow
解说通过 Amazon MWAA(Managed Workflows for Apache Airflow)进行数据管道的编排。从设置、DAG 管理、基于环境与 Serverless 的选用,到与 Step Functions 的比较,进行实践性的介绍。
MWAA 的定位与 Airflow 的挑战
Apache Airflow 是数据管道编排领域的事实标准。用 Python 定义 DAG(有向无环图),可以声明式地管理任务之间的依赖关系 / 调度 / 重试 / 告警。但是,自行运行 Airflow 需要构建和运维 Web 服务器 / 调度器 / Worker / 元数据数据库(PostgreSQL),存在版本升级和扩缩负担大的问题。Amazon MWAA(Managed Workflows for Apache Airflow)是 2020 年发布的全托管 Airflow 服务。其环境的构建 / 补丁应用 / 扩缩 / 可用性保障由 AWS 管理。用户只需将 DAG 文件和 requirements.txt 上传到 S3 存储桶,Airflow 环境就会自动配置。由于 MWAA 用 Python 代码定义 DAG,它与基于 Git 的版本管理、代码审查、单元测试的契合度高,可以将软件工程的实践应用到数据管道中。另外,MWAA 有 2 种部署选项:让 Airflow 环境始终运行的基于环境的部署,以及只对工作流运行时间计费的 MWAA Serverless(截至 2026 年 8 月)。
环境构建与 DAG 的部署
创建 MWAA 环境需要存放 DAG 的 S3 存储桶、VPC(2 个以上的私有子网)以及执行角色(IAM)。在基于环境的部署中可以选择的环境类有 mw1.micro / mw1.small / mw1.medium / mw1.large / mw1.xlarge / mw1.2xlarge 这 6 个档次。各档次可同时运行的任务数和调度器的性能各不相同。截至 2026 年 8 月,弗吉尼亚北部区域与东京区域的单价相同。最小配置的 mw1.micro 为 0.29 美元/小时,用于中小规模验证环境的 mw1.small 为 0.49 美元/小时。面向生产工作负载的 mw1.large 为 0.99 美元/小时。
# DAG 示例:Glue 作业 → Athena 查询 → SNS 通知
from airflow import DAG
from airflow.providers.amazon.aws.operators.glue import GlueJobOperator
from airflow.providers.amazon.aws.operators.athena import AthenaOperator
from airflow.providers.amazon.aws.operators.sns import SnsPublishOperator
from datetime import datetime
with DAG('daily_etl', start_date=datetime(2026, 1, 1), schedule='@daily') as dag:
extract = GlueJobOperator(task_id='run_glue', job_name='raw-to-clean')
query = AthenaOperator(task_id='run_query', query='SELECT count(*) FROM clean.events',
database='clean', output_location='s3://results/')
notify = SnsPublishOperator(task_id='notify', target_arn='arn:aws:sns:ap-northeast-1:123:alerts',
message='ETL completed')
extract >> query >> notify将 DAG 文件上传到 S3 后,MWAA 会自动检测并将其注册到调度器。Python 的附加软件包在 requirements.txt 中指定,插件以 plugins.zip 的形式放置在 S3 上。 Airflow 的版本在创建环境时指定,如果未指定,则以 MWAA 支持的最新版本创建环境。截至 2026 年 8 月,官方文档中列出的 3.x 系列版本有 v3.2.1 / v3.0.6。列出的 2.x 系列版本有 v2.11.2 / v2.11.0 / v2.10.3 / v2.10.1 / v2.9.2 / v2.8.1 / v2.7.2。其中最新的是 v3.2.1(Python 3.12)。如果要带入现有的 DAG,由于 2.x 系列和 3.x 系列在提供 Operator 的软件包以及调度的写法上有所不同,根据迁移源的资产选择版本。如果是新建,选择 3.x 系列是自然的做法。v2.7.2 起需要在 requirements.txt 中写明 --constraint,如果没有写,MWAA 会自动应用兼容的约束文件。版本升级可以以次版本为单位实施,旧版本会陆续结束支持,因此如果在选型时也确认支持期限,之后的迁移计划会变得容易制定。
部署形态 - 基于环境与 MWAA Serverless
MWAA 的部署形态有 2 种(截至 2026 年 8 月)。一种是前面提到的基于环境的形态。这种形态指定从 mw1.micro 到 mw1.2xlarge 的环境类,让 Airflow 环境(Web 服务器 / 调度器 / Worker / 元数据数据库)始终运行。只有 Worker 会根据需求自动增减。由于可以直接使用 Airflow 的 Web UI,并能带入现有的 Python DAG 和自定义插件,它是从自托管环境迁移时的自然选择。 另一种是 MWAA Serverless。它没有始终运行的环境,只有运行工作流所需的时间才会计费,因此不会产生空闲时间的成本。由于每个工作流都会分配专用的执行角色和 Worker,可以细致地分离权限,无需为了分离而准备多个环境。工作流用 YAML 定义文件编写,可以通过内置的版本控制功能恢复到过去的定义。任务也可以在指定的 VPC 内运行。不过,由于它固定为 Apache Airflow v3 / Python 3.12,依赖 2.x 系列的 DAG 无法直接迁移上去。支持的区域不一定与基于环境的形态相同,因此在选型前通过官方文档的区域列表进行确认。 判断的大致标准是:运行断断续续、等待时间长的工作流,或者希望按工作流划分权限的情况,选择 Serverless。对 Airflow 的 Web UI 和现有插件依赖强、DAG 持续不断运行的规模,则选择基于环境的形态。
与 AWS 服务的集成和运维
MWAA 通过 apache-airflow-providers-amazon 软件包,提供与 AWS 服务集成的丰富 Operator。它几乎涵盖了数据管道所需的服务。其中包括 Glue(ETL 作业执行)、Athena(SQL 查询)、EMR(Spark 作业)、Redshift(数据仓库查询)。还包括 Lambda(函数调用)、ECS(容器任务执行)、SageMaker(ML 训练/推理)、Step Functions(状态机执行)等。借助 Worker 的 Auto Scaling,Worker 的数量会根据任务队列的深度自动增减。可以设置最小 Worker 数和最大 Worker 数,只在高峰时横向扩展,从而优化成本。监控可以同时通过 CloudWatch 指标(DAG 处理时间、任务成功/失败数、队列深度)和 Airflow 的 Web UI 进行。Web 服务器可以选择公共访问(附带 IAM 身份验证)或私有访问(仅限 VPC 内)。
与 Step Functions 的选用
MWAA 和 Step Functions 都是工作流编排服务,但设计理念和擅长的领域不同。Step Functions 是事件驱动型的,对来自 API Gateway 或 EventBridge 的触发以低延迟(毫秒级)作出响应。它用 JSON(ASL)定义状态转换,最适合组合 Lambda / ECS / Bedrock 等的无服务器工作流。费用按状态转换计费(Standard:0.025 美元/1,000 次转换),适合短时间 / 高频率的工作流(截至 2026 年 8 月 / 弗吉尼亚北部区域)。另一方面,MWAA 的优势在于调度驱动型的批处理管道。它处理复杂的依赖关系(数十到数百个任务的 DAG)、重试策略、SLA 监控、回填(过去日期的重新执行)等数据工程特有的需求。可以将现有的 Airflow 资产(DAG、插件、自定义 Operator)直接迁移,这也是一大优点。作为判断标准,实时处理或 API 集成选择 Step Functions,每日/每小时的数据批处理选择 MWAA,这是合适的做法。
MWAA 的定价
在基于环境的部署中,除环境类的按小时计费外,还会加上额外的 Worker / 调度器 / Web 服务器的按小时计费,以及元数据数据库的存储费用。以下是截至 2026 年 8 月的单价,弗吉尼亚北部区域与东京区域的价格相同。环境类方面,mw1.micro 为 0.29 美元/小时,mw1.small 为 0.49 美元/小时,mw1.medium 为 0.74 美元/小时。mw1.large 为 0.99 美元/小时,mw1.xlarge 为 1.98 美元/小时,mw1.2xlarge 为 3.96 美元/小时。额外的 Worker 在 small 时为 0.055 美元/小时,medium 时为 0.11 美元/小时,large 时为 0.22 美元/小时。元数据数据库的标准存储为 0.10 美元/GB-月。 基于环境的形态在环境启动期间会持续计费,按 1 个月 730 小时计算,只运行 1 个最小配置 mw1.micro 环境时,环境类部分约为 212 美元/月。mw1.small 则约为 358 美元/月(额外的 Worker 和存储另计)。如果可以在夜间 / 周末停止验证环境,这一金额会按运行时间成比例下降。 MWAA Serverless 只对工作流的运行时间计费。AWS 托管任务的单价在弗吉尼亚北部为 0.08 美元/小时,在东京为 0.104 美元/小时(同样截至 2026 年 8 月)。由于没有始终运行的部分,对于每天只运行几次的管道,费用会比基于环境的形态便宜得多。反之,在持续不断运行大量 DAG 的配置中,以始终运行为前提的基于环境的形态每次运行的成本更低。 与自托管的 Airflow(EC2 + RDS + Redis)进行比较时,不仅看实例费用的差异,还用包含补丁应用 / 扩缩 / 监控等运维工作量在内的 TCO 进行评估。如果 DAG 的运行频率低、依赖关系也简单,按状态转换计费的 Step Functions 有时会更加便宜。
总结 - MWAA 的利用指南
Amazon MWAA 作为 Apache Airflow 的托管服务,实现了没有运维负担的数据管道编排。基于 Python 的 DAG 定义与版本管理和测试的契合度高,借助与 AWS 服务的丰富 Operator 集成,可以高效地构建 ETL / 分析 / ML 管道。部署形态有 2 种:让 mw1.micro 到 mw1.2xlarge 的环境始终运行的基于环境的形态,以及只对运行时间计费的 MWAA Serverless。如果重视现有 Airflow 资产的易迁移性和高运行率,选择前者合适;如果运行断断续续并重视按工作流的权限分离,选择后者合适。Step Functions 适合事件驱动 / 无服务器的工作流,而 MWAA 最适合调度驱动 / 具有复杂依赖关系的批处理。无论是作为从现有 Airflow 环境迁移的目标,还是作为提高数据工程团队生产力的工具,MWAA 都是有力的选择。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。