Lambda 関数呼び出しの重複を防ぐ方法を教えて下さい。

最終更新日: 2021 年 11 月 18 日

AWS Lambda 関数が、1 つのイベントに対して複数の呼び出しリクエストを受信し続けます。Lambda 関数が同じイベントから複数回呼び出されないようにする方法を教えて下さい。

簡単な説明

Lambda 関数呼び出しが重複しないようにするには、使用している呼び出しタイプに基づいて次の操作を行います。

注: 同期呼び出しの場合、Lambda 関数を呼び出すクライアントと AWS のサービスが再試行を行います。非同期呼び出しの場合、Lambda はエラー発生時に自動的に再試行し、再試行間の遅延が発生します。

解決方法

非同期呼び出しの場合

Lambda 関数の Amazon CloudWatch Logs を確認して、以下を確認します。

  • 重複した呼び出しのリクエスト ID は同じではないか
  • 重複した呼び出しでエラーが返されたり、タイムアウトになったりしていないか

ユースケースに基づいて、次のいずれかを実行します。

エラーを返した、またはタイムアウトした、および同じリクエスト ID を持つ重複した呼び出しの場合

注: エラーまたはタイムアウトを返し、同じリクエスト ID を持つ呼び出しが重複している場合は、Lambda サービスが関数を再試行したことを示します。

非同期呼び出しのエラー処理を設定して、Lambda 関数が失敗した非同期呼び出しリクエストを再試行する回数を減らします。

詳細については、「エラー処理と AWS Lambda での自動再試行」を参照してください。

エラーやタイムアウトを返さなかった重複呼び出しの場合

注: エラーやタイムアウトを返さない呼び出しが重複している場合は、クライアント側で再試行されることを示します。

同期呼び出しの場合

注: 同期呼び出しの再試行動作は、各サービスのイベントソースマッピングに基づき、AWS のサービスによって異なります。詳細については、「イベント駆動型呼び出し」を参照してください。