Javascript 如何从Node.js Lambda函数发送SNS主题消息
创建了一个SNS主题来调用订阅的Lambda函数,该函数将用户添加到Cognito中的组中。使用web浏览器中的控制台向主题发送消息可以正常工作。将调用Lambda函数并将用户添加到组中 下面的Lambda函数试图通过向SNS主题本身发送消息来替换web控制台,该消息应以用户被添加到组中结束。在Lambda web控制台中运行函数时,函数返回以下消息: 执行结果:成功(日志) 但是,用户未成功添加到组中。为什么Lambda返回成功,但消息没有发送到SNS主题?有什么配置错误吗Javascript 如何从Node.js Lambda函数发送SNS主题消息,javascript,amazon-web-services,aws-lambda,amazon-sns,Javascript,Amazon Web Services,Aws Lambda,Amazon Sns,创建了一个SNS主题来调用订阅的Lambda函数,该函数将用户添加到Cognito中的组中。使用web浏览器中的控制台向主题发送消息可以正常工作。将调用Lambda函数并将用户添加到组中 下面的Lambda函数试图通过向SNS主题本身发送消息来替换web控制台,该消息应以用户被添加到组中结束。在Lambda web控制台中运行函数时,函数返回以下消息: 执行结果:成功(日志) 但是,用户未成功添加到组中。为什么Lambda返回成功,但消息没有发送到SNS主题?有什么配置错误吗 var AWS =
var AWS = require('aws-sdk');
exports.handler = async (event) => {
AWS.config.update({region: 'ca-central-1'});
var params = {
Message: 'Example',
TopicArn: 'arn:aws:sns:ca-central-1:example:example'
};
var publishTextPromise = new AWS.SNS({apiVersion: '2010-03-31'}).publish(params).promise();
publishTextPromise.then(
function(data) {
console.log(`Message ${params.Message} sent to the topic ${params.TopicArn}`);
console.log("MessageID is " + data.MessageId);
}).catch(
function(err) {
console.error(err, err.stack);
});
};
Lambda执行环境可能没有等待承诺返回。尝试。要允许函数向SNS主题发送消息,请向函数的执行角色添加一个策略,并授予相应的权限,如下所示:
"Action" : [
"sns:Publish",
],
"Effect" : "Allow",
"Resource" : [
{ "Ref" : "arn:aws:sns:ca-central-1:example:example" }
]
如果lambda函数是在CloudFormation模板中定义的,那么您可以在这里添加它
如果lambda函数是在AWS控制台中创建的,请转到“权限”选项卡,并使用链接导航到执行角色,然后向其添加上述权限:
CloudWatch中有日志吗?另外,Lambda函数是否有权发布到SNS主题?@Christian将SNS权限添加到Lambda函数的最佳方式是什么?请参阅下面的答案。或者只需在
publishTextPromise前面插入一个return
。然后