Amazon SQS キューに API 呼び出しを行う際の QueueDoesNotExist エラーのトラブルシューティング方法を教えてください。

所要時間2分
0

Amazon Simple Queue Service (Amazon SQS) キューに API 呼び出しを行うと、「QueueDoesNotExist」というエラーを受け取りました。

解決策

QueueDoesNotExis エラーは、GetQueueAttributesSendMessageDeleteMessage など、さまざまな Amazon SQS API 呼び出しによって発生する可能性があります。このエラーをトラブルシューティングするには、以下の手順に従ってください。

キュー URL が正しいことを確認する

リクエストで指定されたキュー URL が正しいこと、およびタイプミスがないことを確認します。

**重要:**送信先キュータイプが FIFO の場合は、キュー URL に接尾辞 .fifo を追加する必要があります。

正しいリージョンを設定する

間違った AWS リージョンにリクエストが行われると、QueueDoesNotExist エラーが発生します。SDK と AWS コマンドラインインターフェイス (AWS CLI) は、キュー URL から送信先リージョンを取得しません。代わりに、リージョンはクライアント設定によって設定されます。

API 呼び出しを行う前に、Amazon SQS クライアントでリージョンを正しく設定する必要があります。Amazon SQS クライアントの設定をチェックし、クライアントで正しいリージョンが設定されていることを確認します。リージョンがクライアントで設定されていない場合、SDK または AWS CLI は、設定ファイルまたは環境変数からリージョンを選択します。設定ファイルにリージョンが見つからない場合、SDK はリージョンをデフォルトで us-east-1 に設定します。

詳細については、「AWS リージョン」と「設定ファイルと認証情報ファイルの設定」を参照してください。

失敗した API 呼び出しがAWS CloudTrail でサポートされている場合は、AWS アカウントのすべてのリージョンで、失敗した Amazon SQS オペレーションを確認します。すべてのリージョンを確認することで、問題の原因がリージョンにあるかどうかを判断するのに役立ちます。

SDK または AWS CLI でデバッグログをアクティブ化することで、リクエストのリージョンを確認することもできます。デバッグログには、リクエストの送信先ホストが表示されます。例: ホスト: sqs.us-east-1.amazonaws.com.

その他のデバッグログリソースは次のとおりです。

**注:**リージョン、アカウント、またはキュー名を検証するには、キューの詳細をすべて記録してください。

最近削除されたキューを確認する

キューが最近削除された場合、QueueDoesNotExist エラーが表示されることがあります。失敗した API 呼び出しのタイムスタンプを特定し、エラー発生時の PurgeQueue オペレーションについて CloudTrail を確認します。メッセージ削除プロセスには最大 60 秒かかります。

このエラーは、キューが AWS CloudFormation またはその他のデプロイスタックの一部である場合に、キューの削除時にも発生する可能性があります。スタックを更新または削除すると、キューが削除されて、再作成される可能性があります。削除中に API 呼び出しがキューに対して行われた場合、リクエストが失敗することがあります。CloudTrail で、エラーが発生時に DeleteQueue オペレーションがあるかどうかを確認します。

GetQueueUrl を使用するときは、送信先キューアカウント番号を指定する

API 呼び出しでは、SDK または AWS CLI は通常、キュー URL から送信先キューアカウント番号を取得します。ただし、GetQueueURL API 呼び出しは、リクエストにキューの AWS アカウントを指定しないため、デフォルトでは、リクエストは発信者アカウントに対して行われます。

リクエストがクロスアカウントキューを対象としている場合は、API コール QueueOwnerAWSAccountId パラメータとして送信先キューのアカウント番号を指定する必要があります。

タイムアウトウィンドウ内で DLQ に移動されたメッセージを削除する

デッドレターキュー (DLQ) が設定されている標準 SQS キューの場合、メッセージは再試行後に DLQ に移動します。メッセージが DLQ に移動した後に、メインキューから古い ReceiptHandle を使用して DeleteMessage オペレーションを実行すると、QueueDoesNotExist エラーが発生することがあります。設定された VisibilityTimeout ウィンドウ内でメッセージを削除する必要があります。

リクエスタに必要な IAM 権限があることを確認する

リクエスト元の AWS Identity and Access Management (IAM) ユーザーまたはロールに必要な権限がない場合、次のエラーが表示されることがあります。 「The specified queue does not exist or you do not have access to it.」

GetCallerIdentity API 呼び出しを使用して、IAM エンティティに必要なアクセス権限があることを確認します。

Boto3 Python での GetCallerIdentity API 呼び出しの例:

import boto3
sts = boto3.client('sts')
print(sts.get_caller_identity())

Amazon SQS ポリシーの例については、「Amazon SQS ポリシーの基本的な例」を参照してください。

Amazon SQS アクセス権限の詳細については、「Amazon SQS キューにアクセスするにはどのようなアクセス権限が必要ですか?」を参照してください。

AWS サポートによるトラブルシューティング

前述のトラブルシューティング手順で問題が解決しない場合は、 AWS サポートにお問い合わせください。RequestIdtimestamp (タイムゾーン付き)を失敗した API 呼び出しに含めてください。

AWS公式
AWS公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ