[アップデート] Amazon SNS も SQS フェアキューへのメッセージ配信をサポートし、メッセージグループ ID を設定できるようになりました
いわさです。
先月のアップデートになりますが、Amazon SQS にフェアキューという機能が追加されました。
この機能を使うと標準キューでメッセージグループ ID を使ってパフォーマンス上のテナント分離を実現できます。
この機能の前提条件としてキューに発行するメッセージにメッセージグループ ID を指定する必要があるのですが、Amazon SNS の標準トピックから SQS 標準キューにメッセージ送信する際にメッセージ ID を指定することがこれまでは出来ませんでした。
そのため、Amazon SQS でフェアキューが実装されても SNS → SQS という構成を取っている場合に機能させることができなかったのですが、先日のアップデートで Amazon SNS 側でもこれに対応できるようになりました。
具体的には、Amazon SNS の標準トピックでも、メッセージ発行時にメッセージグループ ID を指定できるようになっています。
そしてトピックに SQS 標準キューサブスクリプションへはこのメッセージグループ ID を転送できるようになっています。
今回このオプションを使ってサブスクリプションにどのようにメッセージが転送されるのか、簡単な検証をしてみたので紹介します。
SQS と HTTPS で検証
今回次のように HTTPS と SQS のサブスクリプションを対象トピックに作成しました。
SQS キューは標準キューを使っています。HTTPS は今回は webhook.site を使わせてもらいました。
検証方法は簡単で、次のようにメッセージグループ ID を指定します。
そしてそれぞれのサブスクリプションで受信するメッセージ内容を確認します。メッセージグループ ID が転送されていれば、あとは標準キューでフェアキュー機能が有効化されるのでうまくテナントごとに処理優先度の分離をしてくれるというかたちです。
SQS 標準キューの受信メッセージを確認してみましょう。
次のようにメッセージグループ ID が転送されていることが確認できました。
Webhook の方は次のような形でメッセージグループ ID で指定した内容は特に転送されていませんでした。コンソールに記載されているように標準の SQS キューサブスクリプションのみ伝達されるという仕様どおりの挙動です。
なお、メッセージグループ ID はオプションなのでもちろん指定しないことも出来ます。
その場合は次のように SQS キュー側にも特に値は渡されないので通常のキューの動きをしてくれます。
さいごに
本日は Amazon SNS も SQS フェアキューへのメッセージ配信をサポートし、メッセージグループ ID を設定できるようになったので使ってみました。
ノイジーネイバーを分離するフェアキュー自体は SQS 側で実装されているので、今回のアップデートは Amazon SNS 標準トピック側でもメッセージグループ ID を使えるようになったというだけではありますね。
アプリケーションから SQS キュー直接ではなく SNS トピックを挟むケースは非常に多いと思いますが、その際にも SQS フェアキューの恩恵を受けることができるようになるアップデートでした。特にマルチテナント SaaS などでは有効だと思うので使ってみてください。