📝

SNSとSQSのファンアウトをやってみた

2021/09/02に公開

AWS DVAの勉強をしていたら、SNSとSQSを連携した「ファンアウト」という構成を知り、公式にチュートリアルがあったのでやってみました。

動画

https://youtu.be/zV9iObXvYFM

ファンアウトについて

AWS Black Belt Online Seminar Amazon Simple Queue Serviceより

SNSを挟むことで、プロデューサーはSNSトピックにだけメッセージを配信すればよいので、実装も楽になります。

公式チュートリアルに沿ってやってみる

ファンアウトイベント通知を送信する方法
チュートリアルは大きく4つのステップになっています。

  1. SNSトピックを作成
  2. 2つのSQSキューを作成
  3. SNSからメッセージを配信
  4. 各キューでメッセージを確認

1. SNSトピックを作成

まずはSNSトピックを作成します。
SNSコンソールに移動します。

トピック名に「New-Orders」と入力し、「次のステップ」をクリックします。

デフォルト設定のまま、「トピックの作成」をクリックします。

これでSNSトピックの作成は完了です。

2. 2つのSQSキューを作成

続いて、
・Orders-for-Inventory
・Orders-for-Analytics
という2つのSQSキューを作成し、SNSトピックをサブスクライブします。

SQSコンソールに移動します。

「キューを作成」をクリックします。

名前に「Orders-for-Inventory」と入力します。

その他の設定はデフォルトのまま、「キューを作成」をクリックします。

「Orders-for-Inventory」というSQSキューができました。

続いて「Orders-for-Analytics」とうキューも同様の手順で作成します。

これでキューはできましたが、まだSNSと連携できていないので、各キューからSNSトピックをサブスクライブします。
キューを選択し、「アクション」から「Amazon SNSトピックにサブスクライブ」をクリックします。

作成しておいた「New-Orders」トピックを選択し、「保存」をクリックします。

これでSQSとSNSがつながりました。

もう1つのキューでも同様にSNSトピックをサブスクライブします。

これでSQSの作成と、SNSトピックのサブスクライブの設定は完了です。

3. SNSからメッセージを配信

それでは、実際にSNSからメッセージを配信してみます。
SNSコンソールで「New-Orders」トピックを選択し、「メッセージの発行」をクリックします。

件名に「Order 123-4567890-1234567」、
メッセージ本文に

1 x Widget @ $29.99 USD

2 x Widget Cables @ $4.99

と入力します。

その他設定はデフォルトのまま、「メッセージの発行」をクリックします。

これでSQSにメッセージが配信されたはずです。

4. 各キューでメッセージを確認

SNSから発行したメッセージがSQSキューに届いているか確認してみます。
キューの画面から「メッセージを送受信」をクリックします。

「メッセージをポーリング」をクリックします。

ポーリングが始まるので、完了まで待機します。

ポーリングが完了したら、受信したメッセージのIDをクリックします。

SNSからのメッセージであることが確認できます

もう1つのキューでも同様のメッセージが配信されているか確認します。
先ほどとは違うメッセージIDで受信しています。

メッセージの内容は同じです。

これで、1つのSNSトピックから2つのSQSキューにメッセージを送ることができました。
あとはコンシューマー側でキューからメッセージを取得して、任意の処理をするという流れになるかと思いますが、今回はここまでにします。

まとめ

今回はSNSとSQSのファンアウトをやってみました。
シンプルなチュートリアルで、設定自体は簡単だったのでぜひやってみてください。
参考になれば幸いです。

Discussion