Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Node.js Lambda函数发送SNS主题消息_Javascript_Amazon Web Services_Aws Lambda_Amazon Sns - Fatal编程技术网

Javascript 如何从Node.js 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 =

创建了一个SNS主题来调用订阅的Lambda函数,该函数将用户添加到Cognito中的组中。使用web浏览器中的控制台向主题发送消息可以正常工作。将调用Lambda函数并将用户添加到组中

下面的Lambda函数试图通过向SNS主题本身发送消息来替换web控制台,该消息应以用户被添加到组中结束。在Lambda web控制台中运行函数时,函数返回以下消息:

执行结果:成功(日志)

但是,用户未成功添加到组中。为什么Lambda返回成功,但消息没有发送到SNS主题?有什么配置错误吗

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
。然后