Amazon Simple Queue Service (Amazon SQS) キューからメッセージを削除しようとすると、「ReceiptHandlesInvalid」または「InvalidParameterValue」エラーが表示されます。
簡単な説明
Amazon SQS キューからメッセージを受信すると、FIFO (先入れ先出し) キューと標準キューでは、そのメッセージの受信ハンドルも受け取ります。受信ハンドルは、メッセージの表示を削除または変更するときに必要です。
受信ハンドルが正しくない場合、次の例のようなエラーが表示されます。
「DeleteMessage オペレーションを呼び出すときにエラーが発生しました (ReceiptHandleIsInvalid): 入力受信ハンドル 'YOUR RECEIPT HANDLE' は有効な受信ハンドルではありません。」
受信ハンドルの有効期限が切れていると、次の例のようなエラーが表示されます。
「DeleteMessage オペレーションを呼び出すときにエラーが発生しました (InvalidParameterValue): パラメータ ReceiptHandle の値 'YOUR RECEIPT HANDLE' が無効です。理由: 受信ハンドルの有効期限が切れています。」
受信ハンドルは、可視性タイムアウト期間が過ぎると期限切れになります。可視性タイムアウトの期限が切れると、メッセージはキューに返されます。コンシューマーからメッセージを再受信すると、新しい受信ハンドルを取得します。このエラーは、最新の受信ハンドルではなく古い受信ハンドルを使用したために発生します。
注: 標準の SQS キューを使用すると、古い受信ハンドルでもうまくいく可能性があります。ただし、DeleteMessage API コールには最新の受信ハンドルを使用することがベストプラクティスです。
解決方法
無効または期限切れの受信ハンドルエラーを防ぐには、正しい受信ハンドルを使用して SQS キュー可視性タイムアウト期間内にメッセージを削除する必要があります。
メッセージを複数回受信した場合は、最新の ReceiveMessage API コールレスポンスを確認して ReceiptHandle の値を特定します。次に、DeleteMessage API を呼び出すときに、識別された ReceiptHandle 値を使用します。
また、DeleteMessage API を呼び出すときに、次のエラーが表示される場合があります。
「DeleteMessage オペレーションを呼び出すときにエラーが発生しました (ReceiptHandleIsInvalid): 受信ハンドル "YOUR RECEIPT HANDLE" は、このキューでは無効です。」
このエラーは、別の SQS キューからの受信ハンドルを持つメッセージを削除しようとしたときに発生します。このエラーを防ぐには、メッセージがある SQS キューの正しい受信ハンドルを使用してください。
関連情報
Amazon SQS のベストプラクティス