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
- Mobile
- Publisher
- CloudWatch Events
- Step Functions
- S3
- Topic Owner
- Topicは、Publisher がメッセージを送信し、Subscriber が通知を受信するための送信チャネルとして機能
- Subscriber
- 購読したいTopicを選び、購読を開始
- Topicごとに、Filter Policy を設定できPublisherから配信されるメッセージをフィルタできる
- Publisher
- 発行したいTopicにmessage を送信する
- Sub側の購読プロトコルごとに、message をカスタマイズしてはっこうできる
- Publisher としてStep Ructions や CloudWatch Events などAWSサービスを指定することができる
- 配信プロトコル
## アクセスコントロール
- Topic Owner は Access Policyを通じて誰がTopicにアクセスできるか設定できる
- Message Attributes を使用して、メッセージにメタデータを付与できる。Subscriber はこれを利用してフィルターして部分的に受信できる。
## リトライ
- 直ちに配信される
- 最初の試行で失敗した場合は、4段階のRetry Policy に従った処理がされる
- 遅延なしのリトライ
- 最小遅延間隔でのリトライ
- バックオフモデルを利用したリトライ
- 最大遅延間隔での再試行
- 信頼性をより高めたい場合はSQSに配信されるようにする
## プライベートな発行
Private subnet からVPCエンドポイントを利用して、Internet に出ずにSNSを利用できる
## 統合
## ロギング
- ステータスロギング
## mobile push
## 雑感
あまりpub-sub を利用するケースが自分にはないが、mobile のPush 通知をしたい場合はAmazon Pinpoint を利用すれば簡単にできることがわかった。これもSQSと同じで、システム同士の結合を緩やかにするためのアダプタに当たる部分をマネージドで行ってくれるサービスで、うまい使い所を考える必要がある。SQSはアプリ統合よりでSNSは汎用的なイメージ。