Amazon SNS
メッセージを複数の受信者に同時配信できるフルマネージドの通知サービス
何ができるか
Amazon SNS (Simple Notification Service) は、メッセージを複数の受信者 (サブスクライバー) に同時に配信するフルマネージドの Pub/Sub (発行/購読) メッセージングサービスです。1 つのメッセージを発行するだけで、メール、SMS、HTTP エンドポイント、SQS キュー、Lambda 関数など、複数の配信先に同時に届けられます。毎秒数百万のメッセージを処理できるスケーラビリティを持ちます。
どのような場面で使うか
システムアラートのメール通知、モバイルプッシュ通知、マイクロサービス間のイベント通知、ファンアウトパターン (1 つのイベントを複数のサービスに配信)、SMS による二要素認証コードの送信、CloudWatch アラームの通知先など、通知やイベント配信が必要な場面で利用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
校内放送に例えるとわかりやすいでしょう。校内放送 (SNS トピック) でアナウンスすると、教室にいる全生徒 (サブスクライバー) に同時にメッセージが届きます。特定の学年だけに放送する (フィルタリング) こともできます。放送する人は、誰が聞いているかを個別に管理する必要がありません。
SNS とは
Amazon Simple Notification Service (SNS) は、Pub/Sub (発行/購読) モデルに基づくメッセージングサービスです。メッセージの発行者 (パブリッシャー) はトピックにメッセージを送信し、そのトピックを購読 (サブスクライブ) しているすべての受信者にメッセージが配信されます。SQS が 1 対 1 のメッセージングであるのに対し、SNS は 1 対多のメッセージングを実現します。
トピックの種類
SNS には 2 種類のトピックがあります。標準トピックは、ほぼ無制限のスループットを提供し、ベストエフォートの順序でメッセージを配信します。FIFO トピックは、メッセージの順序を保証し、重複配信を防止します。FIFO トピックは SQS FIFO キューとの組み合わせで使用し、厳密な順序保証が必要なユースケースに適しています。
ファンアウトパターン
SNS と SQS を組み合わせたファンアウトパターンは、よく使われるアーキテクチャです。たとえば、EC サイトで注文が確定した際、SNS トピックに注文イベントを発行すると、在庫管理用の SQS キュー、メール通知用の SQS キュー、分析用の SQS キューにそれぞれメッセージが配信されます。各サービスは独立して処理を進められるため、システム全体の疎結合性と耐障害性が向上します。
はじめかた
SNS を使い始めるには、SNS コンソールで「トピックの作成」をクリックします。トピックを作成したら、サブスクリプションを追加して配信先 (メールアドレス、SQS キュー、Lambda 関数など) を設定します。メールの場合は確認メールが届くので、リンクをクリックして購読を承認します。AWS SDK やコンソールからトピックにメッセージを発行すれば、すべてのサブスクライバーに配信されます。
注意点
- SMS 送信は国や地域によって料金が大きく異なるため、コストを事前に確認すること
- メール通知はサブスクライバーの確認 (オプトイン) が必要なため、自動化する際は確認フローを考慮すること
- 無料利用枠として月間 100 万件の SNS リクエストが永続的に提供される
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。