【发布时间】:2017-03-20 03:11:42
【问题描述】:
其他人解决了以下问题吗?
我的 SNS 主题 充满了来自 S3 的事件,并且有一个订阅了该主题的 Lambda 函数,并且当有数千个事件被放入此主题,由于超出并发限制,lambda 函数被限制。
我不想请求增加并发执行的限制,但我会减少主题的并发消耗,但我没有找到如何做的信息它。谢谢。
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-sns aws-lambda
其他人解决了以下问题吗?
我的 SNS 主题 充满了来自 S3 的事件,并且有一个订阅了该主题的 Lambda 函数,并且当有数千个事件被放入此主题,由于超出并发限制,lambda 函数被限制。
我不想请求增加并发执行的限制,但我会减少主题的并发消耗,但我没有找到如何做的信息它。谢谢。
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-sns aws-lambda
关于 SNS 的几个选项:
1) SNS 最大接收率
设置SNS Maximum Receive Rate。这将限制发送给订阅者的 SNS 消息,但如果您有太多消息,以至于在处理它们之前它们将被丢弃,则可能不是一个好选择。来自文档:
您可以设置 Amazon SNS 每秒发送的最大消息数 通过设置最大接收速率发送到订阅的端点 环境。 Amazon SNS 保存等待传送的消息 到一个小时。保留超过一小时的消息将被丢弃。
如果您一次只接收数千个事件,将最大接收速率设置为 Lambda 的 default concurrent execution limit 的“100”可能值得一试。
正如@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。
【讨论】: