Lambda 関数 SQS ReportBatchItemFailures をトラブルシューティングするにはどうすればよいですか?

所要時間1分
0

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 関数を複数回呼び出さないようにするにはどうすればよいですか?

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ