Amazon SNS
Pub/Sub 型のフルマネージドメッセージングサービスで、1 つのメッセージを複数のサブスクライバーに同時配信し、ファンアウトパターンを実現する
概要
Amazon SNS (Simple Notification Service) は、パブリッシュ/サブスクライブ (Pub/Sub) モデルのフルマネージドメッセージングサービスです。パブリッシャーがトピックにメッセージを発行すると、そのトピックをサブスクライブしているすべてのエンドポイント (Lambda、SQS、HTTP/S、メール、SMS、モバイルプッシュ) にメッセージが同時配信されます。1 つのトピックに最大 1,250 万のサブスクリプションを設定でき、アカウントあたり最大 10 万トピックを作成できます。標準トピックは秒間ほぼ無制限のスループットを提供し、FIFO トピックは順序保証と重複排除を提供します。
ファンアウトパターン - 1 対多の配信
SNS の最も強力な機能はファンアウトパターンです。1 つのイベント (たとえば注文の確定) を SNS トピックに発行すると、在庫管理システム、決済システム、通知システム、分析システムなど、複数のサブスクライバーに同時に配信されます。各サブスクライバーは独立して処理を行うため、1 つのシステムの障害が他のシステムに影響しません。SNS + SQS のファンアウトパターンは特に強力です。SNS トピックに複数の SQS キューをサブスクライブし、各キューの背後にコンシューマーを配置します。SNS がメッセージを各キューに配信し、各コンシューマーが独立したペースで処理します。あるコンシューマーが遅延しても、他のコンシューマーには影響しません。
メッセージフィルタリングとコスト
SNS のメッセージフィルタリングポリシーを使用すると、サブスクライバーごとに受信するメッセージを絞り込めます。メッセージ属性に基づいてフィルタリングルールを設定し、条件に一致するメッセージだけがサブスクライバーに配信されます。フィルタリングなしでは、すべてのサブスクライバーがすべてのメッセージを受信し、不要なメッセージをアプリケーション側で破棄する必要がありました。SNS の料金は、API リクエスト数とデータ転送量に基づきます。最初の 100 万リクエスト/月は無料で、以降は 100 万リクエストあたり 0.50 USD です。SQS や Lambda へのメッセージ配信は無料ですが、SMS やモバイルプッシュへの配信は別途料金がかかります。Azure の対応サービスは Azure Service Bus のトピック機能や Azure Event Grid で、同様の Pub/Sub パターンを実現できます。
実務での活用パターン
SNS は CloudWatch アラームの通知先として最も広く使われています。CPU 使用率が閾値を超えた場合やエラー率が上昇した場合に、SNS トピック経由でメールや Slack (Lambda 経由) に通知を送信します。EventBridge と組み合わせれば、AWS サービスのイベント (EC2 インスタンスの状態変化、CodePipeline のデプロイ結果など) をリアルタイムで通知できます。モバイルアプリケーションでは、SNS のモバイルプッシュ通知機能で iOS (APNs) と Android (FCM) の両方にプッシュ通知を送信できます。SNS の基礎から応用まで、書籍 (Amazon)で体系的に学べます。