Amazon SNS のアイコン

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) で理解を深められます。