やりたいこと
AWS LambdakからAmazon SNSを利用して、任意の電話番号あてにSMSを送信します。
Amazon SNSって?
Amazon Simple Notification Service
任意の通知をいろんなプロトコルで送信できるよ。
事前にトピックっていう通知カテゴリみたいなの作って、そいつに紐づくサブスクリプションを作成しておくと、
トピックが叩かれたときに紐づいているサブスクリプションにメッセージが送信されるよ。
で認識合ってる?
プロトコル/トランスポート |
---|
HTTP/HTTPS |
Email-JSON |
Amazon SQS |
AWS Lambda |
Platform application endpoint |
SMS |
コードとかより注意しておきたいこと
送信制限について
SNSでのSMS送信は送信制限が厳しめに設定されています。
利用料金の上限が1USD/月に設定されていて、東京リージョンにおいては12,3通/月しか送れません。
テスト送信だけで上限に達する可能性もあるので、必要があれば上限緩和申請を出しましょう。
宛先指定について
SNSでSMSを飛ばす分にはトピックを作成しなくても送信が可能です。
SMSじゃなくてE-Mailを送信したいという場合、
SNSでは事前にE-Mailの検証(実際にメールを送って、受信者が認証する)が必要です。
Lambdaでメールアドレスを指定してメール送信したいときにはAmazon SESを使いましょう。
構成
Lambda関数
事前にLabmda実行ロールにSNS実行ポリシーをアタッチしましょう。
とりあえずテストなのでAmazonSNSFullAccessをアタッチしておきます。
コード
ランタイムはNode.js 12.xです。
TestSendSMS.js
varAWS=require("aws-sdk");varSNS=newAWS.SNS();exports.handler=function(event,context,callback){// メッセージ情報を設定varparam={PhoneNumber:'E.164形式の電話番号',Message:'This is test message.',MessageAttributes:{'AWS.SNS.SMS.SMSType':{DataType:'String',StringValue:'Transactional'// 信頼性を重視する場合はこちらを//StringValue: 'Promotional' // コストを重視する場合はこちらを},'AWS.SNS.SMS.SenderID':{DataType:'String',StringValue:'TEST'// 端末に表示される送信元名}}};// メッセージを送信するSNS.publish(param,function(err,data){if(err){context.done(null,err);}context.done(null,data);});};
多分これでいけます―