コンテンツにスキップ

SQS メッセージの Redrive (デッドレター再処理)

デッドレターキューからメッセージを受信し、元のキューに送信することで再処理をおこなうツールです。

全体の順序を揃えて再送信したい場合にも使用できるよう、受信と送信を分離しています。

制限

以下の条件でのみ使用できます。

  • メッセージに改行が含まれないこと。
  • 送信先キューは(FIFO でない)通常のキューであること。

手順

  1. 以下のスクリプトを用意する。

    - aws-sqs-recive.py - aws-sqs-send.py

  2. AWS SDK for Python (boto3) をインストールする。

    shell pip install boto3

  3. すべてのメッセージを読み出してテキストファイルに書き出す。

    shell aws-sqs-receive.py \ --queue-name (デッドレターキュー名) \ > messages.txt

    --delete オプションを指定すると、読み出したメッセージを削除します。 FIFO キューの場合は削除しないと次のメッセージを取り出すことができないため必須です。

    shell aws-sqs-receive.py --delete \ --queue-name (デッドレターキュー名) \ > messages.txt

  4. (必要に応じて) ソートする。

    例)

    shell sort messages.txt > messages-sorted.txt

  5. テキストファイルからメッセージを送信する。

    shell aws-sqs-send.py --wait (待ち時間(秒)) \ --queue-name (送信先のキュー名) \ < messages-sorted.txt