使用API​​网关和无服务器框架的AWS Lambda的速率超过

时间:2019-03-14 11:53:40

标签: amazon-web-services lambda aws-api-gateway serverless-framework

当我尝试调用具有HTTP事件的方法时,结果为500 Internal server error

在CloudWatch日志上,它显示Recoverable error occurred (Rate Exceeded.)

当我尝试调用不带lambda的函数时,它会以响应的方式执行。

这是我的无服务器配置:

config

1 个答案:

答案 0 :(得分:3)

您已将Lambda的reservedConcurrency设置为0。这将防止您的Lambda被调用。通常,在调用函数时将其设置为0很有用,但是您不确定为什么要立即停止它。

如果要调用它,请将reservedConcurrency更改为一个正整数(默认情况下,它可以是一个正整数<= 1000,但是您可以通过与AWS联系来增加此限制)或仅删除{ .yml文件中的{1}}属性,因为它将使用默认值。

为什么仍然要使用reservedConcurrency?好吧,假设您的Lambda函数是由API Gateway的请求触发的。假设您每秒收到400个(高峰时间)请求,并且每次请求都会触发另外两个Lambda函数,一个函数为给定图像生成缩略图,另一个函数在DynamoDB中插入一些元数据。从理论上讲,您将同时运行1200个Lambda函数(假设您所有的Lambda函数都在不到一秒钟的时间内完成了执行)。这会导致节流,因为Lambda函数的默认并发执行为1000。但是缩略图生成与API Gateway发出的请求一样重要吗?很有可能不是这样,因为它自然是最终一致的任务,因此您可以在缩略图Lambda上将reservedConcurrency设置为仅200,这样您就不会用完并发性,这意味着其他功能也可以旋转来完成某些事情在给定的时间点更有用(在我们的示例中,接收HTTP请求比生成缩略图更重要)。然后可以在API网关触发的功能和将数据插入DynamoDB的功能之间分配剩下的800个并发功能,从而避免对重要内容进行节流并最终使不太重要的内容保持一致。