モチベーション維持のための技術系ブログ

技術者として個人的にアウトプットもやっていこうと思い始めました。

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 が設定されているレコードのみログ出力される。