如何优化AWS Lambda?

我目前正在使用带有无服务器框架的 AWS Lambda构buildWeb API。

在我的lambda函数中,它们每个都连接到Redis(elasticache)和RDB(Aurora,RDS)或DynamoDB以检索数据或写入新数据。 而我所有的lambda函数都在我的VPC中运行。

除了当lambda函数首次执行或执行一段时间后,执行lambda函数需要相当长的时间(1-3秒),或者有时甚至会响应网关超时错误(大约在30秒),即使我的lambdafunctionconfiguration为60秒超时。

正如在这里所说,我假设1-3秒是为了初始化一个新的容器。 但是,我不知道是否有办法缩短这个时间,因为1-3秒或网关超时并不是真正的生产使用的理想select。

你有两个问题:

  1. 1-3秒延迟。 在使用Lambda时,这是预期的和有据可查的。 正如@Nick在评论中提到的,阻止你的容器进入睡眠的唯一方法就是使用它。 您可以使用Lambda Scheduled Events(Lambda计划事件)以每分钟一次的频率expressionrate(1 minute)执行您的function。 如果您添加一些参数到您的function,以帮助您区分真正的请求和这些ping请求之一,您可以立即返回ping请求,然后你解决了你的问题。 这会花费你更多,但如果有的话,我们可能每个月都会讲便士。 Lambda有一个慷慨的免费层。

  2. 30秒的延迟是不寻常的。 我一定会检查你的CloudWatch日志。 如果你看到你的函数正常工作时的日志,但是当你看到30秒的超时时没有日志,那么我会认为问题出在API网关上,而不是用在Lambda上。 如果您确实看到日志,那么也许他们可以帮助您排除故障。 另一个要检查的地方是AWS状态页面 。 我有时会看到Lambda函数超时和间歇性响应的地方,我只是为了认识到Amazon的问题,并且正在处理这个问题。

这里有一个关于Lambda Container Reuse的附加信息的博客post ,虽然有点旧 ,但仍然有一些很好的信息。