我正在从AWS SAM创建lambda,大多数情况下,它们工作得很好,但我不确定如何授予这些lambda由SQS触发的权限。每当我构建/package/deploy时,我都会尝试从控制台手动添加SQS触发器,并得到以下错误:
An error occurred when creating the trigger: The provided execution role does not have permissions to call ReceiveMessage on SQS (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException我完全意识到使用SAM创建SQS也是理想的,但是我找不到像样的指南,特别是关于如何构建yaml文件以用于部署的指南。我想知道这个错误是否意味着我需要在构建/打包/部署之前向template.yaml添加一个策略。因此,我在yaml的Resources:MyFunction:Properties: policies下添加了以下策略:
- SQSSendMessagePolicy:
QueueName: "*"
- SQSPollerPolicy:
QueueName: "*"我从here得到了这些,但我看不到“从SQS接收消息”的策略,我不确定还能从哪里获得?或者这就是问题所在?
我还尝试将以下内容添加到yaml中:
Events:
MySQSEvent:
Type: SQS
Properties:
Queue:
!GetAtt arn:aws:sqs:eu-west-1:my_arn.my_queue
BatchSize: 10但是,当我尝试部署时,这会显示以下错误:
Template error: instance of Fn::GetAtt references undefined resource arn:aws:cloudformation:eu-west-1:my_arn我曾尝试寻找通过cloudformation设置SQS的指南,但好的指南似乎非常难以捉摸。周围的那些似乎过于冗长和复杂,使它们不适合新用户。
我所要做的就是将一个事件列表传递给一个SQS (可能带有一个lambda),然后它会对另一个lambda进行排队,以10个为一批(总共大约20,000个)接收这些事件。我需要能够用SAM做到这一点,这是唯一的警告。我很欣赏在控制台上做lambdas会让这件事变得容易得多,但它不适合版本控制。
到目前为止,我已经看过以下内容,没有明显的解决方案,这些信息似乎不太适合应用于我的用例:SO question 1、SO question 2、aws alter stack tutorial、aws cloudformation templates、dzone tutorial、aws docs。
如果您有任何建议/帮助/how-to-guides/完整的工作解决方案,您会很感激吗?
非常感谢
发布于 2019-07-25 00:37:56
您的事件部分应该如下所示
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt QUEUE_NAME.Arn其中,QUEUE_NAME是云形成模板中的队列的逻辑名称
https://stackoverflow.com/questions/57183722
复制相似问题