您能使用由Node.js支持的AWS Lambda函数向SNS主题发布消息吗?
您能使用由Node.js支持的AWS Lambda函数向SNS主题发布消息吗?
是的,您可以编写一个Lambda函数来发布到SNS主题。运行在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控制台上提供的sns-message
函数蓝图,通过创建Lambda函数按钮访问该蓝图。
首先,您需要授予您的Lambda IAM角色
发布到您的SNS主题
的权限,使用适当的IAM策略
。
{
"Action" : [
"sns:Publish",
"sns:Subscribe"
],
"Effect" : "Allow",
"Resource" : [
{ "Ref" : "<your SNS topic ARN>" }
]
}
接下来,您可以使用以下代码从其他 Lambda
或 Node.js
代码向您的 SNS 主题
发布 SNS 消息
。
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
就可以了。 - adamkonrad.done
切换为.succeed
,但对我起作用了。 - Alex Moore-Niemi"Resource": "arn:aws:sns:*:your-account-id:*"
。请注意提及政策,加1分。 - Metro Smurf```
```
await sns.publish({
Message: snsPayload,
MessageStructure: 'json',
TargetArn: endPointArn}).promise()
(已在此处回答)
TargetArn
发送通知,但是出现了异常,Lambda函数没有调用SNS通知的权限。这只能通过TopicArn
实现吗?还是我们可以使用AWS Lambda向单个端点发送通知? - Parthapratim Neog