AWS再入門ブログリレー2022 Amazon SNS編

弊社コンサルティング部による『AWS再入門ブログリレー 2022』の28日目のエントリ『Amazon SNS』です。ユースケースや設計・構築時の注意点を中心にまとめてみました!
2022.03.14

こんにちは!コンサル部のinomaso(@inomasosan)です。

当エントリは弊社コンサルティング部による『AWS再入門ブログリレー 2022』の28日目のエントリです。

このブログリレーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2022年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。28日目のテーマは『Amazon SNS』です。

Amazon SNSとは?

Amazon Simple Notification Service (Amazon SNS)は、フルマネージド型メッセージングサービスです。
HTTPSやEmail等のマルチプロトコルに対応しており、Application-to-Application (A2A)Application-to-Person(A2P)の様々なエンドポイントへメッセージの通知・連携が可能となります。

AWSにおけるPublisher / Subscriber モデルのサービスですね。

引用:Amazon SNS とは | AWSドキュメント

具体的なユースケース

SNSとSQSでファンアウトイベント通知

SNSで発行したメッセージをSQSで並列/非同期処理することができます。

引用:一般的な Amazon SNS シナリオ | AWSドキュメント

SNSをSQSの前段に配置することで、送信先を簡単に変更できたり、メッセージを簡単に確認できるといったメリットがあります。

詳細は以下のリンクをご参照願います。

アラート通知

CloudWatchやGuardDuty等からの通知を、運用担当者に送信することができます。

Emailによる通知以外にも、AWS Chatbotを併用することで、SlackやAmazon Chimeといったチャットサービスに簡単に通知できるようになります。
AWS Chatbot経由の場合は、見やすいメッセージに加工して通知してくれるのでオススメです。

詳細は以下のリンクをご参照願います。

モバイルテキストメッセージ(SMS)送信

モバイル向けにテキストメッセージ(SMS)を送信することができます。

2021年のアップデートでサンドボックスが追加されたので、本番運用する際は注意が必要です。

プッシュ通知

プッシュ通知を使用し、アプリケーションに直接メッセージを送信することができます。

現在サポートされているモバイルデバイスとデスクトップは以下となります。

  • Amazon Device Messaging (ADM)
  • iOS と Mac OS Xの両方向け Apple Push Notification Service (APNs)
  • Baidu Cloud Push (Baidu)
  • Firebase Cloud Messaging (FCM)
  • Windows Phone (MPNS) 用 Microsoft Push Notification Service (MPNS)
  • Windows Push Notification Services (WNS)

引用:ユーザー通知の仕組み | AWSドキュメント

設計・構築時の注意点

メッセージの順序付けと重複除外

Amazon SNSではFIFOを利用して、メッセージの順序性を保ち、メッセージの重複を防止することができます。
ただし、Amason SNSのFIFOトピックをサブスクライブできるのは、現時点でAmazon SQS FIFO キューのみなので注意が必要です。

例えば、Amazon SESでバウンス等を通知したい場合には、以下の引用のとおりFIFOを選択することはできません。

Amazon SNS を使用してトピックを作成する場合、タイプはスタンダードを選択します。(SES は FIFO タイプのトピックをサポートしていません。)
- 引用:イベント発行の Amazon SNS イベント送信先のセットアップ | AWSドキュメント

そのため、要件としてFIFOが必要なければスタンダードのSNSトピックをご利用願います。

保存時のデータ暗号化

サーバ側の暗号化(SSE)ではAWS KMSを利用して、Amazon SNS キュー内のメッセージを暗号化することができます。
ただし、以下に注意する必要があります。

暗号化範囲

SSEではメッセージの本文は暗号化されますが、以下は暗号化対象外です。

  • トピックのメタデータ (トピック名と属性)
  • メッセージのメタデータ (件名、メッセージ ID、タイムスタンプ、属性)
  • トピックごとのメトリクス

引用:暗号化スコープ | AWSドキュメント

暗号化キー

SSEを利用する場合は、AWS KMSのキーポリシーにアクセス許可を設定する必要があります。 CloudWatch等のアラーム通知用に利用したい場合は、AWS管理 CMK(alias/aws/sns)ではなく顧客管理型 CMKを作成願います。

サブスクリプションの誤解除

Amazon SNSからメール送信すると、メールに登録解除用のリンクが記載されています。 そのため運用中の意図しないクリックにより、サブスクリプションが解除される事故が発生してしまう可能性があります。

上記はメールによるサブスクリプション実施が原因です。
AWSマネジメントコンソールから実施すると該当リンクを無効化することができますので、本番運用開始前に注意してみてください。

アップデート関連

直近1年で、機能面でのアップデートを探してみたところABACサポートがありました。 ABACは簡単に言うと、タグベースのリソースアクセス制御となります。

併せて読みたい

まとめ

以上、『AWS 再入門ブログリレー 2022』の28日目のエントリ『Amazon SNS』でした。

明日(3/15)は、おんづかによる『AWS CloudFormation(StackSets編)』の予定です。お楽しみに!!