相关疑难解决方法(0)

限制从 AWS SQS 触发的 AWS Lambda 的并发调用(忽略保留并发)?

对我来说,当我开始时,这似乎是一个简单的用例,但结果比我预期的要困难得多。

问题

我有一个 AWS SQS 作为触发工作线程 AWS Lambda 的作业队列。然而,由于工作 lambdas 共享不可扩展的资源,因此将并发运行的 lambdas 的数量限制为(例如)不超过 5 个同时运行的 lambdas 是很重要的。

根据Lambda 函数的并发管理,足够简单

预留并发也限制了函数的最大并发,适用于整个函数

但是,将Reserved concurrency-property设置为 5 似乎完全被 SQS 忽略,Messages in Flight在我的例子中, queue -property 根据放入队列的消息数量显示接近 20-30 个并发执行。

我最接近的解决方案是使用 SQS FIFO 队列并将MessageGroupId设置为随机选择或在 1-5 之间交替的值。但是,由于工作负载不均匀,这不是最佳选择,因为最好按实际工作负载而不是偶然分配并发。

我还尝试使用 AWS Step Functions,因为Map-state有一个 MaxConcurrency 参数,它似乎在小型作业队列上运行良好,但由于每个状态的输入/输出限制为 32kb,这在我的使用中不可行-案件。

有没有人找到更好的或替代的解决方案?还有其他方法Reserved concurrency应该使用吗?

相似的

以下是我发现的一些类似问题,但我认为我的问题不同,因为我对限制调用总数不感兴趣,并且(虽然我自己没有尝试过)我不明白为什么从 S3 或 Kinesis Steam 触发会表现得与 SQS 不同。

amazon-web-services aws-lambda

5
推荐指数
1
解决办法
974
查看次数

标签 统计

amazon-web-services ×1

aws-lambda ×1