如何使用cloudformation / SAM创建与通过SAM创建的lambda一起使用的SQS队列?

时间:2019-07-24 13:07:33

标签: amazon-web-services aws-lambda amazon-sqs aws-sam-cli aws-sam

我正在从AWS SAM创建lambda,大多数情况下它们运行良好,但是我不确定如何为SQS触发的这些lambda授予权限。每当我进行构建/打包/部署时,我都尝试从控制台手动添加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 1SO question 2aws alter stack tutorialaws cloudformation templatesdzone tutorialaws docs

真的会感激任何指针/帮助/操作指南/完整的解决方案吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

您的活动部分应该是这样

InteractionController

“ QUEUE_NAME”是您在“云形成”模板中的SQS队列的逻辑名称