「AWS Black Belt Online Seminar Amazon Simple Notification Service (SNS)」の自分向けメモ
SNS使ったことあるレベルの人向け
前提
背景
- 密結合の業務システム⇒疎結合のシステムにした場合
- キューを保持する機能が必要
- ポーリング処理の負荷が大きくなる
- 疎結合+ファンアウト(一括送信)とすることで分散処理構成でもポーリングは不要
pub-sub
- メッセージの発行者と購読者をトピックを間に挟んで分離できる
SNSの機能
Mobile Push(プッシュ通知)
- ユーザーに通知
- モバイルアプリが起動していなくても通知可能
pub-sub
-
分散アプリの統合に利用可能
-
構成要素は以下
- Topic Owner
- Topicの作成、管理者
- Subscriber
- Topicから任意のメッセージを受け取る購読者
- Publisher
- 任意のメッセージをTopicに送る発行者
- Topic Owner
-
SNS操作のAPIも用意されている
始め方
- Topic作成
- SubscriberがTopicに登録
- PublisherがTopicに送信
利用方法
アクセスコントロール
- Topicへのアクセス制限が可能
- デフォルトではTopic Ownerのみアクセス可能
フィルター
- Publisherが指定したメッセージ属性を基にSubscriberはメッセージを部分的に受信可能
- Filter Policyはホワイトリスト、ブラックリストどちらも可能
配信方法
- PublisherはSubscriberの購読プロトコルに合わせて、メッセージのカスタムが可能
- デフォルトは購読プロトコルに関わらず、同一メッセージ
リトライ
- Retry設定は4種類
- 購読プロトコルがHTTP/Sの場合、Subscriberは購読単位でJSON形式でRetry Policyを指定可能
- Topic OwnerはTopic単位でHTTP/SのRetry PolicyをJSON形式で指定可能
- SubscriberのRetry Policyを無効化する
プライベート発行
- VPCからプライベートにメッセージを発行する
- VPCエンドポイントからTopic発行
アプリケーション統合
CloudWatch Eventsからの発行
- 発行者にEventsが指定可能
Step Functionsからの発行
- Stateから発行可能
S3からの発行
- S3オブジェクト操作をトリガーにTopic発行が可能
- 通知が他処理のトリガー
SQS
- SQSに保持してポーリングすることで確実に処理する
- SNSと連携がとりやすい
Lambdaとの連携
- SNSより複雑な処理の実行が可能
- Lambdaを通じて、多くのAWSにファンアウトが可能
- 処理後の情報を後続トピックに発行することで高度なフィルターやメッセージカスタマイズが可能
配信ステータスロギング
- 成功時、失敗のログを確認可能
- 失敗時は配信できなかった購読者の確認が可能
- 試行回数も確認可能
Moblie Push(プッシュ通知)
- プッシュ通知を構成するならSNSではなくPinpoint推奨
価格
- Publish無料枠:100万件/月
- 以降、0.50USD/100万件
- Eメール無料枠:1000件/月
- 以降、2USD/10万件
- データ転送量はほぼ無料
- Lambda、SQSは無料
まとめ
- アーキテクチャの簡素化できる
- 簡単にファンアウトできる
- ワークロードをスケーラブルにできる