この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
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回受け取る可能性があります。
レコードの重複が起こることを念頭に、 重複によってエラーや不整合が生じないようにアプリケーションを設計してください。