DEA / ドメイン1 データの取り込みと変換
重要な内容
Amazon EventBridge (スケジュールとイベント駆動)
は、「いつ」「何が起きたら」パイプラインを動かすかを決めるサービスです。決まった時刻に ジョブを起動する (スケジュール)、 にファイルが届いたら を起動する ()、ジョブが失敗したら通知する、といった仕組みをサーバーなしで作れます。DEA では、スケジューラの設定、イベントトリガーの設定、イベントとスケジューラの管理として出題されます。
Point
- EventBridge には3つの機能があります。イベントバスとルール (多対多のイベントの振り分け)、EventBridge Scheduler (時刻での起動)、EventBridge Pipes (1つのソースから1つのターゲットへの連携) です。
- cron 式 は「毎日 2 時」のような日時の指定、rate 式 は「5分ごと」のような間隔の指定です。
- 和訳
- Schedule: 予定、時刻表
- Weblio英和辞書「schedule」
概要
| 機能 | 役割 | データパイプラインでの使い方 |
|---|---|---|
| イベントバスとルール | 届いたイベントをパターンで判定し、ターゲットへ配る | の到着、// の状態変化をきっかけに次の処理を起動・通知 |
| Scheduler | cron・rate・一回限りの日時でターゲットを呼ぶ | 夜間バッチの起動、定期的な取り込み |
| EventBridge Pipes | キューやストリームから1つのターゲットへ、フィルターと加工を挟んで渡す | や Streams のレコードを Step Functions へ渡す |
主要技術
①時間ベースのスケジュール ⚠️ 頻出
パイプラインを時刻で動かす方法は複数あります。
| 方法 | 特徴 | 向くケース |
|---|---|---|
| Scheduler | cron・rate・一回限り。タイムゾーンの指定、柔軟な時間枠、再試行と 。多くの AWS を直接呼べる (ユニバーサルターゲット) | サービスを横断した定期起動の標準的な方法 |
| EventBridge のスケジュールルール | イベントバスのルールに cron・rate を書く従来の方法。時刻は UTC で指定し、一回限りの実行は書けない | 既存の構成。新規には Scheduler が推奨される |
| のスケジュールトリガー | Glue ジョブやを cron 式で起動する | Glue の中で完結するジョブとクローラー |
| クローラーのスケジュール | クローラー自体に実行スケジュールを設定する | パーティションやスキーマの定期的な更新 |
| () の のスケジュール | DAG ごとに schedule を設定。依存関係・バックフィル・再実行の管理が強い | 多数のタスクの依存関係がある複雑なパイプライン |
⚠️ 頻出: 「毎日決まった時刻に、・Glue・ などを起動したい。サーバーは管理したくない」は EventBridge Scheduler (またはスケジュールルール) です。 上の cron は運用負荷とコストの点で劣ります。
EventBridge Scheduler の柔軟な時間枠 (flexible time window) を設定すると、指定した時刻から最大その分数の範囲で呼び出しをばらけさせます。多数のスケジュールが同じ時刻に集中し、ターゲットや下流でが起きる場合に、時刻ちょうどでなくてよい処理の負荷を均せます。
②イベントトリガー: S3 イベント通知と EventBridge ⚠️ 頻出
にファイルが届いたことをきっかけにする方法は2つあります。
| 観点 | S3 イベント通知 (直接) | S3 → |
|---|---|---|
| 送信先 | トピック、 標準キュー、 関数 | EventBridge のルールで指定する多数のターゲット (、 ワークフロー、 タスクなど) |
| 絞り込み | プレフィックスとサフィックス (拡張子) | イベントパターンでオブジェクトのキー、サイズ、送信元などを細かく判定 |
| 1つのイベントの配り先 | 同じイベントの種類とプレフィックスの組み合わせは1つの送信先 (複数へ配るなら SNS で) | 複数のルール・複数のターゲットへ配れる |
| 設定 | イベントの種類を選んで設定 | で EventBridge を有効にすると、すべてのイベントが送られる |
| その他 | — | とリプレイ、他アカウントのバスへの転送 |
S3 イベント通知の送信先に SQS の キューは使えません。順序付きで受けたい場合は EventBridge を経由します。
⚠️ 頻出: 「S3 に CSV が届いたら Step Functions のワークフローを起動」「拡張子だけでなく条件で絞りたい」「同じイベントで複数の処理を起動」は、S3 の EventBridge 連携とルールです。「届いたら Lambda を1つ起動するだけ」なら S3 イベント通知で十分です。
③AWS サービスのイベントで次の処理をつなぐ
多くのデータサービスは、状態の変化を のデフォルトのイベントバスへ送ります。
| イベントの例 | 使い方 |
|---|---|
| Job State Change (SUCCEEDED / FAILED / TIMEOUT) | 失敗したら で通知、成功したら次の処理を起動 |
| Glue Crawler State Change | の完了後にジョブを起動 |
| のクラスターやステップの状態変化 | ステップの失敗を通知 |
| の実行状態の変化 | ワークフローの失敗を検知 |
| Data のステートメントの完了 | の完了で後続を起動 (ExecuteStatement で WithEvent を指定) |
| Query State Change (SUCCEEDED / FAILED など) | 長いクエリの完了で結果の処理を起動し、 で待ち続けない |
| Job State Change (SUCCEEDED / FAILED / TIMEOUT / STOPPED) | DataBrew のレシピジョブの完了で次の処理を起動 |
| のジョブの状態変化 | の完了後に結果を処理 |
Glue ワークフローは、EventBridge のイベントで開始するトリガー (イベントトリガー) も持ち、一定数のイベントがたまるか一定時間が経つまで待ってから起動するバッチ化もできます。
④イベントパターンとターゲットの設定
| 設定 | 内容 |
|---|---|
| イベントパターン | source、detail-type、detail の値で一致を判定する 。前方一致や数値の範囲も書ける |
| 入力 | ターゲットへ渡す JSON を組み立て直す (例: 名とキーだけを渡す) |
| ロール | がターゲットを呼ぶための権限 |
| 再試行ポリシーと | ターゲットへ渡せなかったイベントを へ退避する |
| とリプレイ | 過去のイベントを保存し、後で同じバスへ流し直す |
ルールを作ったのにターゲットが動かない場合は、イベントパターンの不一致、ターゲットを呼ぶ権限の不足、 側で EventBridge の連携を有効にしていない、を確かめます。
⑤EventBridge Pipes
Pipes は、ソースからレコードを読み、フィルターで絞り、エンリッチメント (、 の Express ワークフロー、、 送信先) で情報を加えてから、ターゲットへ渡します。
| 項目 | 内容 |
|---|---|
| ソース | 、、 Streams、、セルフマネージドの 、 |
| 料金 | フィルターに一致したイベントだけが課金される |
| 向くケース | ストリームやキューと処理先のあいだの「つなぐだけのコード」をなくしたい |
⑥Airflow (MWAA) と EventBridge の使い分け
| 観点 | (+ ) | |
|---|---|---|
| 得意なこと | イベントへの即時の反応、単純な定期起動 | 多数のタスクの依存関係、バックフィル、Python での柔軟な定義 |
| 運用 | 、常時の費用がほぼない | 環境が常時動き、環境クラスに応じた費用 |
| 既存資産 | — | 既存の の を移行できる |
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶ機能 |
|---|---|
| 毎日決まった時刻にジョブを起動、サーバーなし | Scheduler |
| のを定期実行 | クローラーのスケジュール / Glue のトリガー |
| 多数のタスクの依存関係とバックフィル | |
| にファイルが届いたら を1つ起動 | S3 イベント通知 |
| S3 の到着でワークフローを起動、条件で絞る、複数の処理へ | S3 → EventBridge のルール |
| Glue ジョブが失敗したら通知 | Glue Job State Change のルール → |
| 渡せなかったイベントを失わない | ターゲットの |
| 過去のイベントを流し直す | とリプレイ |
| のメッセージを加工して へ | EventBridge Pipes |
②よくある誤答
- で cron を動かしてジョブを起動すること。運用負荷が高く、の Scheduler で置き換えます。
- イベント通知の送信先に キューを指定すること。直接はできません。
- に長い処理や多段の分岐を実装させること。EventBridge は起動と振り分けを担い、ワークフローは や に任せます。
- S3 の EventBridge 連携を有効にせずにルールだけ作ること。イベントが届きません。