指定のファイル数がS3バケットに到達したらGlueジョブを実行させる方法

記事タイトルとURLをコピーする

こんにちは!SRE2課 入倉です。
今回はEventBridgeを使ってS3バケットに指定した数のファイルがアップロードされたら、
Glueワークフローを起動させて、その中で指定したGlueジョブを実行する設定を試してみました。

構成

前提

  • Glueワークフローで実行するGlueクローラまたはGlueジョブが作成されていること

設定

Glueワークフローの作成

後程EventBridgeのルール作成時にターゲットを指定する為、
まずはGlueのマネジメントコンソール画面に遷移し、「ワークフローの作成」をクリックします。

任意のワークフロー名を入力し、「ワークフローの追加」をクリックします。

Glueワークフローが作成できました。

S3バケットの作成

S3のマネジメントコンソール画面に遷移し、バケットを作成します。
(既に作成済みの場合はスキップとしてください)

S3イベント通知有効化

作成したS3バケットを選択し、「プロパティ」タブから
「Amazon EventBridge」という項目の「編集」をクリックします。

「オン」を選択して、「変更の保存」をクリックします。
設定をオンにすることでこのS3バケットのイベントがEventBridgeに連携されるようになります。

EventBridgeルールの作成

EventBridgeのマネジメントコンソール画面に遷移し、「ルールを作成」をクリックします。

EventBridgeルールの「名前」を入力して、「次へ」をクリックします。

イベントパターンの画面で以下のように設定し、「次へ」をクリックします。
※バケット名はご自身のAWSアカウントで作成したバケット名を指定してください

ターゲットを最初に作成したGlueワークフローを指定し、「次へ」をクリックします。

設定内容を確認して問題なければ「ルールの作成」をクリックします。

ちなみにこの時に作成されたIAMロールには以下権限が付与されています。

  • glue:notifyEvent

Glueワークフローの設定

作成したGlueワークフローを選択し、「トリガーを追加」をクリックします。

ようやくここで今回やりたかった、「S3バケットに指定のファイル数がアップロードされたら」というトリガー設定となります。
設定はファイル数の指定だけでなく指定秒数待機する設定も可能で、どちらかの条件が揃ったらGlueワークフローが実行という形になります。

  • Number of events
    • イベントが指定の数発生したらGlueワークフロー実行
    • 1~100の値を指定可能
  • Time delay in seconds(オプション)
    • イベント発生後、指定の秒数待機してからGlueワークフロー実行
    • 1~900の値を指定可能(デフォルト 900)

任意のトリガー名を入力し、Number of eventsは今回「2」とすることで
EventBridgeのイベントが2回発生(つまりS3バケットに2ファイルアップロード)されたらGlueワークフローを実行となります。

もしくは、今回Time delay in secondsは指定しないですが、デフォルトで900秒の為、1ファイル目が来てから900秒経過したら2ファイル目が到達しなくてもGlueワークフローが実行されます。

トリガーが追加されたら、「ノード」を選択して作成済みの任意のクローラまたはGlueジョブを指定してください。

今回は単純にcsvファイルをparquet形式に変換するGlueジョブを指定します。

Glueトリガーの確認

追加したトリガーを選択してみると、右側にBatch sizeが2、Batch windowが900と表示されていることがわかります。
Number of eventsで指定した値=Batch size、Time delay in secondsで指定した値=Batch windowとなります。

動作確認

S3バケットにファイルを1つずつアップロードしてみます。
1ファイル目をアップロードしてもGlueワークフローが実行されませんでしたが、
2ファイル目をアップロード後、すぐにGlueワークフローが実行されました。

Glueワークフロー内で指定したGlueジョブが実行され、
S3バケットの指定のフォルダにparquet形式に変換されてファイルが保存されていることが確認できます。

まとめ

非常に簡単に、「指定したファイル数が到着したらGlueジョブを実行」という構成が実現できました。
もし、より柔軟な制御や他AWSサービスと連携をさせたいというのがあればGlueワークフローではなくStepFunctionsを使った方が良いですが、
そのような複雑な要件が無ければGlueワークフローで簡単に構築できるためかなりおすすめです!

また、特定のファイル名で始まるファイルが到達した場合にイベント検知としてファイル数としてカウントしたいといった場合などは
EventBridgeルールのイベントパターンをカスタマイズすることである程度柔軟に指定することも可能ですので、ぜひお試しください。
それではまたお会いしましょう!

入倉 翔吾(執筆記事の一覧)

クラウドインテグレーション部 SRE2課