SQS メッセージの Redrive (デッドレター再処理)
デッドレターキューからメッセージを受信し、元のキューに送信することで再処理をおこなうツールです。
全体の順序を揃えて再送信したい場合にも使用できるよう、受信と送信を分離しています。
制限
以下の条件でのみ使用できます。
- メッセージに改行が含まれないこと。
- 送信先キューは(FIFO でない)通常のキューであること。
手順
-
以下のスクリプトを用意する。
-
AWS SDK for Python (boto3) をインストールする。
pip install boto3
-
すべてのメッセージを読み出してテキストファイルに書き出す。
aws-sqs-receive.py \
--queue-name (デッドレターキュー名) \
> messages.txt--delete
オプションを指定すると、読み出したメッセージを削除します。 FIFO キューの場合は削除しないと次のメッセージを取り出すことができないため必須です。aws-sqs-receive.py --delete \
--queue-name (デッドレターキュー名) \
> messages.txt -
(必要に応じて) ソートする。
例)
sort messages.txt > messages-sorted.txt
-
テキストファイルからメッセージを送信する。
aws-sqs-send.py --wait (待ち時間(秒)) \
--queue-name (送信先のキュー名) \
< messages-sorted.txt