SNS

【VPC外リージョンサービス】

SNS(Amazon Simple Notification Service)は、Pub/Subモデル(Publish/Subscribe) に基づく通知サービスです。

Topic(トピック)Message(メッセージ) を発行すると、Subscription(サブスクリプション) に登録された複数のエンドポイントへ自動的にファンアウト(配信)されます。対応する配信先には、HTTP/HTTPS、SQS(Simple Queue Service)、Lambda、Email 、SMS(Short Message Service)、 Application (mobile push) などがあります。

Message Filtering(メッセージフィルタリング) により、属性ベースで特定の条件に合致するメッセージのみを購読者に配信することができます。さらに、配信に失敗したメッセージを保持して後処理できる DLQ(Dead-Letter Queue) 機能も提供されています。

SNSはメッセージの暗号化(Encryption)や VPCエンドポイント を利用したセキュアな運用が可能であり、信頼性と可用性の高い通知基盤として多くのシステムで利用されています。

イベント駆動アーキテクチャの中心的な役割を担い、マイクロサービス間通信やアラート通知、リアルタイム連携など、幅広いユースケースで活用されています。

重要用語

関連サービス

ユースケース

Pub/Subによるイベントファンアウト注文完了やユーザー登録などのイベントをSNSトピックに発行し、複数のシステム(Lambda、SQS、HTTPエンドポイント)がそれぞれ購読して別々の処理を行う。
マイクロサービス間の疎結合通知あるサービス内で発生した出来事をSNSで通知し、他のサービスは通知を受け取ったときだけ処理を行うことで、直接の依存関係を減らす。
メール・モバイル通知の中継基盤アプリケーションからの重要なお知らせやアラートをSNSトピックに送信し、メールやモバイルプッシュ通知へ配信する。

ベストプラクティス

サブスクリプションフィルタポリシー不要なメッセージ配信を減らすために属性ベースのフィルタを設定する。
暗号化の有効化KMSと連携してトピックメッセージをサーバーサイドで暗号化する。
再試行ポリシーの調整エンドポイントの特性に合わせて再試行回数や間隔を設定する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・メッセージ配信エンジン
 ・トピック定義・メタデータ
 ・サブスクリプション情報
 ・メッセージの一時保存
 ・配信ステータス管理
 ・フィルタリングエンジン
【自動リトライ】デフォルト
 配信先ごとに自動リトライ機能がある
  HTTP / HTTPS(初回失敗後、最大 3 回、各 20 秒間隔:DeliveryPolicy で細かく指定可能)
  SQS / Lambda(合計 100,015 回、最長 23 日間リトライ:変更不可)
  SMS / モバイルプッシュ / Email(合計 50 回、6 時間以上かけてリトライ:変更不可)

セキュリティ

関連サービス設定内容
KMS(データの暗号化と鍵の安全管理)【トピックのメッセージの暗号化が必要】
 独自KMSキーを使うことを推奨(鍵操作、監査)
Secrets Manager(機密情報の安全管理)-
SSM Parameter Store(設定情報の一元管理)-
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
トピック設定変更履歴・暗号化/ポリシー公開の準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
トピック削除やサブスクリプション変更のAPI異常検知

リソースベースポリシーによる補完

実行ロールで不足する権限をSNS のリソースベースポリシーで補うパターン
リソースベースポリシーのPrincipalリソースベースポリシーのAction
【S3】
s3.amazonaws.com
sns:Publish
【CloudWatch】
cloudwatch.amazonaws.com
sns:Publish
【RDS】
rds.amazonaws.com
sns:Publish
【ElastiCache】
elasticache.amazonaws.com
sns:Publish
【Backup】
backup.amazonaws.com
sns:Publish
※)権限設計の原則

ログ・監視

ログ出力先ログの種類
CloudWatch Logs配信ステータスログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
NumberOfMessagesPublished発行されたメッセージ数
NumberOfNotificationsFilteredOutフィルタリングで破棄された通知数
PublishSizeパブリッシュされたメッセージサイズ合計
HTTPFailureHTTPエンドポイントへの失敗通知数
HTTPSuccessHTTPエンドポイントへの成功通知数
NumberOfNotificationsDelivered配信成功通知数
NumberOfNotificationsFailed配信失敗通知数
NumberOfNotificationsFilteredOutInvalidAttributes無効属性によるフィルタ数
NumberOfNotificationsRedrivenToDLQDLQへ再投入された通知数
SMSMonthToDateSpentUSDSMS課金額(月累計)

制限値(固定値/ハードリミット/ソフトリミット)

ハードリミット制限値
メッセージサイズ最大256 KB
SMSメッセージの長さ140 Bytes(GSM-7)、70文字(UCS-2)
フィルターポリシーのサイズ256 KB
メッセージ属性数10

ソフトリミット制限値
トピック数/アカウント100,000
サブスクリプション数/トピック12,500,000
公開スループット30,000メッセージ/秒

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
リクエスト数Publish APIリクエスト数
通知配信配信先プロトコル別の配信数
(HTTP、Email、SMSなど)
データ転送インターネットへのデータ転送
料金計算ツール

公式ページ

AWSドキュメント SNS