Lambda のイベントフィルタリング を試してみた
参考URL
Lambda のイベントフィルタリング - AWS Lambda
【アップデート】Lambdaのイベントソースマッピングでイベントのフィルタが可能になりました | DevelopersIO
やったこと
DynamoDB作成
適当な名前でDynamoDBを作成。
DynamoDB ストリーム の設定はONにする。
※色々試した後なので、既にレコードが入っている状態
Lambdaの作成
適当な名前でLambdaを作成。
元々のソースコードを修正。
とりあえずなんかしら console.log を出力するようにする。
修正したら「Deploy」を押下してデプロイする。
Lambdaに設定されているロールの設定
設定 >> アクセス権限 を選択するとロール名が表示されるので、クリックする。
AmazonDynamoDBFullAccess
を付与する。
※FullAccessじゃなくて、もっと適切なロールがあるかも。
とりあえず動かしたいので、FullAccessにする。
DynamoDB ストリームの設定 ※メインイベント!!!
設定 >> トリガー >> トリガーを追加 を選択する。
新規作成したDynamoDBを設定する。
※バッチサイズは今回はとりあえずなんでもいい。
追加の設定 >> フィルタリング条件 から、下記のようにフィルターを設定する。
設定したのは下記のようなフィルター。
※フィルターの書き方は参考URL参照
- フィルター1
- eventNameは「INSERT」
- expiredAt という項目が存在しない
- フィルター2
- eventNameは「UPDATE」
- expiredAt という項目が存在しない
実際に動かしてみる
下記2パターンのデータをINSERTしてみる。
DynamoDB コンソールの「項目を作成」から追加する。
■expiredAt なし { "key": "expiredAt does not exists", "age": 20, "name": "masuda" } ■expiredAt あり { "key": "expiredAt exists", "age": 25, "name": "onuma", "expiredAt": 123456 }
CloudWatch からログを確認すると、expiredAt が設定されていないレコードのみログ出力される。
既にINSERTしたデータを更新(age を+1)する。
すると、やはり expiredAt が設定されているレコードのみログ出力される。