

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS デッドレターキューと DLQ 再処理の問題のトラブルシューティング
<a name="troubleshooting-dlq-redrive"></a>

以下のトピックでは、Amazon SQS の DLQ および DLQ 再処理の問題に関する最も一般的な原因とトラブルシューティング方法を示します。詳細については、「*AWS 情報センターガイド*」の「[Amazon SQS DLQ 再処理の問題をトラブルシューティングする方法を教えてください](https://repost.aws/knowledge-center/sqs-dead-letter-queue-redrive)」を参照してください。

## DLQ の問題
<a name="troubleshooting-dlq-issues"></a>

DLQ の一般的な問題および解決方法について説明します。

### コンソールを使用してメッセージを表示すると、メッセージがデッドレターキューに移動される場合がある
<a name="sqs-dlq-console"></a>

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

この動作を調整するには、次のいずれかを実行します。
+ 対応するキューの再処理ポリシーで、**[最大受信数]** 設定の値を大きくします。
+ 対応するキューのメッセージをコンソールに表示しないようにします。

### デッドレターキューの `NumberOfMessagesSent` と `NumberOfMessagesReceived` が一致しない
<a name="sqs-dlq-number-of-messages"></a>

デッドレターキューに手動で送信したメッセージは、[`NumberOfMessagesSent`](sqs-available-cloudwatch-metrics.md) メトリクスによってキャプチャされます。ただし、処理の試行が失敗した結果としてデッドレターキューにメッセージが送信された場合は、このメトリクスによってキャプチャされません。したがって、`NumberOfMessagesSent` と [`NumberOfMessagesReceived`](sqs-available-cloudwatch-metrics.md) の値が異なることがあります。

### デッドレターキューの再処理の作成と設定
<a name="sqs-dlq-redrive-permissions"></a>

デッドレターキューの再処理では、Amazon SQS でデッドレターキューからメッセージを受信して送信先キューに送信するために、適切な[アクセス許可](sqs-configure-dead-letter-queue-redrive.md#sqs-configure-dead-letter-queue-redrive-permissions)を設定する必要があります。正しいアクセス許可がない場合、デッドレターキューの再処理タスクは失敗する可能性があります。メッセージの再処理タスクのステータスを確認することで、問題を修正して再試行できます。

### 標準キューおよび FIFO キューのメッセージエラー処理
<a name="sqs-dead-letter-queues-handling-message-failure"></a>

[**標準キュー**](standard-queues.md)は、[保持期間](sqs-dead-letter-queues.md#understanding-message-retention-periods)が期限切れになるまでメッセージを処理し続けます。この継続的な処理により、未消費のメッセージによってキューがブロックされる可能性が最小限に抑えられます。コンシューマーが多数のメッセージで繰り返し削除に失敗すると、コストが増加し、ハードウェアに余分な負荷がかかる場合があります。コストを抑えるには、失敗したメッセージをデッドレターキューに移動します。

標準キューは、多数のインフライトメッセージも許容します。メッセージの大部分が消費できず、デッドレターキューに送信されない場合、メッセージの処理速度が低下する可能性があります。キューの効率を維持するには、アプリケーションでメッセージ処理が正しく行われていることを確認してください。

[**FIFO キュー**](sqs-fifo-queues.md)は、メッセージグループからのメッセージを順番に消費することで、1 回のみ処理を行います。このため、キューをブロックするメッセージがあると、正常に処理されるか、デッドレターキューに移動されるまで、メッセージグループは使用できなくなります。ただし、コンシューマーは別のメッセージグループからの順序付けされたメッセージを引き続き取得できます。

さらに、FIFO キューが許容するインフライトメッセージの数が減ります。FIFO キューがメッセージによってブロックされないようにするには、アプリケーションでメッセージ処理が正しく行われていることを確認してください。

詳細については、「[Amazon SQS のメッセージキュー](quotas-messages.md)」および「[Amazon SQS のベストプラクティス](sqs-best-practices.md)」を参照してください。

## DLQ 再処理の問題
<a name="troubleshooting-dlq-redrive-issues"></a>

DLQ の一般的な再処理の問題および解決方法について説明します。

### AccessDenied アクセス許可の問題
<a name="accessdenied-permission-issue"></a>

 AWS Identity and Access Management (IAM) エンティティに必要なアクセス許可がないため、DLQ 再処理が失敗すると、`AccessDenied` エラーが発生します。

**エラーメッセージの例:** 

```
Failed to create redrive task. Error code: AccessDenied - Queue Permissions to Redrive.
```

DLQ 再処理リクエストを行うには、以下の API アクセス許可が必要です。

**メッセージの再処理を開始するには:**
+ デッドレターキューのアクセス許可:
  + `sqs:StartMessageMoveTask`
  + `sqs:ReceiveMessage`
  + `sqs:DeleteMessage`
  + `sqs:GetQueueAttributes`
  + `kms:Decrypt` – デッドレターキューまたは元のソースキューが暗号化されている場合。
+ 送信先キューのアクセス許可:
  + `sqs:SendMessage`
  + `kms:GenerateDataKey` – 送信先キューが暗号化されている場合。
  + `kms:Decrypt` – 送信先キューが暗号化されている場合。

**進行中のメッセージの再処理をキャンセルするには:**
+ デッドレターキューのアクセス許可:
  + `sqs:CancelMessageMoveTask`
  + `sqs:ReceiveMessage`
  + `sqs:DeleteMessage`
  + `sqs:GetQueueAttributes`
  + `kms:Decrypt` – デッドレターキューまたは元のソースキューが暗号化されている場合。

**メッセージの移動状況を表示するには:**
+ デッドレターキューのアクセス許可:
  + `sqs:ListMessageMoveTasks`
  + `sqs:GetQueueAttributes`

### `NonExistentQueue` エラー
<a name="nonexistentqueue-error"></a>

`NonExistentQueue` エラーは、Amazon SQS のソースキューが存在しないか、削除された場合に発生します。Amazon SQS キューが存在することを確認して再処理のために移動します。

**エラーメッセージの例:**

```
Failed: AWS.SimpleQueueService.NonExistentQueue
```

### CouldNotDetermineMessageSource エラー
<a name="couldnotdeterminemessagesource-error"></a>

以下のシナリオで DLQ 再処理を開始しようとすると `CouldNotDetermineMessageSource` エラーが発生します。
+ [`SendMessage`](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) API を使用して Amazon SQS メッセージが DLQ に直接送信されている場合。
+ DLQ が設定された Amazon Simple Notification Service (Amazon SNS) トピックまたは AWS Lambda 関数からのメッセージ。

このエラーを解決するには、再処理の開始時に **[再処理のためにカスタム送信先に移動]** を選択します。次に、Amazon SQS キューの ARN を入力して、DLQ のすべてのメッセージを送信先キューに移動します。

**エラーメッセージの例:**

```
Failed: CouldNotDetermineMessageSource
```