Kinesis Data StreamsとLambdaの連携で、処理済みのレコードが重複して実行されました
困っていた内容
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回受け取る可能性があります。
レコードの重複が起こることを念頭に、 重複によってエラーや不整合が生じないようにアプリケーションを設計してください。