新監視システムを開発する時、Lambda関数よりAmazon SNSを利用して、任意の電話番号にショートメール(以下、SMS)を送信する必要となりました。SMSの送信方法についてはいくつか事前設定する必要なところがあり、まとめて説明いたします。
1.サンドボックス
SMSアカウントはデフォルトでは、SMSサンドボックスに自動的に置かれています。SMSサンドボックス内で操作している間は、検証済みの送信先電話番号にのみSMSメッセージを送信できるという制限が適用されています。
2.月額使用限度額
AWSアカウントごとにSMSの月額使用限度額は1.00USDとなり、超えたら送信不可となります。
上記の1、2については、本番運用する際、業務に支障がないように、AWS SupportにSMSの月額使用限度額引き上げおよび当該アカウントをAmazon SNSサンドボックスから移動して頂くようお願いする必要があります。
3.送信者ID指定
デフォルトでは、AWSコンソールも、Lambda関数からも、SMSを送信する際、受信側で以下のように送信者IDはNOTICEとなります。
AWSコンソールで以下のように送信者IDを指定しておけばいいじゃんって思われる方もいらっしゃると思いますが、結論というと、指定してもNOTICEのままで、状況は変わりません。
★解決方法
送信者IDを利用したSMSメッセージ配信を行う際に、End User Messagingに、登録する必要があります。
この点につきまして現時点においてドキュメントに明確に記載されておりません。
尚、送信者IDは原則として、サービス名/ブランド名/会社名などをお客様のアイデンティティを表す文字列を指定することは推奨されています。
★具体的な登録方法
まずは、Amazon SNSのコンソールで、発信元IDをクリックします。
次にリクエスト発信者をクリックします。
必要な情報(国、ユースケース定義情報等)を入れて、送信者IDを指定します。
問題ないことを確認した上、リクエストボタンをクリックします。
登録後、Lambda関数で、送信者IDを指定して送信すれば、NOTICEがなくなります。
送信用のLambda関数は以下の通りです。
import json
import boto3
def lambda_handler(event, context):
# 送信先電話番号
send_telno = "+810908888888" # 携帯電話番号
# 送信メッセージ
send_message = "テストメッセージです"
# 通知者表示に使用される送信者ID
senderId="SHARPMK"
message_attributes = {
'AWS.SNS.SMS.SenderID': {
'DataType': 'String',
'StringValue': senderId
}
}
try:
sns = boto3.client("sns")
sns.publish(
PhoneNumber = send_telno,
Message = send_message,
MessageAttributes = message_attributes
)
except Exception as e:
print(e)
まとめ
簡単にSNSでSMSを送信する際の注意点をまとめました。ご参考になれば幸いです。