Amazon MWAA で Apache Airflow をマネージドに運用 - DAG の設計とワークフロー自動化

MWAA による Airflow 環境の構築、DAG の設計、S3 連携、オペレーターの活用を解説します。

MWAA の概要

MWAA は Apache Airflow 2.x をマネージドに実行するワークフローオーケストレーションサービスで、最大 25 ワーカーまでスケールします。Step Functions がイベント駆動の状態遷移に適しているのに対し、Airflow はスケジュールベースの複雑なデータパイプライン (ETL、ML パイプライン、レポート生成) に適しています。Airflow のスケジューラー、Web サーバー、メタデータ DB (PostgreSQL) の管理を AWS に委任でき、運用者は DAG の開発に集中できます。

DAG と AWS オペレーター

DAG は Python で定義し、タスク間の依存関係を >> 演算子で記述します。extract >> transform >> load のように直感的にパイプラインを構築します。S3 の dags/ フォルダに Python ファイルをアップロードすると自動的にスケジューラーに登録されます。AWS オペレーターは EcsRunTaskOperator で ECS タスクを実行、LambdaInvokeFunctionOperator で Lambda を呼び出し、GlueJobOperator で Glue ジョブを起動するなど、AWS サービスをタスクとして組み込みます。Sensor (S3KeySensor、SqsSensor など) を使えば外部イベントの待機とポーリングも宣言的に記述でき、イベント駆動とスケジュール駆動のハイブリッドなワークフローが実現します。

環境設計とプラグイン

MWAA 環境はクラスサイズ (mw1.small、mw1.medium、mw1.large) でワーカーのリソースを選択します。最小・最大ワーカー数を設定し、DAG の並列実行数に応じて自動スケーリングします。requirements.txt で Python パッケージを追加し、plugins.zip でカスタムオペレーターやフックを配置します。S3 バケットに DAG ファイルをアップロードすると自動的に環境に反映されます。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 パイプラインで DAG の構文チェック (python -c "import dag_file") をデプロイ前に実施します。第二に、requirements.txt の依存解決に時間がかかると環境の更新が遅延するため、バージョンを厳密にピン留めし、不要なパッケージを含めないことが重要です。第三に、ワーカーのスケールアウトにはコールドスタートで数分かかるため、ピーク時の並列タスク数を見積もって最小ワーカー数を適切に設定します。第四に、Web UI をパブリックモードにするとインターネット経由でアクセス可能になるため、プライベートモード + VPN または Client VPN の組み合わせを推奨します。DAG 間で暗黙の依存がある場合は ExternalTaskSensor ではなく TriggerDagRunOperator で明示的にチェインし、障害時のデバッグを容易にします。

MWAA の料金

MWAA の料金は環境の稼働時間とワーカーの実行時間で構成されます。mw1.small 環境は 1 時間あたり約 0.49 ドル (月額約 353 ドル) です。追加ワーカーは 1 時間あたり約 0.055 ドルです。Step Functions (1,000 状態遷移あたり約 0.025 ドル) と比較して、MWAA は環境の常時稼働コストが高いため、DAG の実行頻度が低い場合は Step Functions の方がコスト効率に優れます。コスト最適化として、開発・テスト用環境は業務時間外に停止し (API で環境の削除・再作成が可能)、本番環境のみ常時稼働させます。mw1.small で開始し、ワーカーの CPU 使用率が常時 70% を超えるようであれば mw1.medium へスケールアップします。

まとめ

MWAA は Apache Airflow をマネージドに提供するワークフローオーケストレーションサービスです。Python で DAG を定義し、AWS オペレーター (Glue、EMR、ECS、Lambda) で AWS サービスとの統合を実現します。requirements.txt と plugins.zip でカスタムパッケージとオペレーターを追加し、S3 への DAG アップロードで自動反映されます。Step Functions とは適用領域が異なり、スケジュールベースの複雑なデータパイプラインに強みを持ちます。環境の常時稼働コストがかかるため、パイプラインの規模と実行頻度に応じたサービス選定が重要です。