SNSとSQSでファンアウト(Fanout)イベント通知を送信する

2021.03.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、yagiです。

本日は、「SNSとSQSでファンアウト(Fanout)イベント通知を送信する」内容について記載します。

以下の公式ドキュメントのチュートリアルにしたがって進めていきます。

Send Fanout Event Notifications

ファンアウト(Fanout)イベント通知とは?


このチュートリアルでは、Amazon Simple Notification Service (SNS) と Amazon Simple Queue Service (SQS) を使用してファンアウトメッセージングシナリオを実装します。このシナリオでは、メッセージが複数の受信者に "プッシュ" され、受信登録者によるメッセージの並列/非同期処理を可能にします。

(公式ドキュメントからの引用)

SNSで発行したメッセージをSQSで並列/非同期処理します。受信登録者が複数登録でき、エラーやリトライ処理も簡単になります。

設定してみる

Amazon SNS トピックを作成する


SNSのマネジメントコンソールから「次のステップ」を押下して、トピックの作成に遷移します。 FIFOとスタンダードがありますが、今回は「スタンダード」を選択し名前を入力します。

Amazon SQS キューを作成する


トピックをサブスクライブする Amazon SQS キューを作成します。

SQSのマネジメントコンソールから、「キューを作成」を押下します。 こちらもFIFOと標準(スタンダード)がありますが、今回は「標準」を選択し名前を入力します。設定やアクセスポリシーはデフォルトの内容で、「キューを作成」を押下します。

「キューを作成」を押下しもう1つのキューを作成します。

キューでトピックをサブスクライブする


作成した2つのキューで新しい通知をブロードキャストするAmazonSNSトピックをサブスクライブします。

メッセージをトピックに発行する


SNSのトピックからメッセージを発行します。

メッセージ件名、本文を入力します。TTLは空白のままとします。「メッセージの発行」を押下します。

これで、Amazon SNS から、トピックをサブスクライブしているすべてのエンドポイント(今回はAmazon SQS キュー)にメッセージが配信されました。

サブスクリプションを確認する


トピックからキューに送信されたメッセージを表示して、キューで新しい通知を受け取ったことを確認します。

SQSのキューの一覧から「Orders-for-Inventory」を選択して「メッセージ送受信」を押下します。

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

ポーリングの進行状況に緑のチェックがついたことを確認します。受信したメッセージを選択して内容を表示します。なお受信したメッセージは削除しておきます。(削除しないと再受信してしまいます)

もう一度SNSからメッセージを発行します。もう一方のキューからも同様にポーリングして、メッセージを受信し内容を表示します。

結論


SNSとSQSでファンアウト(Fanout)イベント通知を送信する内容について、AWS公式から簡単なチュートリアルを実施し確認しました。 今回はSNSで発行したメッセージをSQSのキューでそれぞれ受信して確認する簡単な内容を実施しましたが、実際はSQSで受信した内容をEC2など別のリソースに渡して処理する(処理と処理の間にこのFanoutをはさむ)ことで、疎結合な構成を作ることが可能となります。

参考リンク


SNSとSQSの詳細については以下をご参照ください。

What is Amazon SNS?

What is Amazon Simple Queue Service?