ワークフロー管理 - Amazon MWAA で Apache Airflow をマネージド運用する
Amazon MWAA (Managed Workflows for Apache Airflow) によるデータパイプラインのオーケストレーションを解説。セットアップ、DAG 管理、Step Functions との使い分けまで実践的に紹介します。
MWAA の位置づけと Airflow の課題
Apache Airflow はデータパイプラインのオーケストレーションにおけるデファクトスタンダードです。Python で DAG (有向非巡回グラフ) を定義し、タスク間の依存関係・スケジュール・リトライ・アラートを宣言的に管理できます。しかし、Airflow を自前で運用するには、Web サーバー・スケジューラー・ワーカー・メタデータ DB (PostgreSQL) の構築と運用が必要で、バージョンアップやスケーリングの負荷が大きい課題がありました。Amazon MWAA (Managed Workflows for Apache Airflow) は 2020 年にリリースされたフルマネージドの Airflow サービスで、環境の構築・パッチ適用・スケーリング・可用性確保を AWS が管理します。ユーザーは S3 バケットに DAG ファイルと requirements.txt をアップロードするだけで、Airflow 環境が自動的に構成されます。Azure Data Factory も ETL パイプラインのオーケストレーションを提供しますが、GUI ベースのノーコード設計が中心です。MWAA は Python コードで DAG を定義するため、Git によるバージョン管理、コードレビュー、ユニットテストとの親和性が高く、ソフトウェアエンジニアリングのプラクティスをデータパイプラインに適用できます。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
環境構築と DAG のデプロイ
MWAA 環境の作成には、DAG を格納する S3 バケット、VPC (2 つ以上のプライベートサブネット)、実行ロール (IAM) が必要です。環境クラスは mw1.small・mw1.medium・mw1.large・mw1.xlarge・mw1.2xlarge の 5 段階で、同時実行可能なタスク数とスケジューラーの性能が異なります。mw1.small は小規模な検証環境向け (約 0.49 USD/時)、mw1.large は本番ワークロード向け (約 1.96 USD/時) です。 ```python # 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 に配置します。
AWS サービスとの連携と運用
MWAA は apache-airflow-providers-amazon パッケージを通じて、AWS サービスとの豊富な連携 Operator を提供します。Glue (ETL ジョブ実行)、Athena (SQL クエリ)、EMR (Spark ジョブ)、Redshift (データウェアハウスクエリ)、Lambda (関数呼び出し)、ECS (コンテナタスク実行)、SageMaker (ML トレーニング/推論)、Step Functions (ステートマシン実行) など、データパイプラインで必要なサービスをほぼ網羅しています。ワーカーの Auto Scaling により、タスクキューの深さに応じてワーカー数が自動的に増減します。最小ワーカー数と最大ワーカー数を設定でき、ピーク時のみスケールアウトしてコストを最適化できます。モニタリングは 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 USD/1,000 遷移) で、短時間・高頻度のワークフローに向いています。一方、MWAA はスケジュール駆動型のバッチパイプラインに強みがあります。複雑な依存関係 (数十〜数百タスクの DAG)、リトライポリシー、SLA 監視、バックフィル (過去日付の再実行) など、データエンジニアリング固有の要件に対応します。既存の Airflow 資産 (DAG、プラグイン、カスタム Operator) をそのまま移行できる点も大きな利点です。判断基準として、リアルタイム処理や API 連携なら Step Functions、日次/時次のデータバッチ処理なら MWAA を選択するのが適切です。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ - MWAA の活用指針
Amazon MWAA は、Apache Airflow のマネージドサービスとして、データパイプラインのオーケストレーションを運用負荷なく実現します。Python による DAG 定義はバージョン管理やテストとの親和性が高く、AWS サービスとの豊富な Operator 連携により、ETL・分析・ML パイプラインを効率的に構築できます。Step Functions がイベント駆動・サーバーレスのワークフローに適するのに対し、MWAA はスケジュール駆動・複雑な依存関係を持つバッチ処理に最適です。既存の Airflow 環境からの移行先として、またデータエンジニアリングチームの生産性向上ツールとして、MWAA は有力な選択肢です。
AWS の優位点
- Apache Airflow の環境構築・パッチ適用・スケーリングを AWS が完全に管理し、運用負荷を大幅に削減
- S3 に DAG ファイルをアップロードするだけでワークフローがデプロイされ、Airflow の Web UI でモニタリング・手動トリガーが可能
- Glue・Athena・EMR・Redshift・Lambda など AWS サービスとの連携用 Operator が豊富に提供されている
- 環境クラスは mw1.small (5 DAG) から mw1.2xlarge (1,000 DAG 以上) まで選択でき、ワーカーの Auto Scaling にも対応
- VPC 内にデプロイされ、プライベートサブネットでの実行とパブリック/プライベート Web サーバーの選択が可能
- Step Functions がイベント駆動・低レイテンシのワークフローに適するのに対し、MWAA はスケジュール駆動・複雑な依存関係を持つバッチパイプラインに適する
- Azure Data Factory がノーコード GUI でパイプラインを構築するのに対し、MWAA は Python コードで DAG を定義するため、バージョン管理やテストとの親和性が高い