Amazon Simple Queue Service (Amazon SQS) をイベントソースとして設定している AWS Lambda 関数の部分バッチ応答をセットアップしました。Lambda 関数が「ReportBatchItemFailures」のリストを返し、関数エラーがなかった場合に Lambda がメッセージバッチ全体を再試行する、または Lambda が部分的なメッセージバッチのいずれも再試行しない、という状況が発生しています。この問題をトラブルシューティングするにはどうすればよいですか?
解決方法
注: 部分的な Amazon SQS バッチをプログラムで処理するには、Lambda 関数で部分バッチ応答を手動で設定する必要があります。詳細については、「AWS Lambda デベロッパーガイド」の「バッチ項目の失敗の報告」を参照してください。
Lambda 関数の部分バッチ応答をアクティブ化する AWS Command Line Interface (AWS CLI) コマンドの例
重要: <esm_UUID> を Amazon SQS イベントソースマッピングの汎用一意識別子 (UUID) で置き換えます。イベントソースマッピングの UUID を取得するには、list-event-source-mappings AWS CLI コマンドを実行します。AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"
関数エラーがなかった場合に Lambda が SQS メッセージバッチ全体を再試行する ReportBatchItemFailures をトラブルシューティングするには
Lambda 関数のコードで部分バッチ応答を確認し、次のような応答が含まれているどうか確認します。次に、記録された応答に基づいて問題を修正します。
注: 関数が次のいずれかの応答を返す場合、Lambda はバッチを完全な失敗として扱います。
有効な JSON ではない EventResponse に対する応答
return "Hello world"
return ""
空の itemIdentifier 値に対する応答
return {"batchItemFailures":[{"itemIdentifier": ""}]}
null の itemIdentifier 値に対する応答
return {"batchItemFailures":[{"itemIdentifier": None}]}
不正なキー名を持つ itemIdentifier 値に対する応答
return {"batchItemFailures":[{"bad_key": messageID}]}
存在しないメッセージ ID を含む itemIdentifier 値に対する応答
return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}
重要: Lambda 関数は、有効な itemIdentifier JSON 値を返す必要があります。
Lambda が部分的なメッセージバッチのいずれも再試行しない ReportBatchItemFailures をトラブルシューティングするには
Lambda 関数のコードで部分バッチ応答を確認し、次のような応答が含まれているどうか確認します。次に、記録された応答に基づいて問題を修正します。
注: 関数が次のいずれかの応答を返す場合、Lambda はバッチを完全な成功として扱います。
空の batchItemFailures リストに対する応答
return {"batchItemFailures":[]}
null の batchItemFailures リストに対する応答
return {"batchItemFailures": None}
空または予期しない JSON 値を持つ EventResponse に対する応答
return {}
return {"Key1":"Value1"}
null の EventResponse に対する応答
return
return None
重要: Lambda 関数は、有効なメッセージ ID のリストを含む**「batchItemFailures」** JSON 値を含む応答を返す必要があります。
関連情報
Amazon SQS メッセージが Lambda 関数を複数回呼び出さないようにするにはどうすればよいですか?