在Amazon Lambda上运行Spring Boot

我正在尝试在Amazon Lambda上部署Spring Boot应用程序。 我注意到如果快速连续调用处理程序 – spring尝试重新加载自己,重新设置datsources,重新加载bean等

无论如何,如果已经调用了main方法,那么告诉Spring Boot不要重新初始化自己吗?

谢谢Damien

据我所知,Amazon Lambda是一个无状态函数,它针对每个请求进行实例化。

如果你多次调用Lambda,那么很常见,你会看到每个请求的Spring Boot初始化。

如果请求缓慢,则AWS可能再次重用相同的Lambda,因此只进行一次Spring初始化。

如果请求快速或并行,AWS将启动更多Lambdas实例以动态扩展。 这解释了您面临的问题。

我认为,使用整个Spring应用程序作为AWS Lambda并不是正确的方法。 Lambda应该是无状态函数,可以快速实例化。

您可以尝试使spring应用程序尽可能小,以减少加载时间并节省资源,如本教程中所述 。

我遇到了这个寻找答案的人,并且同意Spring对于Lambda来说启动通常太慢了。

我认为Spring Cloud现在通过Spring Cloudfunction解决了这个问题:

该项目为AWS Lambda上的Spring Cloud Function应用程序提供了一个适配器层。 您可以使用函数,消费者或供应商类型的单个@Bean编写应用程序,它可以在AWS中部署

https://github.com/spring-cloud/spring-cloud-function

更新:我现在已经在AWS lambda上使用Spring Cloud Function了。 对于我的大多数function来说,启动时间是4-5秒,这并不是太棒了,但在编写本文时它很便宜(对于前几百万个请求免费/此后每百万美元0.20美元)以及防止启动缓慢的策略是通过设置CloudWatch规则以不断启动function并使其保持活动来阻止function关闭(又称“保持温暖”)。