DEA / ドメイン1 データの取り込みと変換
重要な内容
パイプラインのオーケストレーションの選び方
データパイプラインは、取り込み、変換、カタログの更新、ロード、通知といった複数の処理を、決まった順序と条件で動かす仕組みです。この「順序と条件で動かす」役割をと呼びます。
DEA では、、 (Managed Workflows for Apache Airflow)、 ワークフロー、、 のどれで組むかを、要件の言葉から選び分けられるかが問われます。
Point
- Orchestration = 指揮、編成 の意味です。オーケストラの指揮者のように、各処理の開始と順序を指示する役割です。
- ワークフロー (workflow) は、処理の流れ全体を定義したものです。
- DAG = Directed Acyclic Graph (有向非巡回グラフ) の略で、Airflow がワークフローを表す形です。矢印に向きがあり、ぐるっと元に戻る輪がないグラフです。
- 和訳
- Orchestrate: 編成する、組織化する
- Weblio英和辞書「orchestrate」
概要
の道具は、「何をきっかけに始めるか」と「始めた後の流れをどう管理するか」の2つに分けると整理しやすくなります。
| 役割 | 主な道具 | 一言で言うと |
|---|---|---|
| きっかけ (スケジュールとイベント) | のルールと Scheduler、 イベント通知 | 「いつ」「何が起きたら」始めるかを決めます。 |
| 流れの管理 () | 状態を持つワークフローを (Amazon States Language) で定義します。 | |
| 流れの管理 () | Python の で書く Apache Airflow をマネージドで動かします。 | |
| 流れの管理 ( の中で完結) | Glue ワークフローとトリガー | Glue のジョブとだけをつなぎます。 |
| 1つの処理を実行 | 短い処理の実行役です。複雑な流れの管理には向きません。 |
試験では、「サーバーレスで運用負荷を最小にしたい」「既存の Airflow の DAG を移したい」「Glue のジョブとクローラーだけをつなぎたい」といった条件から道具を選びます。
主要技術
①オーケストレーターの比較 ⚠️ 頻出
| 観点 | ワークフロー | (単独) | ||
|---|---|---|---|---|
| 定義の書き方 | Amazon States Language (/)、ビジュアルエディタ | Python の | コンソールまたは でトリガーとジョブをつなぐ | ルールとターゲット |
| 対象 | 200 を超える AWS サービスの API を直接呼べます | のオペレーターで AWS 内外のシステムを扱えます | Glue のジョブと | イベントを1つ以上のターゲットへ届けるだけです |
| 実行の基盤 | 環境 (スケジューラー・ワーカー) を作ります。サーバーレスの実行オプションもあります | サーバーレス | サーバーレス | |
| 状態の管理 | 各ステップの入出力と実行履歴を保持します | Airflow のメタデータベースで保持します | 実行の状態と実行プロパティを保持します | 保持しません |
| 向く場面 | AWS サービス中心の新しいパイプライン、運用負荷を下げたい | 既存の Airflow 資産、オープンソースで移植性を保ちたい、AWS 外のシステムも多い | Glue だけで完結する | 単純な「起きたら起動」 |
決め手は次の3つです。
- AWS のサービスを組み合わせるだけで、運用負荷を最小にしたいなら Step Functions です。
- 既に Airflow の DAG がある、または Python でワークフローを書きたいチームなら MWAA です。
- 処理がすべて Glue のジョブとクローラーなら、Glue ワークフローで足ります。
⚠️ 頻出: 「の Apache Airflow から、コードの書き換えを最小にして AWS に移したい」は MWAA です。Step Functions に作り直す選択肢は、書き換えが大きくなるため外れます。
②Glue ワークフローとトリガー
ワークフローは、Glue のジョブとをトリガーでつないだ処理の流れです。コンソールでは、各ジョブの成否を色分けしたグラフで確認できます。
トリガーには3種類あります。
| トリガー | 動き | 使いどころ |
|---|---|---|
| スケジュール | cron 式で時刻を指定して起動します | 毎日 2 時に夜間バッチを動かします。 |
| 条件付き | 監視するジョブやクローラーが指定した状態で終わったら起動します | ジョブ A と B が両方成功したら C を起動します (ALL)。どちらかが失敗したら通知用ジョブを起動します (ANY)。 |
| コンソール、、CLI から手動で起動します | 再実行や検証のときに使います。 |
ワークフロー全体の開始 (開始トリガー) には、スケジュール、オンデマンドに加えて のイベントも使えます。EventBridge のイベントで始める場合は、バッチ条件として「イベントの件数 (バッチサイズ)」と「最初のイベントからの待ち時間 (バッチウィンドウ)」を指定でき、先に満たした方で起動します。バッチウィンドウの既定値と上限は 900 秒 (15 分) です。たとえば「 に 100 個のファイルが届くか、15 分たったら 1 回だけ を動かす」という要件に合います。
条件付きトリガーが見るジョブの終了状態は SUCCEEDED、STOPPED、FAILED、TIMEOUT、クローラーの終了状態は SUCCEEDED、FAILED、CANCELLED です。
ワークフローには実行プロパティ (名前と値の組) を持たせられ、前のジョブが書き込んだ値を後のジョブが読めます。途中のジョブが失敗した場合は、原因を直したうえで、失敗したところからワークフローの実行を再開 (resume) できます。
Point
- Glue ワークフローの中で、1つのワークフローに入れるジョブ・クローラー・トリガーは合計 100 以下に抑えるよう案内されています。大きすぎると再開や停止でエラーになることがあります。
- 1つのトリガーで起動できるクローラーは2つまでです。多くのデータストアを調べるときは、1つのクローラーに複数のソースを設定します。
③EventBridge と Lambda の位置づけ
は「きっかけ」を担当します。 へのオブジェクトの作成、 ジョブの状態変化、決まった時刻などのイベントを受け取り、 のステートマシン、Glue ワークフロー、 などを起動します。EventBridge 自体は処理の順序や再試行の状態を持たないため、複数の手順を管理するには Step Functions などと組み合わせます。
Lambda は「1つの処理」を担当します。ファイルの到着を受けて小さな変換をする、Glue ジョブを起動する を呼ぶ、といった短い処理には向きます。しかし、Lambda の中で別のジョブの完了を待ち続けたり、複数の Lambda を連鎖させて順序を管理したりすると、タイムアウト (最長 15 分) や再試行の管理を自分で作ることになります。
| やりたいこと | 選ぶもの |
|---|---|
| 毎日決まった時刻にパイプラインを始める | EventBridge Scheduler (またはルールのスケジュール) から Step Functions を起動 |
| S3 にファイルが届いたらパイプラインを始める | S3 イベント → EventBridge → Step Functions |
| 小さな変換を1回だけ行う | Lambda |
| 複数のジョブを順に動かし、失敗時に再試行と通知をする | Step Functions (または ) |
⚠️ 頻出: 「Lambda から Lambda を呼んで順序を管理している。失敗時の再試行と可視化を簡単にしたい」は Step Functions に置き換えます。
④依存関係、再実行、バックフィル
パイプラインの運用では、次の3つを最初から設計します。
| 観点 | 内容 | 道具ごとの考え方 |
|---|---|---|
| 依存関係 | 前の処理が成功してから次を始める | は状態の順序、 はタスク間の依存 (>>)、 は条件付きトリガーで表します。 |
| 再実行 | 失敗したところから再開する | Step Functions は Standard ワークフローの redrive (失敗した実行を、失敗したステップから再開)、MWAA はタスクのクリア、Glue ワークフローは resume を使います。 |
| バックフィル | 過去の期間分をまとめて処理し直す | はデータの期間 (論理日付) ごとに を実行するため、過去の期間を指定した再実行に向きます。Step Functions では、期間を入力にした実行を繰り返します。 |
再実行やバックフィルで同じデータを2回書いても結果が壊れないように、各処理は (何度実行しても同じ結果になる) に作ります。具体的には、日付パーティション単位で上書きする、 で upsert する、といった書き方をします (#26 の章で詳しく扱います)。
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶもの | 理由 |
|---|---|---|
| 、運用負荷を最小、AWS サービスの連携 | 基盤の管理が不要で、・・ などを直接呼べます。 | |
| 既存の の 、オープンソース、Python | DAG をそのまま に置いて動かせます。 | |
| Glue のジョブとだけをつなぐ | Glue ワークフロー | Glue の中で依存関係と再開を扱えます。 |
| 2つのジョブが両方成功したら次を起動 | Glue の条件付きトリガー (ALL) | ジョブの終了状態を監視して起動します。 |
| S3 に一定数のファイルがたまったら、または一定時間ごとに1回だけ | のイベントで始まる Glue ワークフロー (バッチ条件) | バッチサイズとバッチウィンドウのどちらか早い方で起動します。 |
| 決まった時刻に開始 | EventBridge Scheduler / Glue のスケジュールトリガー / Airflow のスケジュール | どれも時間ベースのスケジュールを持ちます。 |
| 人の承認を待つ、長時間の処理を待つ | Step Functions (Standard) | コールバックやジョブの完了待ちに対応します。 |
| 過去の期間を再処理したい | MWAA (Airflow のバックフィル) | データの期間ごとの実行を前提にしています。 |
②よくある誤答
- だけで複数ステップの順序と再試行を管理しようとすること。EventBridge は起動のきっかけで、状態を持ちません。
- の中でジョブの完了をし続けること。15 分の上限と待ち時間の課金があるため、 のジョブ完了待ち (.sync) を使います。
- 以外のサービス (、、外部の ) も多く含むのに Glue ワークフローを選ぶこと。対象は Glue のジョブとです。
- 既存の 資産があるのに Step Functions へ作り直すこと。移行の手間が最小という条件なら です。