AWSからSMS(ショートメール)を送信する

AWSからSMS送信

SMS(ショートメール)は電話番号を宛先として短い文章を送信できる仕組みです。最近では、本人確認のためSMS(ショートメール)を使った二段階認証を用いたシステムも増えてきています。AWSでは「Amazon Simple Notification Service」というサービスが提供されていて誰でも簡単にSMS送信を試すことができます。下記はNode.jsを使ったSMS送信例です。

const AWS = require('aws-sdk');

exports.handler = async (event) => {
    let sns1 = new AWS.SNS({region : "ap-northeast-1"})
    return await sns1.publish(event).promise()
}

let aTest = exports.handler({
    Message : "Mjeld Technologies \n認証コード: xxx1",
    PhoneNumber : "+81電話番号",
    MessageAttributes : {
        'AWS.SNS.SMS.SenderID': {
        'DataType': 'String',
        'StringValue': 'MJELD'
        }
    }
})
Promise.all([aTest]).then((athreadList) => {
    athreadList.forEach(aVal => {
        console.log(aVal)
    })
})

exports.handler = async (event) => {}に実装しているのはlambdaでもテストできるように書いています。eventオブジェクトの中のMessageが本文で、PhoneNumberに+81のつく電話番号を設定します。

AWS lambda zipファイルアップロード

AWSlambda zipアップロード

AWS lambdaはサーバーレスで関数処理を実行したい場合便利なサービスです。初めて試す場合シンプルにブラウザからコードを記述しテスト実行まで行えます。lambda関数をNode.js 12.xの設定で作成した場合初期のコードは下記のサンプル(index.js)が入っています。

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

index.jsに入る範囲でコードを書く分には、ブラウザの機能を使って書いてもいいとは思うのですが、複数のJSファイルで構成したい場合やnode_modulesを埋め込みたい場合ブラウザから手動で登録していくのは大変な作業です。このような場合lambdaには.zipファイルでのアップロードとS3からのファイルアップロードが利用できます。私の場合ローカル環境でテストしてzipファイルにまとめてlambdaへアップロードする方法を採用しています。ローカル環境でプログラムに必要なnode_modulesを先に入れてしまいます。そして、メイン実行するJSファイルをサンプルと同じくindex.jsという名前にしてexports.handlerに返す処理を埋め込みます。自分で作成したクラスモジュールなども別のJSファイルに入れます。その後下記コマンドでzipを実行します。

#プロジェクト内のディレクトリの場合
zip -r index.zip ./*

zipコマンドは-rオプションをつけるだけです。index.zipが完成したらブラウザ画面の[関数コード]のアクション内「.zip ファイルをアップロード」を選択します。

「.zip ファイルをアップロード」を選択
「.zip ファイルをアップロード」を選択

ファイルアップロードダイアログが表示されるのでアップロードさせるzipファイルを選択し[保存]ボタンを押します。アップロードが成功するとブラウザの関数コード編集が出来なくなるようです。

.zip ファイルをアップロードダイアログ
.zip ファイルをアップロードダイアログ
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED