通过Amazon Lambda触发Amazon SNS消息



我有一个Amazon Lambda实例和一个Amazon SNS实例。Lambda代码监视我们数据库中的变化,我希望它调用Amazon SNS向我们的用户发送推送。例如:

当我们的一个论坛上的用户收到一条新消息时,Lambda代码在每次运行时(每10分钟)都会识别出这一变化,并应该通过SNS向用户的智能手机发送推送。

当涉及到文档时,我遇到了一堵墙;Amazon的文档只讨论如何通过SNS触发Lambda代码,而不是相反。谁能举个例子告诉我怎么做?

在Lambda上下文中推送SNS通知没有什么特别的。我认为它只是你与之交互的另一个外部服务。

您可以做的是在lambda代码中拉入AWS SDK,然后使用该代码进行SNS调用。您需要注入正确的凭据才能调用Amazon SNS API(但是如果您正在与数据库通信,您可能需要做类似的事情来获取数据库端点和凭据)

是的,您可以使用AWS Lambda来实现您想要的。您还需要给予适当的IAM Permissions,允许您的Lambda IAM Role向您的SNS Topic发布消息。

示例SNS Publish IAM Policy:

{
    "Statement":[ {
        "Effect":"Allow",
        "Action":"sns:Publish",
        "Resource":"arn:aws:sns:*:<your account id>:<your topic id>"
    } ]
}

可以使用下面的lambda将SNS消息推送给用户,但是必须知道该用户的端点ARN是什么。例如,如果在Android应用程序中,当用户登录时,您将让应用程序向您的后端发送GCM (Google Cloud Messaging)令牌(例如,通过触发lambda的API调用)。然后,连接到GCM的后端可以使用此令牌查找与该用户对应的端点ARN,并将其放入下面的lambda中。或者,你可以让应用程序直接发送端点ARN到你的后端,尽管我认为它可能有点不太安全。确保你给了IAM通过SNS发布到你的应用程序的权限。您可以使用下面的lambda来推送消息:

var AWS = require('aws-sdk');
var sns = new AWS.SNS({apiVersion: '2010-03-31'});
exports.handler = (event, context, callback) => {
    console.log(JSON.stringify(event))
var payload = {
"default": "The message string.",
"GCM":"{"+
   ""notification":{"+
       ""body":"PUT NOTIFICATION BODY HERE","+
       ""title":"PUT NOTIFICATION TITLE HERE""+
   "}"+
"}"
};
  payload = JSON.stringify(payload);
    var params = {
      TargetArn: 'PUT THE ENDPOINT ARN HERE',
      Subject: 'foo2',
      MessageStructure: 'json',
      Message: payload
    }
    sns.publish(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });
};

最新更新