您是否可以使用node.js支持的AWS Lambda函数向SNS主题发布消息?

时间:2015-07-17 21:18:17

标签: amazon-web-services aws-lambda amazon-sns

您是否可以使用由node.js支持的AWS Lambda函数向SNS主题发布消息?

3 个答案:

答案 0 :(得分:87)

是的,您可以编写一个发布到SNS主题的Lambda函数。 Lambda中运行的代码可以访问JavaJavascript的完整AWS SDK,无论您的函数使用哪个。您只需确保赋予执行函数访问权限的IAM角色以发布到您的主题。在Javascript中:

console.log("Loading function");
var AWS = require("aws-sdk");

exports.handler = function(event, context) {
    var eventText = JSON.stringify(event, null, 2);
    console.log("Received event:", eventText);
    var sns = new AWS.SNS();
    var params = {
        Message: eventText, 
        Subject: "Test SNS From Lambda",
        TopicArn: "arn:aws:sns:us-west-2:123456789012:test-topic1"
    };
    sns.publish(params, context.done);
};

也可以使用Lambda函数处理SNS消息。您可以查看通过Lambda控制台上的创建Lambda函数按钮提供的sns-message函数蓝图。

答案 1 :(得分:42)

首先,您需要授予example1Lambda IAM role权限,以便使用正确的SNS topic发布到IAM policy

{
    "Action" : [
        "sns:Publish",
        "sns:Subscribe"
    ],
    "Effect" : "Allow",
    "Resource" : [
        { "Ref" : "<your SNS topic ARN>" }
    ]
}

然后,您可以使用以下代码SNS publish从您的其他SNS topicLambda代码Node.js开始使用{/ 1}}。

var message = {};
var sns = new AWS.SNS();
sns.publish({
    TopicArn: "<your SNS topic ARN>",
    Message: JSON.stringify(message)
}, function(err, data) {
    if(err) {
        console.error('error publishing to SNS');
        context.fail(err);
    } else {
        console.info('message published to SNS');
        context.succeed(null, data);
    }
});

答案 2 :(得分:0)

要将SNS响应发送到lambda,请使用以下命令:

await sns.publish({
    Message: snsPayload,
    MessageStructure: 'json',
    TargetArn: endPointArn}).promise()

(答案为here