当前位置: 首页 > 知识库问答 >
问题:

通过Amazon Lambda触发Amazon SNS消息

雷浩思
2023-03-14

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

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

说到文档,我遇到了麻烦;亚马逊的文档只讨论了如何通过SNS触发Lambda代码,而不是反过来。有没有人举个例子来说明我如何做到这一点?

共有3个答案

季骏祥
2023-03-14

您可以使用下面的lambda向用户推送SNS消息,但您必须知道该用户的endpointARN是什么。例如,如果在Android应用程序中,当用户登录时,您将让该应用程序向您的后端发送一个GCM(Google Cloud Messaging)令牌(例如,通过触发lambda的API调用)。然后,您连接到GCM的后端可以使用此令牌查找哪个endpointARN对应于此类用户,并将其放在下面的lambda中。或者,您可以让应用程序将endpointARN直接发送到您的后端,尽管我认为它可能不太安全。确保您授予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
    });

};
仲孙英才
2023-03-14

是的,您可以使用AWS Lambda来实现您想要的。您还需要授予适当的IAM权限,允许您的Lambda IAM角色向您发布消息。

示例:SNS发布IAM策略:

{
    "Statement":[ {
        "Effect":"Allow",
        "Action":"sns:Publish",
        "Resource":"arn:aws:sns:*:<your account id>:<your topic id>"
    } ]
}
柯宜年
2023-03-14

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

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

 类似资料:
  • 问题内容: 我正在为我的数据库开发GUI设计。 在设计了大多数框架并对其进行调试之后,我释放了我需要使用 ENTER 键(而不是仅单击它)将选项添加到“触发”按钮。 我应该怎么做?我当前正在为按钮使用 MouseListener ,并希望添加一个在按下ENTER键时执行相同操作的Listener。谢谢 问题答案: 使用Enter键调用按钮的动作是LAF问题。Windows支持该功能,但是在默认的M

  • 我通过jira触发器插件将jenkins作业设置为触发器<但是jenkins作业没有被触发,尽管它从JIRA那里获得了webhook事件。 我检查了如下内容。 Jenkins得到了网络钩子事件。我在詹金斯日志上检查了这个。 我试着为詹金斯设置各种方式,但都失败了。我想知道如何设置jira触发器 > 测试环境 吉拉:6.4.11 我的测试用例是。。。 Jenkins工作设置 选中:向JIRA添加注释

  • 我正在为我的数据库开发GUI设计。 在设计了大部分框架并调试它们之后,我发布了我需要使用ENTER键添加触发按钮的选项,而不是只点击它。 我应该怎么做?我目前正在使用MouseListener作为我的按钮,并希望添加一个在按ENTER键时执行相同操作的监听器。谢谢

  • 我正在开发一个NativeScript Android应用程序,其中我希望用户能够在按下一个按钮后打开WhatsApp联系人(只知道电话号码)。我目前使用Nativescript-open-app打开WhatsApp。是否也可以打开对话? 要打开WhatsApp,我使用以下代码(也许可以修改“com.WhatsApp”?):

  • 我想通过javascript代码发送gcm消息。为此,我们需要发布一个json对象。 gcm文档:http://developer.android.com/google/gcm/adv.html.中给出了url和json对象格式 出于测试目的,我编写了一个完美运行的Java代码。但是爪哇脚本代码不起作用。如果有人有一些示例工作代码(gcm的爪哇脚本),请发布。 脚本代码 :

  • 我现在已经在我的应用程序中设置了Firebase通知,当我发送消息时,消息会发送给我的应用程序的所有用户。(我目前通过Firebase控制台发送消息。我想用另一种不涉及Firebase控制台的方式发送推送通知,我相信HTTP Post是一种简单的方式。如何使用HTTP POST远程发送推送通知?