目次
Amazon SNS(Simple Notification Service)とは?
Amazon SNSとは、Publish Subscribe方式(複数の送信者(Publisher)と複数の受信者(Subscriber)に対し仲介を入れる事で送信者と受信者はお互いを意識しない送受信が可能となる方式)のメッセージングサービスです。
上図の様にPublisherはSubscriberそれぞれに対しメッセージを送信するのでなく、SNSに向けてメッセージを送信するだけで良く、SubscriberはSNSから自分の欲しいメッセージを参照するだけで良いという状態を作る事が可能です。
Publisherとして利用できる代表的なサービスは、CloudWatch、EC2、S3、API Gateway、Lambdaなどがあります。
Subscriberとして利用できる代表的なAWSサービスは、Amazon SQS、Lambda、Kinesis Data Firehose、Redshift、Step Functionsなどがあります。
SNSが発信できるメッセージの種類としては、電子メール・HTTP・SMS・モバイルプッシュ通知・Amazon SQSへの連携があります。
料金
SNSの料金は主にメッセージの配信件数及び配信先によって変動します。それぞれの配信先に対し、無料利用枠があり、無料利用枠の配信件数を超過すると料金が発生します。
また、FIFOオプションを利用すると、FIFO利用の料金が上乗せされます。
詳細についてはAWS公式ドキュメントを参照下さい。
ユースケース
SNSのユースケースは多岐に渡りますが、主なユースケースは以下の様になります。
- モニタリングシステムのアラート通知:モニタリングシステム(CloudWatchなど)からのアラート通知を受信することができます。これにより、AWSリソースの問題やセキュリティイベントなどをすばやく検知することが可能となります。
- クラウドアプリケーションのイベント通知:AWS上で実行されるアプリケーションのイベント通知が可能です。Amazon EC2インスタンスの状態変更、AWS Lambda関数の完了、Amazon S3バケット内のファイル更新などをトリガーにイベントを通知する事が可能となります。
- メッセージングアプリケーション:メッセージングアプリケーションを構築することができます。アプリケーションと連携する事で、メール、SMS、プッシュ通知、Slackなどの複数のチャネルにメッセージを配信するアプリケーションを作成する事ができます。
- プッシュの通知:iOS、Android、Fire OSなどのモバイルデバイスに対してプッシュ通知を送信することができます。
- Eメール/SMS送信:Subscriberに対し、EメールやSMS(Short Message Service)を一斉送信する事が可能です。
ハンズオン概要
以下で実際にSNSを利用していきます。
今回は、SNSを利用して、Subscriberにメールを送信するという機能を作成します。
利用手順
※当ページでは2023年3月現在のSNSについて解説します。クラウドサービスは頻繁にアップデートが施されるため、仕様が異なる可能性があります。
ログイン
まずは、AWS公式ページからAzureにログインしましょう。
SNSの新規作成
トピックの作成
サインイン後検索バーに”SNS”と入力し、”Simple Notification Service”を押下します。
トピックタブより、”トピックの作成”を押下します。
“詳細”については、以下のように作成します。
- タイプ:要件に応じてFIFOもしくはスタンダードを選択します。今回は管理者にメールを送信するので、スタンダードとします。
- FIFO:メッセージの順序を守りますが、スタンダードに比べるとスループットが低く、SQS連携のみをサポートします。
- スタンダード:メッセージの順番が変動する可能性がありますが、高スループットで、SQS、Lambda、HTTP、SMS、Eメール、モバイルアプリをサポートします。
- 名前:トピックに任意の名前を付与します。今回は、”test-eb-topic”と命名します。
- 表示名:SMS(ショートメッセージサービス)を送付する際の表示名を指定します。同様に、”test-eb-topic”とします。
“暗号化”は、今回については無効にします。
SNSはデフォルトで転送中の暗号化は行われます。この項目で暗号化を有効にすると、AWS Key Management Serviceのキーを利用して、Amazon SNSキュー内のメッセージの内容が保護されます。
“アクセスポリシー”では、トピックにアクセス可能なユーザーを定義します。
- メソッドの選択:アクセスポリシーをどのように選択するかを指定します。今回はベーシックを選択します。
- ベーシック:AWSがデフォルトで提供するポリシーから定義します。
- アドバンスト:JSON形式で独自にポリシーを定義します。
- パブリッシャー:トピックにメッセージを公開できるユーザーを指定します。今回は”トピックの所有者のみ”を指定します。
- サブスクライバー:トピックにサブスクライブできるユーザーを指定します。今回は”トピックの所有者のみ”を指定します。
“データ保護ポリシー”では、機密データがメッセージとして発信されない様にルールを設定する事ができます。機械学習を用いた機密データを検出する”データ識別子”を基にフィルタリングされます。
保護ポリシーには、監査、識別解除、拒否のオペレーションが定義できます。
- 監査:保護ポリシーに反していた場合もメッセージを配信しますが、ログから確認する事ができます。
- 識別解除:該当のデータに対しマスキングや削除を行います。
- 拒否:保護ポリシーに反した場合にメッセージ配信を行いません。
今回はデータ保護ポリシーは追加しません。
“配信再試行ポリシー(HTTP/S)”はSNSが、HTTPもしくはHTTPSのエンドポイントへの配信に失敗した際に再試行を行う回数です。
HTTP/HTTPS以外の再試行回数は固定値ですが、HTTP/HTTPSでは、再試行回数を調整する事が可能です。
今回は、デフォルトのままにします。
各エンドポイントに対する詳細の試行回数はAWS公式ドキュメントを参照下さい。
“配信ステータスのログ記録”は、HTTP・Lambda、SQS、アプリケーションに対するメッセージの配信ステータスに関するログを設定する事が可能です。
今回は付与なので、指定しません。
“タグ”についても今回は指定しません。
“アクティブトレース”はSNSトピックを介して送信された各メッセージのパフォーマンスをモニタリングし、特定のメッセージがどのように処理されたかをトレースする事ができ、問題発生時に原因を特定に役立ちます。
今回は”アクティブトレースを使用しない”を選択します。
上記の設定が完了したら、”トピックの作成”を押下します。
サブスクリプションの作成
トピックの作成が完了したら、”サブスクリプションの作成”を押下し、サブスクリプションを作成します。
“詳細”は、以下の様に設定します。
- トピックARN:トピックを一意に識別する為の識別子です。”test-eb-topic”と入力し、ARNを生成します。
- プロトコル:SNSでのメッセージ配信のプロトコルを設定します。”Eメール”を選択します。
- エンドポイント:配信先のメールアドレスを設定します。
“サブスクリプションフィルターポリシー”は、受信者側で受け取るメッセージをフィルタリングする際に設定します。今回は不要なので、設定しません。
“Redriveポリシー(デッドレターキュー)”は、サーバーエラーなどが原因で、SNSが受信者にメッセージを配信できない場合に、SQSに該当のメッセージを送信するポリシーです。今回は不要なので設定しません。
上記を設定したら、”サブスクリプションの作成”を押下します。
作成が完了すると、送信先に設定したメールアドレスに確認メールが届きます。”Confirm subscription”を押下します。
メッセージ発行のテスト
SNS単体でメッセージが正常に送信できるかテストを行います。
トピックタブより、”メッセージの発行”を押下します。
件名と本文のみ”test”と入力し、メッセージを発行します。
以下のメールが届いていれば成功です。
関連記事