ワークフロー管理 - 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 環境が自動的に構成されます。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 はスケジュール駆動・複雑な依存関係を持つバッチパイプラインに適する

同じテーマの記事

Amazon AppFlow で実現する SaaS データ連携 - Salesforce・Slack・Google Analytics との統合 AppFlow による SaaS アプリケーションと AWS サービス間のノーコードデータ連携、フロー設計、データ変換の手法を解説します。 データ統合の自動化 - Amazon AppFlow で実現する SaaS 連携基盤 Amazon AppFlow を活用した SaaS アプリケーション間のデータ統合を解説します。Salesforce、Slack、Google Analytics などの外部サービスと AWS サービスをノーコードで接続し、リアルタイムまたはスケジュールベースのデータフローを構築する方法を紹介します。 イベント駆動アーキテクチャ - Amazon EventBridge で実現する疎結合システム設計 Amazon EventBridge を活用したイベント駆動アーキテクチャの構築方法を解説します。 Amazon EventBridge Pipes でイベントソースを直接接続 - フィルタリングと変換のパイプライン EventBridge Pipes によるイベントソースとターゲットの接続、フィルタリング、エンリッチメントの設定を解説します。 IoT イベント検知 - AWS IoT Events でデバイスの状態変化を自動検出・対応する AWS IoT Events を使った IoT デバイスの状態監視と自動対応を解説。検出器モデルによる状態遷移の定義、アラーム機能、SNS/Lambda との連携を紹介します。 マネージドメッセージブローカー - Amazon MQ で実現するエンタープライズメッセージング基盤 Amazon MQ による Apache ActiveMQ と RabbitMQ のマネージドメッセージブローカーの構築方法を解説します。既存のオンプレミスメッセージングシステムからの移行戦略と、SQS との使い分けを紹介します。 Amazon MQ で運用するメッセージブローカー - ActiveMQ と RabbitMQ の選定と移行 Amazon MQ の ActiveMQ と RabbitMQ ブローカーの選定基準、オンプレミスからの移行パターン、高可用性構成を解説します。 Amazon MWAA で Apache Airflow をマネージドに運用 - DAG の設計とワークフロー自動化 MWAA による Airflow 環境の構築、DAG の設計、S3 連携、オペレーターの活用を解説します。 Amazon SNS で構築する Pub/Sub メッセージング - ファンアウトパターンとフィルタリング SNS によるトピックベースのメッセージング、サブスクリプションフィルター、SQS ファンアウトパターンを解説します。 Amazon SQS で構築する非同期メッセージング - Standard と FIFO キューの設計 SQS による非同期処理の設計、Standard と FIFO キューの使い分け、デッドレターキューの活用を解説します。