S3へのPutObjectイベントから複数のサービスを起動する
S3へのオブジェクトの作成時にイベントを発火させることができます。発火したイベントはSQSへSNS, Lambdaへ伝達させることができます。
今までこのイベント通知の機能を使って、データがS3へ保存されたときにSQSを介してLambdaを起動させていました。そしてそのLambdaで受け取ったイベントメッセージからS3のファイルへアクセスして、データ処理を行っていました。
しかし今までのイベント通知では、1つのPutObjectに対して1つのメッセージしか送れませんでした。なので、SQSやLambdaへも1つのメッセージしか行かず、1つのPutObjectイベントから複数の操作をするにはSNSへ通知するかStep Functionsを使うか、などの工夫が必要でした。
しかしre:invent2021でS3のイベントをAmazon Eventbridgeへ送ることが出来るようになりました。具体的な設定方法や中身はクラスメソッドさんのブログをご覧ください。
これにより、EventBridgeのイベントを複数のコンシューマーが受け取れるようになりました。
なので今まではシンプルにできなかった1つのPutObjectイベントから複数のLambdaを呼び出すことが可能となりました。
今まで1つのPutObjectイベントから計算AをLambdaAで、計算BをLambdaBでやりたいというニーズがあったので、ちょうどよいアップデートでした。
また、まだ調査中ですがAWSアカウントAへのPutObjectイベントから、そのEventBridgeをAWSアカウントBで取得して、AWSアカウントAのS3バケットへAWSアカウントBがアクセスできるのでは、とも考えています。
ユースケースとしては、本番環境のS3のみにデータを保存して、開発環境からはデータへアクセスするだけで保持はしない、というケースに使えそうです。本番環境と開発環境のどちらも1つのPutObjectイベントから発火させることができます。
文章だけの取りとめもない書き方となってしまい、ご了承ください。
Discussion