Estoy intentando implementar una aplicación Spring Boot en Amazon Lambda. Me di cuenta de que si se llama al controlador en una sucesión rápida: Spring intenta recargarse, volver a configurar las fuentes de datos, recargar beans, etc.
¿Hay alguna forma de decirle a Spring Boot que no se reinicie si ya se ha llamado al método principal?
gracias damien
Hasta donde yo sé, Amazon Lambda es una función sin estado, que se instancia para cada solicitud.
Si llama a Lambda muchas veces, es bastante normal que vea una inicialización de Spring Boot para cada solicitud.
Si las solicitudes llegan lentamente, es posible que AWS esté reutilizando el mismo Lambda nuevamente, por lo que solo se realiza una inicialización de Spring.
Si la solicitud llega rápido o en paralelo, AWS lanzará más instancias de Lambdas para escalar dinámicamente. Esto explica lo que estás enfrentando.
Creo que usar una aplicación Spring completa como AWS Lambda no es el enfoque correcto. Una Lambda debe ser una función sin estado, que se pueda instanciar rápidamente.
Puede intentar que su aplicación Spring sea lo más pequeña posible, para disminuir el tiempo de carga y ahorrar recursos, como se explica en este tutorial .
Encontré esto buscando una respuesta y estoy de acuerdo en que Spring suele ser demasiado lento para iniciar Lambda.
Creo que Spring Cloud ha resuelto este problema ahora con Spring Cloud Function :
Este proyecto proporciona una capa de adaptador para una aplicación Spring Cloud Function en AWS Lambda. Puede escribir una aplicación con un solo @Bean de tipo Función, Consumidor o Proveedor y se podrá implementar en AWS
https://github.com/primavera-nube/primavera-nube-función
ACTUALIZACIÓN: He estado trabajando con Spring Cloud Function en AWS lambda un poco más ahora. Para la mayoría de mis funciones, el tiempo de inicio es de 4 a 5 segundos, lo cual no es fantástico, pero al momento de escribir es muy económico (gratis para los primeros millones de solicitudes/ $0.20 por millón a partir de entonces) y una estrategia para evitar inicios lentos. es evitar que la(s) función(es) se apague(n) alguna vez (también conocido como "mantenerlos calientes") mediante la configuración de una regla de CloudWatch para iniciar constantemente la función y mantenerla activa.