SNSとSQSでファンアウト(Fanout)イベント通知を送信する
こんにちは、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の詳細については以下をご参照ください。