如何限制主题的消费率?

nik*_*ndr 7 amazon-s3 amazon-web-services amazon-sns aws-lambda

还有其他人解决了以下问题吗?
我有SNS主题 填充了来自S3的事件,并且有关于此主题订阅的Lambda函数,当有数千个事件被放入此主题时,lambda函数因超出并发限制而受到限制.
我不想要求并发执行的限制增加,但我会减少主题的并发消耗,但我没有找到信息如何做到这一点.谢谢.

Ant*_*ace 9

有关SNS的几个选项:

1)SNS最大接收率

设置SNS最大接收速率.这将限制发送给订阅者的SNS消息,但如果您有这么多消息,它们将被丢弃,然后才能处理它们,这可能不是一个很好的选择.从文档:

您可以通过设置"最大接收速率"设置来设置Amazon SNS每秒向订阅端点发送的最大邮件数.Amazon SNS保留等待交付长达一小时的消息.保留超过一小时的邮件将被丢弃.

如果您一次只获得数千个事件,则将最大接收速率设置为Lambda的默认并发执行限制为"100"可能值得一试.

正如@kndrk所说,这种限制目前仅适用于SNS主题的HTTP/HTTPS订阅者.要解决此问题,您可以通过AWS API Gateway公开lambda函数,并将该端点订阅到SNS主题,而不是直接订阅lambda函数.

2)来自SQS的流程

将SQS队列订阅到SNS主题并处理来自队列的消息,而不是直接来自sns主题.SQS ReceiveMessage的单个调用一次只能处理10条消息,因此您可以更轻松地进行限制.


值得注意的是,您可以将S3 Events直接发布到AWS Lambda.

  • 不幸的是,这仅适用于 HTTP(s) 端点。Lambda 订阅者根本没有受到限制。 (2认同)