如何优化 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-3秒。使用 Lambda 时,这是预期的并且有详细记录。正如@Nick 在评论中提到的,防止容器进入睡眠状态的唯一方法是使用它。您可以使用 Lambda Scheduled Events 使用速率表达式 rate(1 minute)
每分钟执行一次函数。如果您向函数添加一些参数以帮助您区分真实请求和这些 ping 请求之一,您可以立即 return 对 ping 请求,然后您就解决了问题。它会花费你更多,但如果有的话,我们可能会谈论每月几美分。 Lambda 有一个慷慨的免费套餐。
30 秒的延迟很不寻常。我肯定会检查您的 CloudWatch 日志。如果您看到函数正常工作时的日志,但没有看到 30 秒超时时的日志,那么我认为问题出在 API 网关,而不是 Lambda。如果您确实看到了日志,那么也许它们可以帮助您进行故障排除。另一个要检查的地方是 AWS Status Page。我有时会看到 Lambda 函数超时并间歇性响应,我惊慌失措才意识到亚马逊端存在问题,他们正在解决这个问题。
这里有一个 blog post with additional information on Lambda Container Reuse,虽然有点旧,但仍然有一些很好的信息。
我目前正在使用 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-3秒。使用 Lambda 时,这是预期的并且有详细记录。正如@Nick 在评论中提到的,防止容器进入睡眠状态的唯一方法是使用它。您可以使用 Lambda Scheduled Events 使用速率表达式
rate(1 minute)
每分钟执行一次函数。如果您向函数添加一些参数以帮助您区分真实请求和这些 ping 请求之一,您可以立即 return 对 ping 请求,然后您就解决了问题。它会花费你更多,但如果有的话,我们可能会谈论每月几美分。 Lambda 有一个慷慨的免费套餐。30 秒的延迟很不寻常。我肯定会检查您的 CloudWatch 日志。如果您看到函数正常工作时的日志,但没有看到 30 秒超时时的日志,那么我认为问题出在 API 网关,而不是 Lambda。如果您确实看到了日志,那么也许它们可以帮助您进行故障排除。另一个要检查的地方是 AWS Status Page。我有时会看到 Lambda 函数超时并间歇性响应,我惊慌失措才意识到亚马逊端存在问题,他们正在解决这个问题。
这里有一个 blog post with additional information on Lambda Container Reuse,虽然有点旧,但仍然有一些很好的信息。