如何优化 AWS Lambda?

How to optimize AWS Lambda?

我目前正在使用 AWS Lambda 和 Serverless Framework 构建网络 API。

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

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

here 所述,我假设 1-3 秒用于初始化新容器。但是,我想知道是否有办法减少这个时间,因为 1-3 秒或网关超时对于生产使用来说并不是一个理想的选择。

你完成了两期:

  1. 延迟1-3秒。使用 Lambda 时,这是预期的并且有详细记录。正如@Nick 在评论中提到的,防止容器进入睡眠状态的唯一方法是使用它。您可以使用 Lambda Scheduled Events 使用速率表达式 rate(1 minute) 每分钟执行一次函数。如果您向函数添加一些参数以帮助您区分真实请求和这些 ping 请求之一,您可以立即 return 对 ping 请求,然后您就解决了问题。它会花费你更多,但如果有的话,我们可能会谈论每月几美分。 Lambda 有一个慷慨的免费套餐。

  2. 30 秒的延迟很不寻常。我肯定会检查您的 CloudWatch 日志。如果您看到函数正常工作时的日志,但没有看到 30 秒超时时的日志,那么我认为问题出在 API 网关,而不是 Lambda。如果您确实看到了日志,那么也许它们可以帮助您进行故障排除。另一个要检查的地方是 AWS Status Page。我有时会看到 Lambda 函数超时并间歇性响应,我惊慌失措才意识到亚马逊端存在问题,他们正在解决这个问题。

这里有一个 blog post with additional information on Lambda Container Reuse,虽然有点旧,但仍然有一些很好的信息。