CloudFormationを使用して、SNSの通知先にSMS(ショートメッセージ)を指定する

CloudFormationを使用して、SNSの通知先にSMS(ショートメッセージ)を指定する

以下のページで示されている通り、SNSイベントの通知先は数多く用意されています。

あわせて読みたい
Amazon SNSイベント送信先 - Amazon Simple Notification Service Amazon が、 (A2A) メッセージングと application-to-application (A2P) application-to-person 通知に分類されたさまざまな送信先にイベントをSNS配信する方法について説...

本ページでは、SMS(ショートメッセージサービス)に通知する方法を確認します。

構築する環境

Diagram of specifying SMS (short message) as the destination for SNS notifications.

2つのリソースを作成します。

1つ目はSNSトピックです。
通知先にSMSを選択し、携帯電話の電話番号を指定します。

2つ目はLambda関数です。
この関数はSNSトピックにメッセージを送信するパブリッシャーとして動作します。
関数のランタイム環境はPython3.12とします。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

GitHub
awstut-fa/159 at main · awstut-an-r/awstut-fa Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

テンプレートファイルのポイント解説

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

関数で実行する具体的なコードについては、以下のページをご確認ください。

あわせて読みたい
CFNでSNS入門 – email版 【CFNでSNS入門 - email版】 AWS SNSはメッセージングサービスです。 今回は入門編ということで、通知先にEmailを指定する方法をご紹介します。 【構築する環境】 2種類...

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

SNSを確認します。

Detail of SNS 01.

正常にSNSトピックが作成されています。
このトピックをサブスクライブしているデバイスを確認すると、確かにプロトコルが「SMS」、エンドポイントに電話番号が指定されています。

Lambda関数を確認します。

Detail of Lambda 01.

正常にLambda関数が作成されています。

(参考) AWSアカウントがSMSサンドボックス内の場合、事前に通知先電話番号を登録する

動作を確認する前に、注意が必要です。

デフォルトの状態ですと、AWSアカウントはSMSサンドボックス内にあります。
AWS公式では、SMSサンドボックスについて、以下の通り説明されています。

Amazon SNS を使用して SMS メッセージを送信し始めると、AWS アカウントの所在地は SMS サンドボックス内になります。SMS サンドボックスは、SMS 送信者としての評判を損なうことなく、Amazon SNS 機能を試すための安全な環境を提供します。

SMS サンドボックス

またAWSアカウントがSMSサンドボックス内にある場合、以下の点が重要です。

SMS メッセージは、認証済みの送信先電話番号にのみ送信できます。

SMS サンドボックス

動作する前に、通知先の電話番号を登録します。

Detail of SNS 02.

「Add phone number」を押下します。

Detail of SNS 03.

登録する電話番号を入力後、「Add phone number」を押下します。

Detail of SNS 04.

指定した携帯電話のSMSアプリに認証用のワンタイムパスワードが送られてきました。

これを登録ページに入力します。

Detail of SNS 05.

ワンタイムパスワードを入力後、「Verify phone number」を押下します。

Detail of SNS 06.

電話番号が登録されました。
これでこの番号にメッセージを通知することができます。

動作確認

準備が整いましたので、Lambda関数を実行します。

Detail of Lambda 02.

関数が正常に実行されました。
これでSNSトピックにメッセージが送信されました。

改めて携帯電話のSMSアプリを確認します。

Detail of SNS 07.

確かにメッセージ(fugafuga)が送られました。
件名として指定した文字列(hogehoge)は無視されるようです。

まとめ

SNSの通知先にSMSを指定する方法をご紹介しました。