如何解决使用一个 Lambda 函数处理 AWS 多条 SQS 消息
我已经设置了一个 SQS 队列,只要有文件上传,就会在其中推送 S3 路径。
所以我有一个设置,我将接收 10 个小 csv 文件,我想将它们保存在 SQS 队列中,并仅在所有文件在特定时间到达时触发一次 lambda,比方说 5 分钟。
这是我的 CF 代码
LambdaFunctionEventSourceMapping:
Type: AWS::Lambda::EventSourceMapping
Properties:
BatchSize: 5000
MaximumBatchingWindowInSeconds: 300
Enabled: true
EventSourceArn: !GetAtt EventQueue.Arn
FunctionName: !GetAtt QueueConsumerLambdaFunction.Arn
EventQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: Event-Queue
DelaySeconds: 10
VisibilityTimeout: 125
ReceiveMessageWaitTimeSeconds: 10
QueueConsumerLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: queue-consumer
Runtime: python3.7
Code: ./queue-consumer
Handler: main.lambda_handler
Role: !GetAtt QueueConsumerLambdaExecutionRole.Arn
Timeout: 120
MemorySize: 512
ReservedConcurrentExecutions: 1
部署工作正常,但如果我将 3 个文件推送到 S3 存储桶,SQS 会异步触发 3 个我不想要的不同 lambda 函数。我需要一个 lambda 函数来包含队列中作为 S3 事件结果的所有消息并处理它们。我的 SQS 配置有问题吗?
解决方法
您所观察到的可能是由于 AWS 正在使用 five parallel threads 查询您的 SQS 队列。这些线程与 concurrency
设置分开,您无法控制这些线程。总是有 5 个。
因此每个线程都会从队列中获取一些消息,然后将依次使用这些消息调用您的函数。遗憾的是,您无法改变它的工作方式,因为这就是 AWS 端 sqs 和 lambda 的工作方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。