はじめに
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実行
1 2 3 4 |
$ <strong>aws sqs start-message-move-task --cli-input-json file://start-message-move-task.json</strong> { "TaskHandle": "eyJ0YXNrSWQiOiI4NTc4NjdmMy05YWEzLTQ2YWYtYTU2Yi0wYmYwZGI4ZmQwM2IiLCJzb3VyY2VBcm4iOiJhcm46YXdzOnNxczphcC1ub3J0aGVhc3QtMTo5NDY3NTU5NzcwNjA6dGVzdF9zcXNfZGxxIn0=" } |
start-message-move-task.json
1 2 3 4 |
{ "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からメッセージの移動を行った時のイベント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{ "eventVersion": "1.08", ・ ・ ・ "eventTime": "2023-08-30T08:03:41Z", "eventSource": "sqs.amazonaws.com", <strong>"eventName": "StartMessageMoveTask",</strong> "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再処理のイベント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
{ "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日以降に再度確認してみたいと思います。
アップデート情報等の日付が関連する情報は、英語と日本語の両方でしっかりと確認が必要と思いました。
投稿者プロフィール
-
2023/1にスカイアーチネットワークスにJoin
AWSを日々勉強中
最新の投稿
- AWS2024年8月20日LocalStackをつかってローカル環境でAWSサービスにアクセスしてみた
- AWS2024年4月4日AWS NeptuneにLambdaからアクセスしてみた
- セキュリティ2024年3月4日Amazon GuardDutyについてまとめてみました
- AWS2023年12月4日Amazon Redshift Streaming Ingestion をやってみた