CloudFormationを使用して、SNSの通知先にSMS(ショートメッセージ)を指定する
以下のページで示されている通り、SNSイベントの通知先は数多く用意されています。
本ページでは、SMS(ショートメッセージサービス)に通知する方法を確認します。
構築する環境
2つのリソースを作成します。
1つ目はSNSトピックです。
通知先にSMSを選択し、携帯電話の電話番号を指定します。
2つ目はLambda関数です。
この関数はSNSトピックにメッセージを送信するパブリッシャーとして動作します。
関数のランタイム環境はPython3.12とします。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
テンプレートファイルのポイント解説
SNSトピック
Resources:
Topic:
Type: AWS::SNS::Topic
Properties:
FifoTopic: false
Subscription:
- Endpoint: !Ref PhoneNumber
Protocol: sms
TopicName: !Sub "${Prefix}-sns-topic"
Code language: YAML (yaml)
Subscriptionプロパティがポイントです。
Endpointプロパティに通知先の携帯電話の電話番号を指定します。
Protocolプロパティに「sms」を指定します。
(参考) Lambda関数
この関数の役割は、SNSにメッセージを送信することです。
以下の設定でメッセージを通知するように設定します。
- 件名:hogehoge
- 本文:fugafuga
関数で実行する具体的なコードについては、以下のページをご確認ください。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
SNSを確認します。
正常にSNSトピックが作成されています。
このトピックをサブスクライブしているデバイスを確認すると、確かにプロトコルが「SMS」、エンドポイントに電話番号が指定されています。
Lambda関数を確認します。
正常にLambda関数が作成されています。
(参考) AWSアカウントがSMSサンドボックス内の場合、事前に通知先電話番号を登録する
動作を確認する前に、注意が必要です。
デフォルトの状態ですと、AWSアカウントはSMSサンドボックス内にあります。
AWS公式では、SMSサンドボックスについて、以下の通り説明されています。
Amazon SNS を使用して SMS メッセージを送信し始めると、AWS アカウントの所在地は SMS サンドボックス内になります。SMS サンドボックスは、SMS 送信者としての評判を損なうことなく、Amazon SNS 機能を試すための安全な環境を提供します。
SMS サンドボックス
またAWSアカウントがSMSサンドボックス内にある場合、以下の点が重要です。
SMS メッセージは、認証済みの送信先電話番号にのみ送信できます。
SMS サンドボックス
動作する前に、通知先の電話番号を登録します。
「Add phone number」を押下します。
登録する電話番号を入力後、「Add phone number」を押下します。
指定した携帯電話のSMSアプリに認証用のワンタイムパスワードが送られてきました。
これを登録ページに入力します。
ワンタイムパスワードを入力後、「Verify phone number」を押下します。
電話番号が登録されました。
これでこの番号にメッセージを通知することができます。
動作確認
準備が整いましたので、Lambda関数を実行します。
関数が正常に実行されました。
これでSNSトピックにメッセージが送信されました。
改めて携帯電話のSMSアプリを確認します。
確かにメッセージ(fugafuga)が送られました。
件名として指定した文字列(hogehoge)は無視されるようです。
まとめ
SNSの通知先にSMSを指定する方法をご紹介しました。