EventBridgeを使用してキー指定したS3のイベントをトリガーにLambdaを実行してみた

2022.04.26

こんにちは。
コンサルティング部 繁松です。

今日は、EventBridgeを使用してキー指定したS3のイベントをトリガーにLambdaを実行してみたのでブログにしました。

はじめに

S3のイベントをLambdaのトリガーにする際に直接S3をトリガーに設定すると
プレフィックスとサフィックスの指定しかできない為ファイル名の頭にtest等が入った場合でもLambdaが動いてしまいます。

どういう事かというと、
S3を指定して/s3test-shigematsu/test/にファイルs3trigger.txtのアップロードをLambdaのトリガーとした場合以下の内容で設定すると思います。

この場合以下のキーでのイベントが発生した場合にLambdaが実行されますが

バケット:/s3test-shigematsu
オブジェクト:/test/s3trigger.txt

以下のキーでイベントが発生した場合でもLambdaが実行されてしまいます。

バケット:/s3test-shigematsu
オブジェクト:/test/test-s3trigger.txt

EventBridgeをトリガーにすることでキー指定が可能になる為、指定したキー以外のLambda実行を防ぐ事が出来ます。

S3の概念について詳しくは下記ブログを参照してください。

やってみた

EventBridgeをLambdaのトリガーにする手順は以下です

1. S3でEventBridgeの通知を有効にする

まずはS3でEventBridgeの通知を有効にします。
[対象のバケット]→[プロパティ]→[Amazon EventBridge]の編集を選択

[オン]にして変更の保存

2. イベントルール作成

[Amazon EventBridge]→[ルールの作成]

パターンの定義で[パターンの編集]を選択し以下の内容を設定

{  
  "source": ["aws.s3"],  
  "detail-type": ["Object Created"],  
  "detail": {  
    "bucket": {  
      "name": ["オブジェクト名"]  
    },  
    "object": {  
      "key": [{  
        "prefix": "キー"  
      }]  
    }  
  }  
}

今回設定した内容

ターゲットを設定

こちらの内容で設定しs3trigger.txtをアップロードした場合にはLambdaが実行され、test-s3trigger.txtをアップロードした場合にはLambdaが実行されないことを確認できました。

さいごに

EventBridgeをトリガーにすることで、キーの指定や、ファイルサイズの指定等が可能となります。

以上、EventBridgeを使用してキー指定したS3のイベントをトリガーにLambdaを実行してみたでした。
なにかのお役に立つと幸いです。

参考