[アップデート] Amazon SQS DLQ のリドライブ送信先に FIFO タイプのキューが指定できるようになりました! #AWSreinvent

2023.11.28

こんにちは、CX 事業本部のヒョンジェです。

2023/11/27 より Amazon SQS の DLQ(Dead-Letter Queue) のリドライブ送信先を FIFO(First In, First Out) タイプキューにも指定できるようになりましたので、その概要の共有と実際試してみたいと思います。

アップデート概要

SQS のキューでメッセージ処理に失敗した場合、処理をリトライし、すべで失敗したら DLQ にそのメッセージを送信するように設定することができます。こうすることで、処理に失敗しているメッセージを既存のキューから除外して、何が原因でメッセージ処理に失敗しているか調査することができます。

問題の調査・解消ができて、そのメッセージをまた処理したい場合は、DLQ からリドライブして既存のソースキューや他のキューにメッセージを入れることができます。今まではこのリドライブの送信先をスタンダードタイプのキューにしか指定できませんでしたが、アップデートにより FIFO タイプのキューにも指定できるようになりました。

試してみた

実際、FIFO タイプのキューを送信先としてリドライブをしてみます。

1. DLQ 作成

マネジメントコンソールから DLQ 用のキューを一つ作成します。DLQ のタイプとリドライブする送信先のキューのタイプは一致している必要があるので、DLQ のタイプは FIFO に設定します。

2. ソースキュー作成

普段メッセージを処理するソースキューを作成します。DLQ キューと同じく FIFO タイプに設定して作成します。

作成時は DLQ の設定をします。最大受信数は 3 にしておきます。

ここまですると、一つのメッセージを 3 回以上受信したら、DLQ にメッセージが送信されるようになります。

3. ソースキューにメッセージを入れる

後で DLQ に送信するメッセージをまず、ソースキューに入れます。コンソールから入れるか以下の CLI コマンドを叩いて入れます。

aws sqs send-message --queue-url ${QUEUE URL} --message-body  "テスト" --message-group-id group1 --message-deduplication-id group2

4. ソースキューのメッセージを受信する

ソースキューに入れたメッセージを DLQ に送信するために、ソースキューから該当のメッセージを最大受信数の 3 回受信します。メッセージの受信は以下の CLI コマンドで行います。可視性タイムアウトがデフォルトで 30 秒になっているので、1 回受信してから 30 秒後にまた受信するようにします。

aws sqs receive-message --queue-url ${QUEUE URL}

CLI コマンドを 4 回叩いてら、ソースキューから該当のメッセージが消えていることがわかります。そして、コンソールからもメッセージがソースキューから DLQ に送信されたのが確認できます。

5. DLQ からリドライブする

では、最後に DLQ から FIFO タイプのソースキューにリドライブをします。

コンソールからリドライブの送信先をソースキューに設定して、リドライブを実行します(他のカスタムキューを設定することもできます)。メッセージが一個しかないので、すぐリドライブに成功します。

CLI コマンドでソースキューのメッセージを受信すると、該当のメッセージが受信されることが確認できます。

最後に

DLQ のリドライブ送信先に FIFO タイプのキューが設定できるようにアップデートされたので、試してみました。リドライブ機能は DLQ のメッセージをまた他のキューに入れて処理を行うときにとても有用ですが、スタンダード、FIFO 両方のタイプのキューを送信先として設定できるようになることで、もっとその活用が広がると思いました。