Amazon SQS のメッセージをコンソールで表示しただけで、デッドレターキューに移りました。原因を教えてください

Amazon SQS のメッセージをコンソールで表示しただけで、デッドレターキューに移りました。原因を教えてください

Amazon SQSのマネジメントコンソールでメッセージを表示しただけなのに、デッドレターキューに移ってしまう現象についての原因と対策をまとめました。
2026.11.01

困っていること

Amazon Simple Queue Service(Amazon SQS)のキューに入っているメッセージの中身を確認しようとして、マネジメントコンソールの「メッセージを送受信」画面で「メッセージをポーリング」を何度か押しました。
その後、アプリケーションが処理する前に、メッセージがデッドレターキュー(DLQ)に移っていました。
表示しただけで DLQ に移った理由を知りたいです。

どう対応すればいいの?

コンソールでメッセージを表示(ポーリング)すると、その表示も 1 回の受信として、受信回数に数えられます。受信回数が最大受信数(maxReceiveCount)に達した後、次の受信のときに、メッセージは DLQ に移ります。表示しただけでも、アプリケーションが受信したのと同じように数えられるということです。

次の対策を行ってください。

  1. 本番のキューでは、コンソールでメッセージをポーリングしません。表示の動きを試したいときは、検証用のキューで試します。
  2. 件数だけを知りたいときは、メッセージを受信せずに、キューの属性で確かめます。コンソールなら、キューの一覧の「利用可能なメッセージ」「処理中のメッセージ」です。API なら、GetQueueAttributes で ApproximateNumberOfMessages と ApproximateNumberOfMessagesNotVisible を取得します。属性の取得では、受信回数は増えません。
  3. 本番のキューでどうしても中身を表示したいときは、表示で増える分を見込んで、最大受信数を大きくしておきます。キューの詳細ページの「デッドレターキュー」タブの「編集」から変えられます。
  4. DLQ に移ってしまったメッセージは、DLQ の再処理(リドライブ)で、元のキューに戻せます(今回は試していません)。

表示が受信回数に数えられる理由

SQS は、コンソールでの表示を、再処理ポリシー(最大受信数)の受信回数として数えます。

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/troubleshooting-dlq-redrive.html#sqs-dlq-console

Amazon SQS は、コンソールでのメッセージの表示回数を、対応するキューの再処理ポリシーに従ってカウントします。このため、コンソールでのメッセージの表示回数が、対応するキューの再処理ポリシーに指定された回数に達すると、メッセージは対応するキューのデッドレターキューに移動されます。

この動作を調整するには、次のいずれかを実行します。

対応するキューの再処理ポリシーで、[最大受信数] 設定の値を大きくします。

対応するキューのメッセージをコンソールに表示しないようにします。

「処理中のメッセージ」では、表示した回数は分からない

API の receive-message で受信したメッセージは、可視性タイムアウト(デフォルトは 30 秒)の間、ほかの受信には返らなくなり、「処理中のメッセージ」に数えられます。一方、コンソールで取得したメッセージは、表示されたままになります。

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html

Amazon SQS コンソールを使用して取得したメッセージが再取得のために表示されたままになります。

そのため、「処理中のメッセージ」の数を見ても、コンソールで何回表示したかは分かりません。表示した後に処理中の数が増えていなくても、受信回数は増えている場合があるので、注意してください。

確認してみた

最大受信数を 2 にしたキュー(東京リージョン)に、メッセージを 1 通入れて、AWS CLI の receive-message を 3 回実行しました。最大受信数は、キューの詳細ページの「デッドレターキュー」タブで確かめました。

01

受信 実行した時点 可視性タイムアウト 受信回数 そのほか
1 回目 メッセージを入れた後 120 秒 1 直後の GetQueueAttributes で、利用可能 0・処理中 1
2 回目 可視性タイムアウトが過ぎた後 5 秒 2 —
3 回目 その 5 秒が過ぎた後 — メッセージが返らない DLQ の件数が 1

受信回数(ApproximateReceiveCount)は 1、2 と増え、最大受信数の 2 に達した後の 3 回目の受信では、メッセージは返らずに DLQ に移りました。途中で属性を取得していますが、受信回数は 1 から 2 へ 1 つだけ増えていて、属性の取得では増えていません。

02

API で受信した直後は、コンソールのキューの一覧でも、「処理中のメッセージ」が 1 になりました。次の画面は、同じ設定のキューを作り直し、1 回受信した直後のものです。

03

参考資料


AWSテクニカルサポートノートについて

過去にクラスメソッドのAWS総合支援サービスで頂いたお問合せの中から、通常のAWS利用時でも有益になりうる情報をテクニカルサポートチームがTIPSとしてご紹介しています。技術サポートは、無料でご提供しております。詳細は下記ボタンからご覧ください。

クラスメソッドのAWSサポートの詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事