问题描述
我有一个非常基本的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 SNS端。
在使用dotnet AWS SDK将消息发布到AWS SNS时,我发现对AWS SNS的首次呼叫似乎需要7秒钟左右的冷启动,而随后对AWS SNS的所有呼叫都不到一秒钟
PublishResponse pubResponse = await snsClient.PublishAsync(pubRequest);