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実行

$ aws sqs start-message-move-task --cli-input-json file://start-message-move-task.json
{
"TaskHandle": "eyJ0YXNrSWQiOiI4NTc4NjdmMy05YWEzLTQ2YWYtYTU2Yi0wYmYwZGI4ZmQwM2IiLCJzb3VyY2VBcm4iOiJhcm46YXdzOnNxczphcC1ub3J0aGVhc3QtMTo5NDY3NTU5NzcwNjA6dGVzdF9zcXNfZGxxIn0="
}

start-message-move-task.json

{
"SourceArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_dlq",
"DestinationArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_reproc"
}

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

CloudTrailで確認

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

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

{
"eventVersion": "1.08",
・
・
・
"eventTime": "2023-08-30T08:03:41Z",
"eventSource": "sqs.amazonaws.com",
"eventName": "StartMessageMoveTask",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "99.99.99.99",
"userAgent": "aws-cli/1.29.37 md/Botocore#1.31.37 ua/2.0 os/linux#5.15.90.1-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.10.6 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.37",
"requestParameters": {
"sourceArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_dlq",
"destinationArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_reproc"
},
"responseElements": {
"taskHandle": "eyJ0YXNrSWQiOiI4NTc4NjdmMy05YWEzLTQ2YWYtYTU2Yi0wYmYwZGI4ZmQwM2IiLCJzb3VyY2VBcm4iOiJhcm46YXdzOnNxczphcC1ub3J0aGVhc3QtMTo5NDY3NTU5NzcwNjA6dGVzdF9zcXNfZGxxIn0="
},
"requestID": "bcccc522-69f6-5cee-b7c1-984a93ebd195",
"eventID": "8f436212-35b7-4f65-8824-131ddb2c40ea",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111222333444",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.2",
"cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
"clientProvidedHostHeader": "ap-northeast-1.queue.amazonaws.com"
}
}

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

{
"eventVersion": "1.08",
・
・
・
"eventTime": "2023-08-30T07:43:42Z",
"eventSource": "sqs.amazonaws.com",
"eventName": "CreateMoveTask",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "99.99.99.99",
"userAgent": "AWS Internal",
"requestParameters": {
"taskName": "de40aeea-207c-4aa7-8fa2-af28e3d73ace",
"sourceArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_dlq",
"destinationArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_reproc"
},
"responseElements": {
"status": "RUNNING",
"approximateNumberOfMessagesMoved": 0,
"createTime": 1693381422874,
"taskHandle": "eyJ0YXNrSWQiOiJkZTQwYWVlYS0yMDdjLTRhYTctOGZhMi1hZjI4ZTNkNzNhY2UiLCJzb3VyY2VBcm4iOiJhcm46YXdzOnNxczphcC1ub3J0aGVhc3QtMTo5NDY3NTU5NzcwNjA6dGVzdF9zcXNfZGxxIn0=",
"taskName": "de40aeea-207c-4aa7-8fa2-af28e3d73ace",
"sourceArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_dlq",
"destinationArn": "arn:aws:sqs:ap-northeast-1:111222333444:test_sqs_reproc"
},
"requestID": "923a0573-3e27-5100-9f11-581bcb498eec",
"eventID": "23897df3-2380-4599-b8e8-c5186f2807d9",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111222333444",
"eventCategory": "Management",
"sessionCredentialFromConsole": "true"
}

 

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を日々勉強中

ABOUTこの記事をかいた人

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