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

Can you publish a message to an SNS topic using an AWS Lambda function backed by node.js?

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

是的,您可以编写一个发布到 SNS 主题的 Lambda 函数。 Lambda 中的代码 运行 可以访问 Java or Javascript 的完整 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 消息。您可以查看 sns-message 函数蓝图,它通过 Lambda 控制台上的 Create a Lambda function 按钮提供。

首先,您需要授予 Lambda IAM role 使用适当的 IAM policy 发布到 SNS topic 的权限。

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

然后您可以使用以下代码从您的其他 LambdaNode.js 代码 SNS publish 到您的 SNS topic

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);
    }
});

要将 SNS 响应发送到 lambda,请使用:

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

(已回答