Amazon SNSとLambda関数の連携方法
Amazon SNSとLambda関数の連携方法についてです。
Amazon SNSのTopicにメッセージを送信し、Lambda関数を実行してみます。
まずAmazon SNSの「Topics」-「Create new topic」をクリックします。
Topic nameやDisplay nameは適当でも構いません。以下のように「test」というTopicを作成しました。
次に、Subscriptionsを作成します。「Createt subscription」をクリックします。
「Topic ARN」にTopicsで作成した際のARNを入力します。
「Protocol」に、AWS Lambdaを選択します。
「End point」に、作成しているLambda関数一覧が出てきますので、呼び出したいLambda関数を選びます。
「Version or arias」は、defaultにします。詳細はこちらを参照ください。
「Create subscription」をクリックします。
このタイミングで、選択したLambda関数のトリガーにSNSが設定されます。
Topicにメッセージを送信する
Topicにメッセージを送信すると、それをトリガーとして、選択したLambda関数が実行されます。
Topicsからメッセージを送信したいTopicを選択します。ここでは「test」を選択します。
すると、「Publish to topic」が有効になるので、クリックします。
適当なメッセージを入力して「Publish message」をクリックすると、Lambda関数が実行されます。
SNSから送信されたメッセージをLambda関数で受け取る
今度はJSON形式(文字列)で送信されたメッセージをLambda関数で受け取ってみます。
SNSから送るメッセージは以下にします。lambdaプロパティの値が渡ってくるようです。
{ "default": "test", "lambda": "{\"test\":\"abc\"}" }
“{‘test’:’abc’}”がJSON形式ですが文字列で渡ってきます。その為、Lambda関数では、JSON.parse()しないといけませんので注意です。
ちなみにLambda関数で取得するには以下のようにeventから取得します。
event.Records[0].Sns.Message
以下、Lambda関数の例です。
exports.handler = (event, context, callback) => { const obj = JSON.parse(event.Records[0].Sns.Message); // なんらかの処理 callback(null, 'OK'); };
Lambda関数からSNSメッセージ送信方法
Lambda関数からSNSメッセージ送信するにはpublishメソッドを使用します。
以下、記述例です。
const aws = require('aws-sdk'); const sns = new aws.SNS({ apiVersion: '2010-03-31', region: 'ap-southeast-2' }); exports.handler = (event, context, callback) => { sns.publish({ Message : '{"Message":"test"}', Subject : 'title', TopicArn: 'arn:aws:sns:ap-southeast-2:xxxxxxxxxxxx:test' }, function(err, data){ if (err) { console.log(err); context.fail('fail'); } }); callback(null, 'OK'); };
ここの、TopicArnには、SNSのTopicARNを指定します。
このLambda関数を実行するとSNSが実行されますが、確認ができません。
確認するにはメールを送るなどして確認する必要があります。
SNSでTopicを作成し、「Create subscription」をクリックします。
プロトコルがemailのsubscriptionができますので、この状態でこのTopicARNにSNSを送信すると、指定したメールアドレスにメールが送信されてきます。
以下のように送信されました。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント