您是否可以使用由node.js支持的AWS Lambda函数将消息发布到SNS主题?
Answers:
是的,您可以编写发布到SNS主题的Lambda函数。在Lambda中运行的代码可以访问完整的适用于Java或Javascript的AWS开发工具包,无论您使用的是哪个函数。您只需要确保授予执行功能的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控制台上的“创建Lambda函数”按钮提供的函数蓝图。
首先,您需要使用适当的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
代码。
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:Publish
。
.done
到.succeed
,但为我工作
TargetArn
,但是,我遇到了一个例外,即Lambda函数没有调用SNS通知的权限。这仅在TopicArn
使用AWS LAmbda或将通知发送到个人终端时才可行吗?