我一直在修改AWSLambda中的nodejs代码,该代码由一些API网关端点调用。我注意到,在没有任何API网关调用的情况下经过一定时间后,下一个API网关请求将超时。我会得到标准的Lambda错误消息,说函数超时。然而,随后触发我的Lambda的HTTP请求运行良好。
从表面上看,它看起来像是进入了"空闲"模式,在API Gateway-Lambda请求正常工作之前需要充电。我曾考虑建立一个wget cron来保持事物不空闲,但有真正的解决方案吗?我如何才能更好地了解发生了什么?
Lambda会让一个工作人员保持活动一段时间,并在一段时间不活动后(正如您所注意到的)将该工作人员移除。以下是我们论坛上发布的一组建议的副本:
几个建议:
- 让Lambda功能保持"温暖"。如果它很少被调用,您将产生Lambda需要分配的开销"冷启动"成本资源来满足您的要求。有关更多详细信息,请参阅本文
- 使用基于资源的权限而不是基于角色的权限调用Lambda函数。这是为了避免API网关的开销需要向STS发出assumeRole()请求。基于资源如果您在控制台中设置了调用,则调用是默认的
- 如果合适,请考虑为API启用缓存
- 您的API是否通过映射模板对请求或响应进行转换?这显然会产生与转换的复杂性
需要注意的是,#1实际上只能作为最后的手段,假设其他选项都不适用。