Amazon SNSとLambda関数の連携方法

Amazon SNSとLambda関数の連携方法

Amazon SNSとLambda関数の連携方法についてです。

Amazon SNSのTopicにメッセージを送信し、Lambda関数を実行してみます。

まずAmazon SNSの「Topics」-「Create new topic」をクリックします。

Topic nameやDisplay nameは適当でも構いません。以下のように「test」というTopicを作成しました。

Amazon SNSとLambda関数の連携方法

次に、Subscriptionsを作成します。「Createt subscription」をクリックします。

「Topic ARN」にTopicsで作成した際のARNを入力します。

「Protocol」に、AWS Lambdaを選択します。

「End point」に、作成しているLambda関数一覧が出てきますので、呼び出したいLambda関数を選びます。

「Version or arias」は、defaultにします。詳細はこちらを参照ください。

Amazon SNSとLambda関数の連携方法

「Create subscription」をクリックします。

このタイミングで、選択したLambda関数のトリガーにSNSが設定されます。

Amazon SNSとLambda関数の連携方法

Topicにメッセージを送信する

Topicにメッセージを送信すると、それをトリガーとして、選択したLambda関数が実行されます。

Topicsからメッセージを送信したいTopicを選択します。ここでは「test」を選択します。

すると、「Publish to topic」が有効になるので、クリックします。

Amazon SNSとLambda関数の連携方法

適当なメッセージを入力して「Publish message」をクリックすると、Lambda関数が実行されます。

Amazon SNSと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」をクリックします。

Amazon SNSとLambda関数の連携方法

プロトコルがemailのsubscriptionができますので、この状態でこのTopicARNにSNSを送信すると、指定したメールアドレスにメールが送信されてきます。

以下のように送信されました。

Amazon SNSとLambda関数の連携方法

コメント

タイトルとURLをコピーしました