
Amazon SNSでメッセージフィルタリングポリシーに合致したサブスクリプションにのみSMSを送信する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、Amazon SNSでメッセージフィルタリングポリシーに合致したサブスクリプションにのみSMSを送信してみました。
メッセージフィルタリングポリシーとは
Amazon SNSでは既定ではメッセージを受信したらそのトピックのすべてのサブスクリプションにメッセージ送信が行われますが、サブスクリプションにメッセージフィルタリングポリシーを設定することにより、メッセージの件名や属性値によってそのメッセージを受信するかどうかの条件を設定できます。
メッセージの内容によって通知先を変えたい場合に便利です。
やってみる
トピックの作成
myTopicを作成します。

サブスクリプションの作成
1つ目のサブスクリプションの作成(SIM01とします。)
- プロトコル:
SMS - エンドポイント:
+8170XXXXXXXX - サブスクリプションフィルターポリシー:
{"target:["SIM01"]"}

2つ目のサブスクリプションの作成(SIM02とします。)
- プロトコル:
SMS - エンドポイント:
+8180XXXXXXXX - サブスクリプションフィルターポリシー:
{"target:["SIM02"]"}

トピックにSMSをエンドポイントとするサブスクリプションを2つ作成できました。

トピックへのメッセージ発行
SIM01にのみ送信
コンソールで以下の属性を設定したメッセージを発行します。
- メッセージ属性
- タイプ:
String - 名前:
target - 値:
SIM01
- タイプ:

SIM01のスマートフォンでのみSMSを受信しました。

SIM02にのみ送信
コンソールで以下の属性を設定したメッセージを発行します。
- メッセージ属性
- タイプ:
String - 名前:
target - 値:
SIM02
- タイプ:

SIM02のスマートフォンでのみSMSを受信しました。

SIM01およびSIM02に送信
コンソールで以下の属性を設定したメッセージを発行します。
- メッセージ属性
- タイプ:
String.Array - 名前:
target - 値:
["SIM01","SIM02"]
- タイプ:

SIM01とSIM02の両方のスマートフォンでSMSを受信できました。

備考
- サブスクリプションフィルターポリシーの条件にエンドポイントの値を使用できればポリシーを一律にそうだったのですが、現状できないようです。
- 送信先を頻繁に変更する場合はサブスクリプションのメンテナンスが大変なので、Amazon Connectを使った方が良さそうです。
参考
- SNSサブスクリプションのフィルタポリシーで良い知らせだけをメール受信する | DevelopersIO
- Amazon SNS でメッセージフィルタリング演算子のセットが増加
- Message Filtering Operators for Numeric Matching, Prefix Matching, and Anything-But Matching in Amazon SNS | AWS Compute Blog
以上






