Amazon SNS による通知設計 - トピックとサブスクリプションのパターン
SNS のトピック設計、サブスクリプションフィルター、メッセージ配信の信頼性確保パターンを解説します。
トピック設計とサブスクリプション
SNS トピックは Standard と FIFO の 2 種類があります。Standard トピックはほぼ無制限のスループットを提供し、メッセージの順序はベストエフォートです。FIFO トピックはメッセージグループ ID ごとの厳密な順序保証と、メッセージ重複排除 ID による重複排除を提供します。FIFO トピックのサブスクライバーは SQS FIFO キューに限定されます。サブスクリプションプロトコルは SQS、Lambda、HTTP/HTTPS、メール、SMS、Kinesis Data Firehose に対応しています。メッセージ属性を付与することで、サブスクリプションフィルターポリシーによる条件付きルーティングが可能になります。
配信の信頼性とファンアウト
SNS + SQS ファンアウトパターンでは、SNS トピックに複数の SQS キューをサブスクライブし、1 つのパブリッシュで全キューにメッセージを配信します。各キューのコンシューマーは独立して処理を進められるため、1 つのコンシューマーの障害が他に影響しません。配信失敗時のリトライポリシーはプロトコルごとに異なり、HTTP/HTTPS エンドポイントでは指数バックオフでリトライします。リトライ後も配信できないメッセージはデッドレターキュー (SQS キュー) に送信され、後から原因調査や再処理が可能です。メッセージアーカイブを有効にすると、過去のメッセージを保存し、新しいサブスクライバーに再配信できます。
まとめ
SNS はトピックベースの Pub/Sub メッセージングで、ファンアウトパターンとサブスクリプションフィルターによる柔軟な通知設計を実現します。DLQ による配信失敗の捕捉とメッセージアーカイブで、信頼性の高いメッセージング基盤を構築できます。
AWS の優位点
- Standard トピックはベストエフォートの順序で高スループットを提供し、FIFO トピックはメッセージの順序保証と厳密な重複排除を提供する
- サブスクリプションフィルターポリシーでメッセージ属性に基づくルーティングを行い、サブスクライバーが必要なメッセージのみを受信できる
- SNS + SQS ファンアウトパターンで 1 つのメッセージを複数のコンシューマーに並行配信し、各コンシューマーが独立して処理できる
- デッドレターキュー (DLQ) で配信失敗メッセージを捕捉し、再処理やアラート通知に活用できる
- メッセージのアーカイブと再配信で、過去のメッセージを新しいサブスクライバーに再送できる
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。