繁体   English   中英

Serverless Framework 不会在 Lambda 之前使用队列触发器创建 SQS 队列

[英]Serverless Framework does not create SQS queue before Lambda with queue trigger

使用无服务器框架,如何使我的 Lambda function 依赖于resources部分的 SQS 队列,因为它是 function 本身的触发器?

在我的serverless.yaml中,我定义了一个新队列和 Lambda function。

然后,我想将队列用作我的 Lambda function 的事件源(触发器)。

我通过手动创建队列 ARN 来做到这一点:

functions:
  consumer:
    handler: App\Service\Consumer
    events:
      - sqs:
          arn:
            Fn::Join:
              - ':'
              - arn:aws:sqs
              - Ref: AWS::Region
              - Ref: AWS::AccountId
              - ${opt:stage}-skill-assigner

并在资源中创建队列:

resources:
  Resources:
    SkillAssignerQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: ${opt:stage}-skill-assigner

如果我在将其用作 function 触发器之前在部署中创建队列,这会很好地工作。

但是,如果我尝试同时部署它们,它会在尝试创建事件源映射时失败并出现此错误:

提供的请求无效:ReceiveMessage 时出错。 SQS 错误代码:AWS.SimpleQueueService.NonExistentQueue。 SQS 错误消息:此 wsdl 版本不存在指定的队列。

Fn::Join启用字符串连接,这不会通知无服务器框架 (SF) function 对队列的依赖性。

我们可以直观地看到,但它需要以声明方式完成。

要使此链接对 SF 显而易见,请改用Fn::GetAtt:

它将通知 Serverless Framework 关于 Lambda function 对 SQS 队列的依赖。

这应该有效:

functions:
  consumer:
    handler: App\Service\Consumer
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - SkillAssignerQueue
              - Arn
resources:
  Resources:
    SkillAssignerQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: ${opt:stage}-skill-assigner

Serveless Framework 可以自动为您创建队列。 无需在资源中定义它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM