はじめに
別のシステムが出力したファイルを使ってAWS環境で構築したシステムを実行する際に、そのファイルが連携されたことを検知してAWSサービスを実行したい要件があります。
今回の記事ではEventBridgeを使用したその要件の実現方法を記載しました。
使うAWSサービス
・Amazon EventBridge
・Amazon S3
・AWS StepFunctions
アーキテクチャ図
アーキテクチャ説明
1.S3バケットの通知設定
①S3バケットのタブメニューから「プロパティ」を選択
②「Amazon EventBridge」の「編集」ボタンを押下
③設定画面での通知を「オン」に設定する
2.EventBridgeの設定
②S3からの通知をイベントパターンとしてターゲットを実行するように設定
※今回はObjectCreated(オブジェクトのアップロード)を検知する
※上記の設定だとバケット内のすべてのプレフィックスへのオブジェクトのアップロードが検知されてしまうため、必要に応じて「パターンを編集」ボタンから以下のような設定で検知範囲を絞ることも有効
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["test-bucket"]
},
"object": {
"key": [{
"prefix": "csv/"
※CSVというフォルダにファイルがアップロードされた時だけイベントを検知する
}]
}
}
}
③特定のバケットからの通知を拾うときはバケット名を設定する
④イベントを検知した後に実行するターゲットを設定する
3.動作確認
②StepFunctionsステートマシンが起動したことを確認
さいごに
EventBridgeは定時実行で深夜のバッチ実行によく使用される。しかし定時実行の場合、連携元のシステムが正常に稼働せず、ファイルの連携が遅れた場合に古いファイルのまま実行されてしまうことになります。
これを防ぐために、S3にファイルがアップロードされたことを検知して実行するようにすることで連携元のシステムのファイル連携が遅れても確実に新しいファイルでバッチ処理を実行することができます。
※次の記事で複数ファイルが全てアップロードされてからステートマシンを実行する実装例を記載しました