您是否可以使用由node.js支持的AWS Lambda函数向SNS主题发布消息?
答案 0 :(得分:87)
是的,您可以编写一个发布到SNS主题的Lambda函数。 Lambda中运行的代码可以访问Java或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消息。您可以查看通过Lambda控制台上的创建Lambda函数按钮提供的sns-message
函数蓝图。
答案 1 :(得分:42)
首先,您需要授予example1
个Lambda IAM role
权限,以便使用正确的SNS topic
发布到IAM policy
。
{
"Action" : [
"sns:Publish",
"sns:Subscribe"
],
"Effect" : "Allow",
"Resource" : [
{ "Ref" : "<your SNS topic ARN>" }
]
}
然后,您可以使用以下代码SNS publish
从您的其他SNS topic
或Lambda
代码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)