Kinesis Data StreamsとLambdaの連携で、処理済みのレコードが重複して実行されました

2021.08.30

困っていた内容

Kinesis Data StreamsをトリガーにLambdaを動作させています。 Lambdaのトリガーを有効から無効に切り替えた場合に、 既に処理済みのレコードが、重複して実行されました。

・Kinesisにput_record実施
・先頭の何件かのレコードをLambdaで実行 (A)
・update_event_source_mappingでトリガを無効化
10分待機した後、
・update_event_source_mappingでトリガを有効化
・後続の何件かのレコードをLambdaで実行 (B)
→ (A)で処理済みのレコードが、重複して実行された

重複して動作する理由を教えていただけないでしょうか?

どう対応すればいいの?

Kinesis Data Streamsは、複数のアベイラビリティゾーンでデータを複製して保持しています。 分散型の特質を持っていますので、関数にエラーのない場合でも、 イベントソースマッピングがキューから同じ項目を2回受け取る可能性があります。

レコードの重複が起こることを念頭に、 重複によってエラーや不整合が生じないようにアプリケーションを設計してください。

参考資料

[1] AWS Lambda イベントソースマッピング

[2] 重複レコードの処理 - Amazon Kinesis Data Streams