【问题标题】:Unable to trigger aws sqs from aws lambda function无法从 aws lambda 函数触发 aws sqs
【发布时间】:2020-02-15 12:00:47
【问题描述】:

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

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?

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

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

    【讨论】:

    • 我刚刚找到解决方案,我必须向我的队列添加权限
    • 所以您向队列添加了允许您的 Lambda 函数向队列添加消息的权限?我想这是一种方法。很高兴你找到它!
    • 您通常会将 SQS 队列权限添加到 Lambda 函数的 IAM 角色,而不是添加对 SQS 队列资源本身的权限,从而允许 Lambda 角色访问队列。
    • @jarmod 我同意并几乎将其添加为评论,但尽管这似乎是最佳实践,但您知道为什么它比在资源策略中更可取吗?
    • @AshamanKingpin 这里的区别是基于身份的策略和基于资源的策略。首先,并非所有服务都支持基于资源的策略。在我看来,基于资源的策略的关键用例是 a) 跨账户访问,以便其他用户在您的账户中没有承担 IAM 角色,因此在此过程中失去自己的 IAM 权限;b) 何时您想在资源的所有用户中声明一项基本策略,例如“要求加密”或“限制对以下 IP 地址的访问”。
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 2020-05-17
    • 2018-01-15
    • 2018-03-01
    • 2020-07-28
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多