AWS Step Functionsから直接Amazon SNSを使用してSMSのメッセージを送信をする

2021.10.28

こんにちは、CX事業本部 IoT事業部の若槻です。

AWS Step Functionsでは、最近多くのAWSサービスと直接連携ができるようになるアップデートがありました。

そこで今回は、AWS Step Functionsから直接Amazon SNSを使用してSMSのメッセージを送信してみました。

確認してみた

ステートマシンの作成

Step Functions Workflow Studioでステートマシンを作成します。

Step Functionsのマネジメントコンソールで、[ステートマシン]の作成をクリックします。

[次へ]をクリックします。

すると「Workflow Studio」が開きます。[アクション]からAmazon SNS Publishをドラッグします。

[SNS Publish]状態の設定タブを開きます。ここがポイントなのですが、既定で[API]-[Integration type]で選択されているOptimizedでは発行先トピックやメッセージなどしか指定できません。これをAWS SDKに選択を変更する必要があります。

するとAWS CDKを使用する場合と同じようにAPIパラメータを直接指定できるようになります。

電話番号とメッセージを指定するパラメータを設定します。注意点として、入力のJSONの値を使用するパラメータのプロパティは末尾に.$を付ける必要があります。

{
  "Message.$": "$.message",
  "PhoneNumber.$": "$.phoneNumber"
}

[次へ]をクリックします。

生成されたコードを確認したら[次へ]をクリックします。

生成されたコードは下記のようになります。

{
  "Comment": "A description of my state machine",
  "StartAt": "SNS Publish",
  "States": {
    "SNS Publish": {
      "Type": "Task",
      "Resource": "arn:aws:states:::aws-sdk:sns:publish",
      "Parameters": {
        "Message.$": "$.message",
        "PhoneNumber.$": "$.phoneNumber"
      },
      "End": true
    }
  }
}

[ステートマシンの作成]をクリックします。

これでステートマシンの作成ができました。

動作

作成したステートマシンで[実行の開始]をクリックします。

ステートマシンの入力を指定して、実行します。

{
  "message": "Hello, Step Functions.",
  "phoneNumber": "+8180XXXXXXXX"
}

実行が成功しました。

送信先の電話番号の端末でSMSのメッセージが受信できています。

送信者IDを指定してみる

Amazon SNSのSMSメッセージの送信者IDは既定でNOTICEとなりますが、これも入力で指定してみます。

Workflow Studioで[SNS Publish]状態の[APIパラメータ]を下記のように変更します。

{
  "Message.$": "$.message",
  "PhoneNumber.$": "$.phoneNumber",
  "MessageAttributes.$": "$.messageAttributes"
}

入力を下記のように指定してステートマシンを実行します。送信者IDはclassmedhodとなります。

{
  "message": "Hello, Step Functions.",
  "phoneNumber": "+8180XXXXXXXX",
  "messageAttributes": {
    "AWS.SNS.SMS.SenderID": {
      "DataType": "String",
      "StringValue": "classmedhod"
    }
  }
}

実行が成功しました。

受信したメッセージを見ると送信者IDを変更できていますね。

まとめ

AWS Step Functionsから直接Amazon SNSを使用してSMSのメッセージを送信してみました。

ステートマシンでLambdaを使わなくてもAmazon SNSのメッセージ発行ができるのはすごいですね。今後活用していきたいと思います。

参考

以上