[英]Why does SQS FIFO queue with lambda trigger cannot guarantee only once delivery?
[英]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.