SQS DLQ再処理をAPIで実行する

はじめに

AWS CLIで、SQS DLQ再処理をやってみました。

目次

概要

SQSに投入されたメッセージが正常に処理されなかった場合、DLQ(デッドレターキュー)に処理されなかったメッセージを移動することができます。
処理されなかったメッセージの原因調査の際に、DLQのメッセージを調査時の材料の一つとして使用します。

問題が解消したら、この処理されなかったメッセージの再処理を行います。

再処理の方法としては
マネジメントコンソールからDLQの再処理機能(元のキュー又は別のキューへメッセージを移動)を使用する。

これに加えて、2023年6月8日のアップデートで、AWS SDK や AWS CLI でもDLQの操作が可能になりました。

Amazon SQS が AWS SDK または CLI を介したデッドレターキューのリドライブのサポートを開始

  • DLQ(デッドレターキュー)とは

メッセージが処理できなかった場合に、再試行を繰り返した後にメッセージを格納するためのキュー
DLQに格納されたメッセージは、後で分析やデバッグのために使用できます。

試した環境

test_sqs_queue メッセージを格納するキュー
test_sqs_dlq test_sqs_queueのDLQ
test_sqs_reproc DLQの再処理でメッセージを移動する先
test_sqs_func test_sqs_queueのLambdaトリガーに設定している、メッセージを処理するけど失敗するLambda関数

手順

マネジメントコンソールでのDLQの再処理

test_sqs_queueにメッセージを送信し、メッセージの処理が失敗し、DLQにメッセージが移動されました。

DLQとして設定したキュー:test_sqs_dlqの画面から、「DLQ再処理の開始」をクリックします。

DLQにあるメッセージを元のキュー又は別のキューへメッセージを移動します。

「DLQ再処理」ボタンをクリックして、メッセージの移動



DLQの再処理が正常に完了しました!

再処理で指定した、移動先のキュー(test_sqs_reproc)にメッセージが移動されました。

AWS CLIからDLQの再処理を操作してみる

3 つの API が追加され、APIで DLQ 再処理タスクの操作が AWS SDK や CLI から可能になりました。

マネジメントコンソールのDLQの再処理と同様に、追加されたstart-message-move-taskを使って、DLQのメッセージ移動してみました。

AWS CLI実行

start-message-move-task.json

DLQからメッセージが移動されました。

CloudTrailで確認

CloudTrailからも移動できたことが確認できます。

イベント:start-message-move-taskは、CLIでDLQからメッセージの移動を行った時のイベント

イベント:CreateMovetaskは、マネジメントコンソールより、DLQ再処理のイベント

 

DLQ再処理イベント名の変更

2023年8月31日に、Amazon CloudTrail SQS コンソールのデッドレターキューリドライブのイベント名が変更されるとの案内がありましたが、日付が2023年10月15日に変更となっていました。

イベントを見てみましたが、2023年9月1日時点では、CreateMoveTaskのままでした。

デッドレターキュー再処理の CloudTrail イベントが修正されます。

以前のイベント名 新しいイベント名
CreateMoveTask StartMessageMoveTask
CancelMoveTask CancelMessageMoveTask

案内のページを英語版で確認すると、2023年10月15日から変更と表示されます。

CreateMoveTaskでイベントやアラームを設定している場合は、設定変更が必要となります。
日付の確認、設定変更のタイミングは確実に行いたいですね。

まとめ

新たにAPIが使えるようになり、これまでの複数のコマンドを組み合わせての再処理が、シンプルになりました。

イベント名の変更は、2023年10月15日以降に再度確認してみたいと思います。
アップデート情報等の日付が関連する情報は、英語と日本語の両方でしっかりと確認が必要と思いました。

投稿者プロフィール

YoshiSaaaan
2023/1にスカイアーチネットワークスにJoin
AWSを日々勉強中