AWS認定資格 WEB問題集&徹底解説機械学習エンジニア アソシエイト(MLA)
AWSサービスの一つであるAmazon Managed Workflows for Apache Airflow (MWAA)はどんな内容なのでしょうか?また、AWS認定資格の機械学習エンジニア-アソシエイト(MLA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
Amazon Managed Workflows for Apache Airflow(Amazon MWAA)は、オープンソースのワークフロー管理ツールであるApache Airflowを、サーバーやクラスターを自前で構築・運用することなく利用できるマネージドサービスです。 Airflowでは、処理の依存関係とスケジュールをPythonで記述したDAG(Directed Acyclic Graph: 有向非巡回グラフ)としてワークフローを定義し、ETL、データ品質チェック、機械学習の学習・デプロイなど複数ステップの処理を順序どおりに実行します。
MWAAはスケジューラ、ワーカー、Webサーバー、メタデータベースといったAirflowの構成要素をAWSが用意し、バージョン更新やパッチ適用、ワーカーの自動スケーリングを担います。 利用者はDAGファイルをAmazon S3に置くだけでよく、既存のAirflow資産をほぼそのまま持ち込める点が最大の特長です。 AWSのサーバーレスなオーケストレーションであるStep Functionsとの使い分けが、データエンジニア(DEA)やMLエンジニア(MLA)の試験で頻繁に問われます。
2. 主な特徴と機能
2.1 Apache Airflowのマネージド提供
環境作成時にAirflowのバージョン(v2系・v3系)を選ぶと、オープンソースと同じUIとコードベースのAirflowが構築されます。 コミュニティのオペレーター(Operator)やセンサー(Sensor)がそのまま使え、Amazon S3、AWS Glue、Amazon EMR、Amazon Redshift、Amazon Athena、AWS Lambda、Amazon SageMaker AI、Amazon ECS/EKSなど多数のAWSサービスをDAGのタスクから呼び出せます。
2.2 S3を起点としたDAG・依存関係の管理
DAGファイルは指定したS3バケットの dags/ フォルダーに配置し、追加のPythonパッケージは requirements.txt、カスタムオペレーターやフックは plugins.zip、環境起動時に実行したい処理はスタートアップスクリプトとして同じバケットに置きます。
S3にファイルを更新すると環境へ反映される仕組みのため、CI/CDパイプラインからS3へ同期する運用が一般的です。
2.3 環境クラスと自動スケーリング
環境の規模は環境クラス(mw1.micro / small / medium / large / xlarge / 2xlarge)で選びます。クラスによってワーカー・スケジューラのvCPUとメモリ、同時実行タスク数の目安、扱えるDAG数の目安が変わります。 ワーカーは最小数と最大数を指定しておくと、キューに溜まったタスク量に応じて自動的に増減します(mw1.microは自動スケーリング非対応)。スケジューラ数も複数に設定でき、可用性と処理能力を高められます。
2.4 監視とログ
環境のメトリクスはAmazon CloudWatchへ自動送信され、DAG処理・スケジューラ・タスク・Webサーバー・ワーカーの各ログも有効化するとCloudWatch Logsに出力されます。 タスクの遅延や失敗の原因調査は、まずCloudWatch Logsのタスクログとスケジューラログを確認するのが基本です。
2.5 サーバーレス実行オプション
2025年11月には、環境(常時稼働のスケジューラやワーカー)を用意せず、タスクごとにコンテナを起動して実行するサーバーレスのデプロイオプションも発表されました。 常時稼働の環境を持つプロビジョンド型と、タスク実行量に応じて課金されるサーバーレス型を、ワークロードの頻度や規模で選び分けられます。
3. アーキテクチャおよび技術要素
- 利用者がDAG、requirements.txt、plugins.zipをS3バケットに配置し、MWAA環境にそのバケットを関連付ける。
- スケジューラがDAGを解析し、スケジュールや依存関係に従ってタスクインスタンスを生成する。状態はAWS管理のメタデータベース(Aurora PostgreSQL)に保存される。
- タスクはCeleryエグゼキューター経由でキューに入り、AWS Fargate上で動くワーカーが取り出して実行する。
- スケジューラとワーカーは、利用者のVPC内の2つのプライベートサブネット(異なるAZ)に接続して動作し、S3、CloudWatch、SQS、KMSなどへアクセスする。
- Airflow UI(Webサーバー)は、インターネットから到達できるパブリックネットワークモードか、VPC内からのみ到達できるプライベートネットワークモードのどちらかで公開する。
- 各タスクは環境の実行ロールの権限で、Glue、EMR、Redshift、SageMaker AIなどのAWSサービスを操作する。
DAGの中で重い処理を直接行うのではなく、処理本体はGlue、EMR、Athena、SageMaker AIなどに任せ、MWAAは「いつ・どの順で・失敗時にどうするか」を制御する役割に徹する設計が推奨されます。
4. セキュリティと認証・認可
- 実行ロール: MWAA環境に関連付けるIAMロール。DAGのタスクがAWSサービスへアクセスする権限、S3バケットの読み取り、CloudWatch Logsへの書き込みなどを最小権限で付与する。
- Airflow UIへのアクセス制御: UIへのログインはIAMで制御され、IAMポリシーによってAirflowのロール(Admin、Op、User、Viewerなど)に対応付ける。
- ネットワーク: スケジューラとワーカーはVPCのプライベートサブネットで動作する。UIをインターネットに公開したくない場合はプライベートネットワークモードを選び、VPN/Direct Connectや踏み台経由でアクセスする。
- 暗号化: 環境のデータはAWS KMSで暗号化される。既定のAWS所有キーのほか、カスタマーマネージドキーも指定できる。
- シークレット管理: データベースのパスワードやAPIキーをDAGに直書きせず、AWS Secrets ManagerやSystems Manager Parameter StoreをAirflowのシークレットバックエンドとして使い、接続情報や変数を取得する。
5. 料金形態
プロビジョンド型の環境は、常時稼働する構成要素に対して時間単位(秒単位の精度)で課金されます。DAGを実行していない時間も環境が存在する限り課金が続く点に注意が必要です。
- 環境料金: 環境クラスごとの1時間あたりの料金。既定のスケジューラ、ワーカー、Webサーバーの分を含む。
- 追加ワーカー: 自動スケーリングで既定数を超えて起動したワーカーの稼働時間。
- 追加スケジューラ/追加Webサーバー: 既定数を超えて設定した分の稼働時間。
- メタデータベースのストレージ: 使用量(GB-月)に応じて課金。
- サーバーレス型: 環境の常時稼働料金はなく、タスクの実行時間に応じて課金される。
- 関連サービス: DAGから呼び出すGlue、EMR、Redshiftなどの料金、S3、CloudWatch Logsの料金は別途発生する。
- コスト最適化: 環境クラスを実際のDAG数・同時実行数に合わせる、ワーカー最大数を適切に設定する、利用頻度が低いワークフローは他の手段(EventBridge Scheduler+Step Functionsなど)も比較する。
6. よくあるアーキテクチャ・設計パターン
- データレイクのバッチETL: 日次スケジュールでS3への到着を確認し、Glueジョブで変換、Athenaで検証クエリ、Redshiftへロードまでを1つのDAGで順序制御する。
- EMRの一時クラスター運用: DAGの中でEMRクラスターを作成し、Sparkステップを実行して完了後に終了させ、コンピューティング費用を抑える。
- オンプレミスAirflowの移行: 既存のDAGとプラグインを大きく書き換えずにMWAAへ移し、Airflowサーバーの運用負荷をなくす。
- MLパイプラインのオーケストレーション: データ準備、SageMaker AIの学習ジョブ、評価、モデル登録、エンドポイント更新をDAGで連結する。ML専用の機能(モデルレジストリ連携、系譜管理)を重視する場合はSageMaker Pipelinesと比較する。
- イベント起点の実行: S3へのファイル到着をEventBridge経由で検知し、LambdaなどからAirflowのAPIでDAG実行をトリガーする。
7. 設定・デプロイ手順(ハンズオン例)
- バージョニングを有効にしたS3バケットを作成し、
dags/フォルダーとrequirements.txtを用意する。 - 異なるAZに2つのプライベートサブネットを持つVPCを準備する(コンソールのクイック作成やCloudFormationテンプレートも利用できる)。
- MWAAコンソールで環境を作成し、Airflowバージョン、S3バケットとDAGフォルダーのパス、環境クラス、ワーカーの最小・最大数を指定する。
- Webサーバーのアクセスモード(パブリック/プライベート)、セキュリティグループ、実行ロール、暗号化キーを設定する。
- CloudWatch Logsへのログ出力(タスク、スケジューラなど)とログレベルを有効化する。
- サンプルDAGをS3の
dags/にアップロードし、Airflow UIでDAGが表示されることを確認して手動実行する。 - タスクログで実行結果を確認し、必要に応じて実行ロールへ権限を追加する。
8. 試験で問われやすいポイント
8.1 サービス選択(オーケストレーション)
- Q: オンプレミスで稼働しているApache AirflowのDAGを、最小限の変更でAWSに移行し運用負荷を減らしたい。
A: Amazon MWAAを使う。既存のDAGとプラグインをS3に置いてそのまま実行できる。 - Q: Airflowの経験がなく、AWSサービス同士をサーバーレスに連携する少数のワークフローを最小の運用で作りたい。
A: AWS Step Functionsが有力。MWAAは常時稼働の環境料金がかかり、Airflowの知識が前提になる。 - Q: Glueのクローラーとジョブだけで完結するETLの依存関係を管理したい。
A: AWS Glueワークフロー(トリガー)でも実現できる。Glue以外のサービスや複雑な依存関係を含むならMWAAやStep Functionsを検討する。
8.2 構成とデプロイ
- Q: MWAAでDAGファイルや追加のPythonパッケージはどこに置く?
A: 環境に関連付けたS3バケット。DAGはdags/、パッケージはrequirements.txt、カスタムプラグインはplugins.zipで指定する。 - Q: MWAA環境のネットワーク要件は?
A: 異なるAZにある2つのプライベートサブネットを持つVPCが必要。 - Q: Airflow UIを社内ネットワークからのみ利用させたい。
A: Webサーバーのアクセスモードをプライベートネットワークにし、VPC内(VPN/Direct Connect経由など)からアクセスさせる。
8.3 運用とトラブルシューティング
- Q: DAGのタスクが失敗した原因を調べるには?
A: CloudWatch Logsに出力したタスクログやスケジューラログを確認する。ログ出力は環境の設定で有効化しておく。 - Q: タスクがAWSサービスへのアクセス拒否で失敗する。
A: 環境の実行ロールに必要なIAM権限が付与されているか確認する。 - Q: キューに溜まったタスクの処理が追いつかない。
A: ワーカーの最大数を引き上げる、または環境クラスを大きくする。 - Q: DAGにデータベースのパスワードを書かずに接続したい。
A: Secrets ManagerまたはParameter Storeをシークレットバックエンドとして設定し、Airflowの接続情報を取得する。
8.4 料金とMLでの位置づけ
- Q: MWAAのプロビジョンド環境はDAGが動いていない時間も課金される?
A: される。環境クラスごとの時間料金が環境の存在期間中かかり、追加ワーカー等は稼働分が加算される。 - Q: MLモデルの学習からデプロイまでをオーケストレーションする手段は?
A: SageMaker Pipelines、またはApache Airflow(MWAA)。SageMaker中心でML固有の機能を重視するならSageMaker Pipelines、既存のAirflow資産やML以外の処理も含めて統合するならMWAAを選ぶ。