Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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
Node.js 无法从aws lambda函数触发aws sqs_Node.js_Amazon Web Services_Aws Lambda_Amazon Sqs - Fatal编程技术网

Node.js 无法从aws lambda函数触发aws sqs

Node.js 无法从aws lambda函数触发aws sqs,node.js,amazon-web-services,aws-lambda,amazon-sqs,Node.js,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个aws lambda函数,需要触发aws sqs,但我总是得到以下消息: Fail Send MessageAccessDenied: Access to the resource https://sqs.eu-west-1.amazonaws.com/ is denied 这是我的lambda: var QUEUE_URL = 'https://sqs.eu-west-1.amazonaws.com/*****/*****' var AWS = require('aws-sdk');

我有一个aws lambda函数,需要触发aws sqs,但我总是得到以下消息:

Fail Send MessageAccessDenied: Access to the resource https://sqs.eu-west-1.amazonaws.com/ is denied
这是我的lambda:

var QUEUE_URL = 'https://sqs.eu-west-1.amazonaws.com/*****/*****'
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'eu-west-1'});


exports.handler = function(event, context) {

  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    } else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS
    }
  });
}

有人知道这个问题是什么,或者是aws.sqs的好资源吗?我是否需要传递凭据,以及如何在aws.sqs中设置队列url?

是否为Lambda函数分配了执行角色,以允许它向sqs队列发送消息?详细说明如何执行此操作,特别是设置IAM角色的部分。

是否为Lambda函数分配了执行角色,使其能够向SQS队列发送消息?详细说明如何操作,特别是设置IAM角色的部分。

我刚找到解决方案,我必须向队列添加权限,因此您向队列添加了权限,以允许Lambda函数向队列添加消息?我想这是一种方法。很高兴你找到了!您通常会将SQS队列权限添加到Lambda函数的IAM角色,而不是添加对SQS队列资源本身的权限,从而允许Lambda角色访问队列。@jarmod我同意,并几乎将其作为注释添加,但这似乎是一种最佳做法,你知道为什么它比在资源策略中更受欢迎吗?@AshamanKingpin这里的区别是基于身份的策略和基于资源的策略。首先,并非所有服务都支持基于资源的策略。在我看来,基于资源的策略的关键用例是a)跨帐户访问,这样其他用户就不会在您的帐户中担任IAM角色,从而在过程中失去自己的IAM权限;b)当您希望在资源的所有用户中声明基本策略时,例如“需要加密”或“限制对以下IP地址的访问“。我刚刚找到解决方案,我必须向队列添加权限,因此您向队列添加了权限,以允许Lambda函数向队列添加消息?我想这是一种方法。很高兴你找到了!您通常会将SQS队列权限添加到Lambda函数的IAM角色,而不是添加对SQS队列资源本身的权限,从而允许Lambda角色访问队列。@jarmod我同意,并几乎将其作为注释添加,但这似乎是一种最佳做法,你知道为什么它比在资源策略中更受欢迎吗?@AshamanKingpin这里的区别是基于身份的策略和基于资源的策略。首先,并非所有服务都支持基于资源的策略。在我看来,基于资源的策略的关键用例是a)跨帐户访问,这样其他用户就不会在您的帐户中担任IAM角色,从而在过程中失去自己的IAM权限;b)当您希望在资源的所有用户中声明基本策略时,例如“需要加密”或“限制对以下IP地址的访问”。