AWS Lambda Task在6.00秒后超时

dar*_*ari 8 lambda amazon-web-services amazon-dynamodb serverless-framework api-gateway

我正在使用无服务器框架.我的Lambda函数连接到DynamoDB表以更新表中的项目.表的读写容量单位为5,禁用auto_scaling.AWS Lambda函数分配了128MB内存.

我已经使用Jmeter进行性能测试.我已经同时发送了1000个请求,一些响应给了我完美的输出,而其他给出了内部服务器错误(502 Bad Gateway).我还分析了cloudwatch的日志,只获得了Task Timeout错误.任何人都可以建议我为什么我得到这个错误,以及如何解决它?

Dun*_*dan 11

使用无服务器框架时,AWS Lambda函数的默认超时为6秒.只需将其更改为更高的值,如文档中所述:

functions:
  hello:
    ...
    timeout: 10 # optional, in seconds, default is 6
Run Code Online (Sandbox Code Playgroud)


Mik*_*scu 9

由于您提到您的 DynamoDB 表只配置了 5 个 WCU,这意味着每秒只允许 5 次写入。

DynamoDB 确实提供了突发容量,允许您使用 300 秒的累积容量(在 5 WCU 下相当于 1500 个总写入请求),但一旦这些容量耗尽,它就会开始节流。

DynamoDB 客户端具有内置的自动重试功能,具有指数退避功能,并且它足够智能,可以识别节流,因此如果重复节流,它会将重试减慢到单次写入可能需要几秒钟才能成功完成的程度。

您的 Lambda 函数很可能在 6 秒时超时,因为该函数正在等待重试 Dynamo。

因此,在进行负载测试时,请确保您的依赖项都得到了适当的扩展。在每秒 1000 个请求时,您应该确保相应地扩展 DynamoDB 表和/或索引的读/写容量分配。