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



使用无服务器框架,我如何使我的Lambda函数依赖于来自resources节的SQS队列,因为它是函数本身的触发器?

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

然后,我想使用队列作为Lambda函数的事件源(触发器)。

我通过手动创建队列ARN来实现:

functions:
consumer:
handler: AppServiceConsumer
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

如果在将队列用作函数触发器之前在部署中创建队列,则可以正常工作。

但是如果我尝试部署它们两个,当它试图创建事件源映射时,它会失败并出现以下错误:

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

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

我们视觉可以看到,但它需要以声明的方式完成

为了使这个链接对SF明显,使用Fn::GetAtt:代替。

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

这个应该可以工作:

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

无服务器框架可以自动为您创建队列。不需要在resources

中定义它

相关内容

  • 没有找到相关文章

最新更新