首页 > 解决方案 > 预置并发无法解决 lambda 冷启动

问题描述

我有一个非常基本的 lambda 函数,它由 AWS API Gateway 调用,而 lambda 所做的只是调用 AWS SNS 以发送文本消息。lambda 版本化并配置了 1 个预置并发,状态为“就绪”

在 20-30 分钟后第一次调用版本化 lambda 时,我遇到了长达 13 秒的冷启动延迟。

下面是 AWS API 网关日志,详细说明了在调用具有预置并发性的版本化 lambda 后获得响应所需的时间。

Thu Oct 15 19:32:06 UTC 2020 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789:function:sms-service-lambda-dev-test-01:3/invocations
Thu Oct 15 19:32:19 UTC 2020 : Received response. Status: 200, Integration latency: 12550 ms

但所有后续调用都运行得非常快

Thu Oct 15 19:50:19 UTC 2020 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789:function:sms-service-lambda-dev-test-01:3/invocations
Thu Oct 15 19:50:20 UTC 2020 : Received response. Status: 200, Integration latency: 713 ms

有什么想法我可能会错过吗?

标签: amazon-web-servicesaws-lambdacold-start

解决方案


我能够对此进行更细致的调试,发现冷启动实际上发生在 Amazon SNS 端。

在使用 dotnet AWS SDK 向 AWS SNS 发布消息时,我发现对 AWS SNS 的初始调用似乎需要大约 7 秒的冷启动,而对 AWS SNS 的所有后续调用都需要不到一秒的时间。

PublishResponse pubResponse = await snsClient.PublishAsync(pubRequest);

推荐阅读