Amazon SNSでメールとSMS通知を飛ばす

ども。

AWSにはAmazon SNS(Simple Notification Service)というサービスがあります。

これはサーバーレスアーキテクチャのためのサービスで、サーバーを用意せずともアプリケーションからの通知を実装できる便利なサービスです。

使える通知プロトコルにはHTTP、HTTPS、Eメール、Amazon SQS、AWS Lambda、SMS(Short Message Service)などがあります。

今回は、このAmazon SMSを使ってメールとSMSで通知を飛ばしてみようと思います。

Amazon SNSの仕組み

図は公式サイトから拝借してきたもの

パブリッシャー

パブリッシャー(発行者)はメッセージを送信するシステム、マイクロサービス、その他のAWSサービスを指します。

トピック

Amazon SNSを使うにはトピックを定義します。
これは一方通行のチャットルームのようなものだと思えばよいでしょう。

ここにメッセージを登録することで、紐づけられたサブスクライバー(購読者)全員にメッセージが届く仕組みです。

サブスクリプション

トピックに紐づける送信先の定義です。
メッセージのプロトコルと電話番号やメールアドレスをセットで登録します。

メールとSMSを送ってみる

マネジメントコンソールからAmazon SNSを開きます。

トピックを作成する

まずは、メッセージを送るためのトピックを作成します。
サイドバーから「トピック」を選び「トピックの作成」を選択します。
名前を付けてトピックを作成します。
とりあえず使うだけなら、オプションはデフォルトで大丈夫です。

サブスクリプションを作成する

トピックを作成したら、その中に送信先であるサブスクリプションを作成します。
「サブスクリプションの作成」を押しましょう。

Eメールのサブスクリプションを作成する

トピックとプロトコルを選択し、エンドポイントには送信先のEメールを入力し、「サブスクリプションの作成」を押しましょう。
サブスクリプションを作成すると送信先の検証が行われ、設定したメールアドレスに認証確認メールが飛んできます。
「Confirm subscription」を押すとAWSのサイトに飛ばされ認証が成功します。

SMSのサブスクリプションを作成する

SMSの場合は、特に認証は必要ありません。
日本の携帯番号に送る場合は先頭に「+81」の国番号を付け、本来の携帯番号の先頭のゼロは取り除いて入力しましょう。

例えば「090-XXXX-YYYY」という番号なら「+8190XXXXYYYY」です。

メッセージを送信する

トピックの画面に戻り、右上の「メッセージの発行」を押します。

メッセージを作成する画面に移動します。
ここでメッセージの内容を設定します。
紐づけているサブスクリプションに一斉送信されるのですが、配信プロトコルごとにメッセージを変えることができるようになっています。

今回はEメールにもSMSにも同じ「テストメッセージ」を送ります。
右下の「メッセージの発行」を押すとメッセージが送信されます。

実際に送信されたメッセージがこちら。


今回はマネジメントコンソールからやりましたが、アプリケーションから起動すればメール送信などを簡単に実装できそうですね。

では。