Node.js 无法从aws lambda函数触发aws sqs
我有一个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');
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地址的访问”。