ale*_*han 43 locking amazon-web-services aws-lambda
我有一个由PUT触发到S3存储桶的Lambda函数.
我想限制这个Lambda函数,以便它一次只运行一个实例 - 我不希望两个实例同时运行.
我已经看过Lambda配置和文档了,但我看不出任何明显的东西.我可以编写自己的锁定系统,但如果这已经是一个已解决的问题,那就太好了.
如何限制Lambda的并发调用次数?
Rob*_*hen 54
AWS Lambda现在支持各个功能的并发限制:https: //aws.amazon.com/about-aws/whats-new/2017/11/set-concurrency-limits-on-individual-aws-lambda-functions/
小智 18
我建议你使用Kinesis Streams(或者DynamoDB + DynamoDB Streams,它们基本上具有相同的行为).
您可以将Kinesis Streams视为队列.好的一面是,你可以使用的Kinesis流作为触发你LAMBDA功能.因此,插入此队列的任何内容都将按顺序自动传递给您的函数.因此,您将能够逐个处理这些S3事件,一个Lambda执行一个接一个地执行(一次一个实例).
为了做到这一点,你需要创建一个Lambda函数,其目的很简单,即获取S3 Events并将它们放入Kinesis Stream中.然后,您将Kinesis Stream配置为Lambda触发器.
当您将Kinesis Stream配置为Lambda触发器时,我建议您使用以下配置:
有关AWS May网络研讨会系列的更多信息- 使用Amazon Kinesis和AWS Lambda进行流数据处理.
我希望这可以帮助任何有类似问题的人.
PS请记住,Kinesis Streams有自己的定价.使用DynamoDB + DynamoDB流可能会更便宜(甚至免费,因为DynamoDB 的非过期免费层).
Mar*_*k B 11
不,这是我非常希望看到Lambda支持的事情之一,但目前还没有.其中一个问题是,如果发生了大量的S3 PUT操作,AWS必须以某种方式排队所有Lambda调用,并且目前不支持这种情况.
如果您在Lambda函数中构建了一个锁定机制,那么对于由于锁定而未处理的请求,您将如何处理?你会把那些S3通知扔掉吗?
大多数人建议的解决方案是让S3将通知发送到SQS队列,然后将Lambda函数安排定期运行,例如每分钟一次,并检查队列中是否有需要处理的项目.
或者,让S3将通知发送到SQS并且只有一个t2.nano EC2实例,其中单线程服务轮询队列.
小智 5
我知道这是一个旧线程,但我遇到了它,试图弄清楚如何确保我的时间排序 SQS 消息按照从 FIFO 队列出来的顺序进行处理,而不是通过多个 Lambda 同时/无序处理线程正在运行。
根据文档:
对于 FIFO 队列,Lambda 按照接收消息的顺序将消息发送到您的函数。当您向 FIFO 队列发送消息时,您需要指定消息组 ID。Amazon SQS 确保同一组中的消息按顺序传送到 Lambda。Lambda 将消息分组,并为一组一次仅发送一批。如果您的函数返回错误,该函数会在 Lambda 接收来自同一组的其他消息之前尝试对受影响的消息进行所有重试。
您的函数可以根据活动消息组的数量调整并发量。
链接: https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
因此,本质上,只要您使用 FIFO 队列并使用相同的 MessageGroupID 提交需要保持顺序的消息,SQS/Lambda 就会自动处理排序,无需任何额外的设置。
归档时间: |
|
查看次数: |
11733 次 |
最近记录: |