DEA / ドメイン1 データの取り込みと変換

重要な内容

Amazon MWAA (Apache Airflow)

(Amazon Managed Workflows for Apache Airflow) は、オープンソースのワークフロー管理ツール を、AWS がマネージドで動かすサービスです。Airflow のスケジューラー、ワーカー、Web サーバー、メタデータベースの構築とパッチ適用を AWS に任せ、利用者は Python で書いたワークフロー () を に置くだけで動かせます。

DEA では、DAG の置き場所と依存パッケージの入れ方、環境クラスとワーカーの自動スケーリング、タスクが失敗したときの調べ方 ( Logs と Airflow UI) が問われます。

Point
  • MWAA = Managed Workflows for Apache Airflow の略です。試験ガイドでも「Amazon Managed Workflows for Apache Airflow (Amazon MWAA)」と書かれます。
  • DAG = Directed Acyclic Graph (有向非巡回グラフ) です。タスクを矢印でつなぎ、輪にならない形で順序を表します。
  • Operator (オペレーター) は「1つのタスクで何をするか」の部品です。Sensor (センサー) は「条件が満たされるまで待つ」オペレーターです。
  • 和訳

概要

の環境は、AWS が管理する の各コンポーネントと、利用者の と から成ります。

概要の図 DAG・requirements.txtplugins.zip を置く 開発者 S3 バケットdags フォルダ スケジューラーDAG を読み、タスクを予定 タスクのキュー ワーカー自動スケーリング Glue / EMR / AthenaRedshift / S3 など CloudWatch Logsタスクのログ Airflow UIWeb サーバー
構成要素役割
S3 バケット のファイル (dags/ フォルダ)、requirements.txt、plugins.zip、起動スクリプトを置きます。
スケジューラーDAG を読み込み、実行の予定を立ててタスクをキューに入れます。
ワーカーキューからタスクを取り出して実行します。負荷に応じて台数が増減します。
Web サーバーAirflow UI を提供します。アクセスは で制御します。
メタデータベースDAG の実行状態を保存します。AWS が管理します。
実行ロールワーカーが AWS のサービスを呼ぶときの IAM ロールです。

試験では、「既存の Airflow の DAG を、インフラを管理せずに AWS で動かしたい」「Python でワークフローを書き、AWS 外のシステムも扱いたい」という要件で MWAA を選びます。


主要技術

①DAG、オペレーター、センサー ⚠️ 頻出

は Python のファイルで、タスクとその依存関係を定義します。各タスクはオペレーターで作ります。

部品例データパイプラインでの使い方
AWS のオペレーターGlueJobOperator、EmrAddStepsOperator、AthenaOperator、RedshiftDataOperator、S3CopyObjectOperator などAWS のサービスを起動し、完了を待ちます。
センサーS3KeySensor、GlueJobSensor など にファイルが届くまで、ジョブが終わるまで待ちます。
汎用オペレーターPythonOperator、BashOperator小さな Python 処理やコマンドを実行します。
依存関係extract >> transform >> load前のタスクが成功してから次を始めます。

AWS のオペレーターとセンサーは、 の Amazon プロバイダーパッケージに含まれます。Airflow には AWS 以外のシステム (他のクラウド、データベース、) のオペレーターも多数あるため、AWS 外のシステムを多く扱うパイプラインで強みがあります。

DAG にはスケジュール (cron 式や間隔) を書けます。Airflow はデータの期間ごとに DAG を実行する考え方で作られているため、過去の期間をまとめて処理し直すバックフィルにも向きます。

Point
  • センサーで長く待つとワーカーの枠を使い続けます。Airflow の deferrable (遅延可能) なオペレーターを使うと、待っている間は triggerer という部品に待ちを任せ、ワーカーを空けられます。MWAA では triggerer はスケジューラーと同じ場所で動き、スケジューラーの数を増やすと triggerer も増えます。

②S3 の dags フォルダ、requirements.txt、plugins.zip

の環境は、指定した からファイルを読み込みます。

ファイル役割反映のされ方
dags/ フォルダの .py の定義置くと自動で読み込まれ、 UI に現れます。
requirements.txt追加の Python パッケージ環境の設定でファイルのバージョンを指定して更新します。環境の更新が走ります。
plugins.zipカスタムのオペレーターやフック同じく環境の更新で反映します。
起動スクリプト環境の起動時にシェルを実行環境変数の設定や のパッケージの導入に使います。

requirements.txt には、Airflow のバージョンに合った制約ファイル (--constraint) を指定し、パッケージのバージョンの食い違いを防ぎます。パッケージの導入に失敗した場合は、 Logs のスケジューラーのロググループにある requirements_install のログストリームで原因を確かめます。

S3 バケットはを有効にし、パブリックアクセスをブロックしておきます。requirements.txt と plugins.zip はオブジェクトのバージョンで指定するため、どの版が使われているかを管理できます。


③環境クラスとワーカーのスケーリング

環境クラスは、スケジューラーとワーカーなどの大きさを決めます。

環境クラス目安の 数ワーカー1台の既定の同時タスク数
mw1.micro25 まで3 (自動スケーリングなし)
mw1.small50 まで5
mw1.medium250 まで10
mw1.large1,000 まで20
mw1.xlarge2,000 まで40
mw1.2xlarge4,000 まで80

ワーカーは、最小数と最大数の間で自動的に増減します。 は実行中と待機中のタスクの数 (RunningTasks と QueuedTasks) から必要なワーカー数を計算し、足りなければ最大数まで増やし、タスクが減れば最小数まで戻します。最大ワーカー数はコンソールで既定 25 まで指定できます。

症状原因の候補対処
タスクがキューに長くたまるワーカーの最大数が足りない最大ワーカー数を増やします。
1台のワーカーで重いタスクが遅い、メモリ不足環境クラスが小さい環境クラスを上げます。
同時に動くタスク数を増やしたいワーカー1台あたりの同時タスク数環境クラスを上げるか、celery.worker_autoscale を調整します。
DAG が多くて読み込みが遅いスケジューラーの負荷スケジューラーの数 (2〜5) を増やすか、環境クラスを上げます。

⚠️ 頻出: 「ピーク時にタスクが待たされる」はワーカーの最大数、「個々のタスクが重い」は環境クラスです。重い計算そのものは、 のワーカーではなく や に任せるのが基本です。


④タスク失敗の調べ方 ⚠️ 頻出

は のログを Logs に送れます。ログの種類ごとにロググループが作られ、名前は airflow-<環境名>-<種類> です。

ロググループの種類中身調べる場面
Task各タスクの実行ログタスクのエラーの内容 (権限、接続、 の誤り) を見ます。
Schedulerスケジューラーのログ、requirements.txt の導入ログパッケージの導入失敗、スケジュールされない原因を見ます。
DAGProcessing ファイルの解析のログDAG が UI に出ない (import エラー、構文エラー) 原因を見ます。
Workerワーカーのログワーカー側の異常を見ます。
WebServerWeb サーバーのログUI の不具合を見ます。

ログは INFO、WARNING、ERROR、CRITICAL のいずれかのレベルで有効にし、指定したレベル以上が送られます。ログの送信は環境ごとに有効にする設定で、料金は CloudWatch Logs の通常の料金です。

調べる順番の目安は次のとおりです。

  1. Airflow UI で、失敗した DAG 実行とタスクを特定します (グラフやグリッドの表示で赤くなったタスク)。
  2. そのタスクのログを開き、エラーの内容を読みます (UI のログは CloudWatch Logs の Task ロググループから読まれます)。
  3. 権限エラーなら実行ロールのポリシー、接続エラーなら のルーティングや、パッケージのエラーなら requirements.txt と導入ログを確かめます。
  4. 原因を直したら、Airflow UI でタスクをクリアして再実行します。

環境の (キューのタスク数、スケジューラーの状態など) は CloudWatch に送られるため、を作って で通知できます。


⑤ネットワーク、権限、サーバーレスのオプション

の環境は利用者の のにつながります。ワーカーが 、 Logs、、 などへ届く経路 ( ゲートウェイか VPC ) が必要です。 UI へのアクセスは、パブリックネットワーク (インターネット経由) かプライベートネットワーク (VPC 内からのみ) を選び、どちらも のポリシーで利用者を制御します。

データベースのパスワードなどの接続情報は、 に直接書かず、 をシークレットのバックエンドとして使って取り出します。

2025 年 11 月には、環境を作らずにワークフローを動かせる Amazon MWAA Serverless が加わりました。ワークフローは または Python の DAG で定義し、ワークフローごとに IAM の権限を分けて実行し、タスクの実行時間に対して課金されます。使えるオペレーターの範囲には制限があるため、既存の DAG をそのまま動かしたい場合は従来の環境 (プロビジョンド) を選びます。


試験対策

①判断マトリクス

問題文のキーワード選ぶもの理由
の を最小の変更で移行同じ Airflow の を に置いて動かせます。
新しい DAG を本番に出すS3 の dags/ フォルダに置く自動で読み込まれます。
DAG で使う Python パッケージを追加requirements.txt を更新して環境を更新環境のワーカーにパッケージが入ります。
タスクがキューにたまって待たされる最大ワーカー数を増やす自動スケーリングの上限を上げます。
タスクの失敗の原因を調べるAirflow UI と Logs の Task ロググループタスクごとのエラーを確認できます。
DAG が UI に表示されないDAGProcessing のログDAG ファイルの解析エラーを確認します。
パッケージの導入が失敗するScheduler ロググループの requirements_install のログ導入の過程が記録されます。
接続情報を安全に保管 をバックエンドにするDAG にパスワードを書かずに済みます。
AWS サービスだけで、運用負荷が最小 を比較するAirflow の資産や知識が不要です。

②よくある誤答

  • を に置く、またはワーカーに直接コピーすること。 では のに置きます。
  • 重い の処理を のワーカーで直接実行すること。ワーカーは指揮役で、重い処理は や へ任せます。
  • 「タスクが待たされる」に対して環境クラスだけを上げること。同時に動くタスク数の不足なら、まず最大ワーカー数を見ます。
  • ログが見られないのに を調べること。タスクのログは Logs への送信を有効にして確認します。CloudTrail に残るのは MWAA の の呼び出しです。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください