还有其他人解决了以下问题吗?
我有 SNS主题,其中包含来自 S3 的事件,并且 Lambda函数已订阅此主题,并且当有数千个事件被发送到此主题时主题,lambda函数由于超出并发限制而受到限制。
我不想请求限制增加并发执行但我会减少同时消耗主题,但我没有找到信息如何做到这一点。感谢。
答案 0 :(得分:9)
关于SNS的几个选项:
1) SNS最大接收率
设置SNS Maximum Receive Rate。这将限制发送给订阅者的SNS消息,但如果您有这么多消息,它们将被丢弃,然后才能处理它们,这可能不是一个很好的选择。来自文档:
您可以设置Amazon SNS每秒的最大邮件数 通过设置最大接收速率发送到订阅的端点 设置。 Amazon SNS保留等待发送的消息 一个小时保留一个多小时的邮件将被丢弃。
如果您一次只收到数千个事件,请将最大接收率设置为' 100'的Lambda' default concurrent execution limit。可能值得一试。
正如@kndrk所说,此限制目前仅适用于SNS主题的HTTP / HTTPS订阅者。要解决此问题,您可以expose your lambda function via AWS API Gateway并将该端点订阅到SNS主题,而不是直接订阅lambda函数。
2)来自SQS的流程
Subscribe an SQS queue to the SNS topic并处理来自队列的消息,而不是直接来自sns主题。 SQS ReceiveMessage的单个调用一次只能处理10条消息,因此您可以更轻松地进行限制。
值得注意的是,您可以发布S3 Events directly to AWS Lambda。