Amazon Simple Notification Service

# Amazon Simple Notification Service

https://d1.awsstatic.com/webinars/jp/pdf/services/20190604_AWS-Blackbelt_AmazonSNS.pdf

## 概要

よくある複雑に絡み合った処理をほぐそうとすると以下のパターンが考えられる

  • 独立分散型+ポーリング
    • 複数の処理がポーリング
  • 独立分散型+ファンアウト
    • 保留されている部分から各処理へ一斉に送信
  • Amazon SNS
    • Message Topicの設定(publisher のデータが集積される場所)、操作、送信ができる
    • Publish-subscribe(pub-sub) はpush
    • 複数のプロトコルに対応
    • SQSはアプリ統合に特化しているが、SESは機能を利用して顧客に対して通知を送れたりする

 

## 機能

  • Mobile Push(プッシュ通知)
    • モバイルアプリが起動していなくても通知
    • プッシュ通知に利用
  • Pub-sub
    • 通知もできるが、分散アプリケーションの統合用途に用いられる
    • Subscriber
      • Lambda
      • SQS
      • HTTP/S
      • Email
      • Mobile
    • Publisher
      • CloudWatch Events
      • Step Functions
      • S3
  • Topic Owner
    • Topicは、Publisher がメッセージを送信し、Subscriber が通知を受信するための送信チャネルとして機能
  • Subscriber
    • 購読したいTopicを選び、購読を開始
    • Topicごとに、Filter Policy を設定できPublisherから配信されるメッセージをフィルタできる
  • Publisher
    • 発行したいTopicmessage を送信する
    • Sub側の購読プロトコルごとに、message をカスタマイズしてはっこうできる
    • Publisher としてStep Ructions CloudWatch Events などAWSサービスを指定することができる
  • 配信プロトコル
    • HTTP / HTTPS
    • Email
    • Email - JSON
    • Amazon SQS
    • AWS Lambda
    • Platform application endpoint: サポートされているプラットフォームにpush 通知する
    • SMS

 

## アクセスコントロール

  • Topic Owner Access Policyを通じて誰がTopicにアクセスできるか設定できる
  • Message Attributes を使用して、メッセージにメタデータを付与できる。Subscriber はこれを利用してフィルターして部分的に受信できる。

 

## リトライ

  • 直ちに配信される
  • 最初の試行で失敗した場合は、4段階のRetry Policy に従った処理がされる
    • 遅延なしのリトライ
    • 最小遅延間隔でのリトライ
    • バックオフモデルを利用したリトライ
    • 最大遅延間隔での再試行
  • 信頼性をより高めたい場合はSQSに配信されるようにする
    • SNS -> SQS -> lambda でポーリング
    • SNS SQS N:Nで連携

 

## プライベートな発行

Private subnet からVPCエンドポイントを利用して、Internet に出ずにSNSを利用できる

 

## 統合

  • Lamda を挟んでSNSでは対応していないプロトコルに対応できるようにする

 

## ロギング

  • ステータスロギング
    • 配信ステータス機能を使用することにより、成功率、失敗率に関する情報を収集できる
    • 対応プロトコル
      • AWS Lambda
      • Amazon SQS
      • HTTP/S
      • Platform application endpoint
    • Success sample rate の設定
      • 適切に設定できるとSuccess 用と Failure 用にログが分けられる

 

## mobile push

  • Amazon SNS
    • バイストークンを運用者が管理できる
    • SMSによる通知は単方向通知
  • Amazon Pinpoint
    • Push 通知を作るのであればこちらがおすすめ
    • バイストークンの管理をサービス側で行う
    • 分析ダッシュボードが標準
    • セグメントプッシュではプッシュ配信基盤が不必要
    • SMSの双方向通信が可能

 

## 雑感

あまりpub-sub を利用するケースが自分にはないが、mobile Push 通知をしたい場合はAmazon Pinpoint を利用すれば簡単にできることがわかった。これもSQSと同じで、システム同士の結合を緩やかにするためのアダプタに当たる部分をマネージドで行ってくれるサービスで、うまい使い所を考える必要がある。SQSはアプリ統合よりでSNSは汎用的なイメージ。