Amazon Simple Queue Service (Amazon SQS) キューからメッセージを削除しようとすると、receipthHandleisInvalid または invalidParameterValue エラーが表示されます。メッセージを正常に削除するにはどうすればよいですか?
簡単な説明
Amazon SQS キューからメッセージを受信するたびに、そのメッセージの受信ハンドルが届きます。ハンドルは、メッセージ自体ではなく、メッセージを受信するアクションに関連付けられます。メッセージを削除するには、受信ハンドルを提供する必要があります。
エラーメッセージは、FIFO キューと標準 SQS キューのどちらを使用するか、および受信ハンドルが正しくないか期限切れであるかによって異なります。
FIFO SQS キュー
受信ハンドルが正しくない場合は、次のようなエラーが表示されます。
DeleteMessage オペレーションを呼び出すときにエラーが発生しました (ReceiptHandleIsInvalid): 入力受信ハンドル 'YOUR RECEIPT HANDLE' は有効な受信ハンドルではありません。
FIFO キューの場合、受信ハンドルは可視性タイムアウト期間後に期限切れになります。受信ハンドルの有効期限が切れると、メッセージはキューに戻ります。メッセージを再度受信すると、新しい受信ハンドルを受け取ります。可視性タイムアウト期間外のメッセージを削除しようとすると、次のようなエラーが表示されます。
DeleteMessage オペレーションを呼び出すときにエラーが発生しました (InvalidParameterValue): パラメータ ReceiptHandle の値 'YOUR RECEIPT HANDLE' が無効です。理由: 受信ハンドルの有効期限が切れています。
標準 SQS キュー
受信ハンドルが正しくない場合は、次のようなエラーが表示されます。
DeleteMessage オペレーションを呼び出すときにエラーが発生しました (ReceiptHandleIsInvalid): 入力受信ハンドル 'YOUR RECEIPT HANDLE' は有効な受信ハンドルではありません。
標準キューの場合、古い受信ハンドルを使用できることがあります。ただし、DeleteMessage API コールには最新の受信ハンドルを使用するのがベストプラクティスです。古い受信ハンドルを使用すると、次のようなエラーが発生する可能性があります。
DeleteMessage オペレーションを呼び出すときにエラーが発生しました (InvalidParameterValue): パラメータ ReceiptHandle の値 'YOUR RECEIPT HANDLE' が無効です。理由: 受信ハンドルの有効期限が切れています。
解決方法
無効または期限切れの受信ハンドルエラーを防ぐには、正しい受信ハンドルを使用して SQS キュー可視性タイムアウト期間内にメッセージを削除する必要があります。
メッセージを複数回受信した場合は、最新の ReceiveMessage API コールレスポンスを確認して、ReceiptHandle の値を識別します。次に、DeleteMessage API を呼び出すときに、識別された ReceipthHandle 値を使用します。
関連情報
ReceiveMessage
DeleteMessage