この記事で分かること
本記事では、初めてSNSを扱う人やAWS認定資格取得を目指す方向けに、SNSの基礎知識を解説します。
- 仕組み・特徴
- 連携可能なAWSサービス
- 設定項目
SNSの概要
Amazon SNS(Simple Notification Service)は、クラウドベースの通知サービスで、アプリケーションやユーザーにメッセージを簡単に送信できます。
SNSを使うことで、Eメール、SMS、モバイルプッシュ通知など、複数のチャネルを通じて一斉に通知を配信できます。システムの監視やユーザーへのアラート、ニュース配信など、様々なユースケースで活用されています。
SNSの仕組み
パブリッシャーが、SNSトピックにメッセージを送信します。これによりSNSがそのメッセージを受け取り、設定されたサブスクリプションに転送する準備が整います。
【パブリッシャーとは?】
- メッセージを送信する役割を持つエンティティで、通常はアプリケーションやサービスが該当します。
【トピックとは?】
- 複数のサービスにメッセージを一斉に配信するための「通信チャネル」として機能するアクセスポイントです。
- トピックを使うことで、AWS Lambda、Amazon SQS、HTTP/S、Eメールなどの異なるエンドポイントにメッセージをまとめて送信できます。
【サブスクリプションとは?】
- 特定のSNSトピックにメッセージを受信するために登録されたエンドポイント(Eメールアドレス、SMS番号、HTTP/HTTPSエンドポイント、Lambda関数など)
- トピックに送信されたメッセージを受け取る仕組みです。
SNSトピックに登録されているサブスクリプションを確認します。
各サブスクリプションは特定のエンドポイントを指定しており、SNSはその情報を元にメッセージの配信先を決定します。
メッセージをサブスクライバーに届けるために、各サブスクリプションの指定されたプロトコルに従ってメッセージを送信します。
SNSの特徴
以降では、SNSの以下特徴について解説していきます。
- 複数の配信プロトコル対応
- スケーラビリティと高可用性
- プッシュ型メッセージ配信
特徴①:複数の配信プロトコル対応
SNSは複数の配信プロトコルに対応しており、メッセージを様々な形式で送信できます。
例えば、SMS、Eメール、AWS Lambda関数、HTTP/HTTPSエンドポイント、Amazon SQSなどが選択可能です。これにより、異なる種類のシステムやサービスに対して一斉に通知を行うことができます。
【指定可能なプロトコル例】
- SMS
- メッセージが携帯電話にSMSとして送信されます。
- Email
- メッセージが指定されたメールアドレスに送信されます。
- HTTP/HTTPS
- 指定されたHTTP/HTTPSエンドポイントにPOSTリクエストとしてメッセージが送信されます。
- Lambda関数
- Lambda関数がトリガーされ、SNSはメッセージをその関数に渡します。
特徴②:スケーラビリティと高可用性
Amazon SNSは、完全にマネージドなサービスとして、トラフィックに応じて自動的にスケーリングします。
これにより、大量のメッセージを迅速かつ効率的に処理でき、システムの負荷を心配することなく運用できます。さらにSNSは冗長性が確保されているため、障害時でもサービスが継続的に利用可能です。
特徴③:プッシュ型メッセージ送信
パブリッシャーがトピックにメッセージを送信すると、SNSが登録されたサブスクライバーに対して自動的にメッセージを配信します。
サブスクライバーは、SMS、Eメール、Lambda関数など、選択したプロトコルでメッセージを受け取ります。これにより、リアルタイムで効率的に通知を届けることができます。
連携可能なAWSサービス
Amazon SNSは、様々なAWSサービスとシームレスに統合できるため、通知・メッセージング機能を他のシステムと連携して活用できます。Lambdaで処理を実行したり、SQSでメッセージをキューイングしたり、CloudWatchで監視アラートを送信したりと、多様なユースケースに対応可能です。
<SNSと連携可能なAWSサービス>
AWSサービス①:Lambda
【連携内容】
- SNSトピックにメッセージが送信されるたびにLambda関数を自動的に実行できます。
- 例えば、SNSが通知するイベントをトリガーにして、Lambda関数がデータ処理や通知処理を行うことができます。
【利用例】
- メッセージ内容に基づいてリアルタイムでデータを解析・処理し、その結果を別のサービスに送信する。
AWSサービス②:SQS
【連携内容】
- SNSがメッセージをトピックに送信し、そのメッセージをSQSキューに格納できます。
- これにより、他のシステムやアプリケーションがキューをポーリングしてメッセージを処理できます。
【利用例】
- 大量の非同期メッセージを管理したり、分散システム間で信頼性の高いメッセージ配信を実現する。
AWSサービス③:CloudWatch
【連携内容】
- アラームや監視メトリクスを通知することができます。
- CloudWatchアラームが設定された閾値を超えると、自動的にSNSトピックに通知され、その通知をEメールやSMSで受け取ることができます。
【利用例】
- サーバーのCPU使用率やストレージ容量が指定の閾値を超えた場合に、SNSを通じて管理者にアラートを送信。
AWSサービス④:Data Firehose
【連携内容】
- SNSトピックに発行されたメッセージをリアルタイムでData Firehoseに送信し、そのデータをS3やRedshift, RDSなどの蓄積・分析することができます。
【利用例】
- ログデータの転送
AWSサービス⑤:SES
【連携内容】
- Eメールを送信するために使用することができます。具体的には、SNSトピックにメッセージが送信されると、SNSはそのメッセージをSESを通じて指定されたEメールアドレスに送信することができます。
- これにより、アプリケーションやシステムからユーザーへの通知を効率的にEメールで配信することが可能になります。
【利用例】
- システムのイベントやアラートをメールで管理者に送信する。
【補足】SNSとSESの違い
SNSと同様にSESもEメール送信が可能なサービスです。
SNSは簡単で迅速に通知を送るためのツールとして便利ですが、配信の信頼性やカスタマイズ性、配信管理機能が必要な場合はSESを使う方が適しています。大量のメール配信や詳細なレポートが必要な場合、SESでメール配信する方が優れた選択肢と言えます。
<SNSとSESの比較表>
比較項目 | SNS | SES |
---|---|---|
配信の信頼性 | 低い (スパムフィルターに引っかかる可能性あり) | 高い |
送信制限 | 制限あり | 制限なし |
管理機能 | 限定的 | 詳細な配信設定が可能 |
カスタマイズの柔軟性 | 制限あり (HTMLメールなどのカスタマイズが難しい) | 高い (HTMLメール、テンプレート使用) |
SNSの設定項目
SNSの設定項目は多岐に渡るので、ここでは重要な設定項目を解説します。
①:トピックの設定項目
①-1:タイプ
SNSトピックには「FIFO」と「スタンダード」の2つのタイプがあり、用途に応じて使い分けることができます。
<1. FIFO(先入れ先出し)>
ー メッセージの順序が重要な処理に適したトピック ー
【メリット】
- メッセージ順序の保証
- メッセージは送信順に厳密に配信されるため、順番が重要なアプリケーションに適しています。
- 重複排除
- 重複メッセージの処理を自動的に行うため、アプリケーション側で重複排除の処理を追加する手間が減ります。
【デメリット】
- 制限されたスループット
- 1つのFIFOトピックには制限があり、標準トピックよりもスループットが低いため、高速で大量のメッセージを送信する場合には不向きです。
<2. スタンダード>
ー 順序や重複が重要でない大量の通知やアラートに適したトピック ー
【メリット】
- 高スループット
- ほぼ上限のないメッセージ数をサポートできます。
【デメリット】
- メッセージ順序の保証
- メッセージ順序が保証されないため、メッセージの順番が重要なアプリケーション(例:トランザクション処理など)では問題になる可能性があります。
- 重複メッセージ
- 一部のメッセージが重複して配信されることがあるため、重複排除のロジックをアプリケーション側で実装する必要がある場合があります。
①-3:アクセスポリシー
トピックにアクセスできるユーザーや、トピックの使用方法を制御できます。
- 特定のAWSアカウントにトピックへのアクセスを許可する。
- HTTPSプロトコルのサブスクリプションを制限する。
- 任意のAWSリソースがトピックにメッセージ発行できる。
①-4:アーカイブポリシー
アーカイブポリシーを使用して、公開されたメッセージを特定の日数 (最低 1 日、最大 365 日) 保存できます。
①-4:配信ステータスのログ記録
SNSメッセージが配信された際の成功や失敗、遅延などの情報をCloudWatch Logsに記録するための設定です。
- AWS Lambda
- Amazon SQS
- HTTP/HTTPS
- プラットフォームアプリケーションのエンドポイント
- Amazon Data Firehose
また、「成功サンプルレート」を設定することで、正常に配信されたメッセージが記録される頻度を制御できます。
例えば、成功サンプルレートを10%に設定すると、正常に配信されたメッセージの内、約10%だけがCloudWatch Logsに記録され、残りの約90%は記録されません。
②:サブスクリプションの設定項目
②-1:プロトコル
メッセージを配信する際に使用する通信プロトコルを指定する設定項目です。
この設定により、メッセージを受信する方法を決定できます。
②-2:フィルターポリシー
特定のサブスクリプションに対してどのメッセージを配信するかを制御するための設定です。
この機能を利用すると、メッセージに含まれる特定の属性(例えば、メッセージの種類や重要度など)やメッセージ本文に基づいて、受信者に配信するメッセージを絞り込むことができます。
②-3:デッドレターキュー
メッセージの配信が失敗した場合に、そのメッセージを格納するためのSQSキューを指定できます。
NSメッセージがサブスクリプション先(例えば、HTTPエンドポイントやLambda関数など)に配信できなかった場合、そのメッセージを「デッドレターキュー」に保存しておくことで、後で問題を調査したり、再試行したりすることができます。
コメント