【发布时间】:2019-12-02 15:43:10
【问题描述】:
我正在从 AWS SAM 创建 lambda,大多数情况下它们运行良好,但我不确定如何授予这些 lambda 由 SQS 触发的权限。每当我构建/打包/部署时,我都会尝试从控制台手动添加 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 文件的指南。我想知道这个错误是否意味着我需要在 build/package/deploy 之前向 template.yaml 添加策略。所以我在 Resources:MyFunction:Properties:policies 下的 yaml 中添加了以下策略:
- 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 做到这一点是唯一的警告。我很欣赏在控制台上制作 lambda 会使这变得容易得多,但它不适合版本控制。
到目前为止,我已经查看了以下内容,但看不到明显的解决方案,这些信息似乎不太适合我的用例; SO question 1, SO question 2, aws alter stack tutorial, aws cloudformation templates, dzone tutorial, aws docs.
真的会感谢任何指针/帮助/操作指南/完整的工作解决方案吗?
非常感谢
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-sqs aws-sam-cli aws-sam