S3イベント通知 vs EventBridge 処理漏れ率を比べてみた2

結果的に処理重複(イベント重複)について学ぶことになりました
2020.04.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日、以下エントリを書きました。

S3バケットにファイルがアップロードされたのを検知し、それをトリガーに別の処理を走らせる方法として、S3イベント通知機能とEventBridge(CloudWatch Events)と2つの方法があり、それぞれの処理漏れ率を比べてみたエントリです。

処理漏れ率は、1万個のファイルをアップロードして比べたところ、どちらも0%でした。そこで今回はさらにファイル数を増やして 100万個のファイル で検証してみました。

検証方法

前回と同じです。同一S3バケットに対して2つの処理系統を用意します。

  • S3バケット → S3イベント通知 → SNSトピック
  • S3バケット → CloudTrailオブジェクトレベル認証 → EventBridge → (上記処理で使っているのとは別の)SNSトピック

このS3バケットに対して、オブジェクトを100万個作成します。 SNSトピックのCloudWatchメトリクスNumberOfMessagesPublishedにて発行されたメッセージ数を確認します。

検証結果

  • S3イベント通知 → 100万メッセージ
  • EventBridge → 100万20メッセージ

!??

想定外の結果でした。以下のような結果を予想していました。

EventBridgeはイベント重複が起きえる

ドキュメントに記載がありました。

まれに、単一のイベントまたはスケジュールされた期間に対して同じルールを複数回トリガーしたり、特定のトリガーされたルールに対して同じターゲットを複数回起動したりする場合があります。

S3イベント通知でもイベント重複が起きえる

今回は発生しませんでしたが、S3イベント通知でもイベント重複が起きるようです。

Amazon S3 は、組み込みのバックオフと再試行メカニズムを使用して、高い信頼性で通知を配信するように設計されています。まれに、再試行メカニズムによって同じオブジェクトイベントの通知が重複する場合があります。

まとめ

  • S3バケットにオブジェクトがアップロードされたことを起点になにかしらの処理を実行したい場合、その方法がふたつ存在する。S3イベント通知機能とEventBridge。
  • 両者の処理漏れ率を検証するため100万個のファイルをアップロード。するとEventBridge側で処理漏れどころか処理重複が発生した。
  • S3イベント通知機能とEventBridge、どちらも処理重複(イベント重複)が起きえる。後段の処理は冪等性のある処理にしましょう。