Как развернуть приложение микросервиса SpringBoot (RESTful) как бессерверное на AWS Lambda? - PullRequest
2 голосов
/ 13 марта 2019

Я разработал простой микросервис, основанный на REST, с использованием Java 8 и Spring Boot2.0. У него есть собственные конечные точки REST, которые я могу вызвать с помощью Postman, и я очень хорошо получаю ответ. Теперь у меня есть сомнения в понимании дизайна и архитектуры, если я хочу развернуть то же приложение в облаке AWS. Я хочу, чтобы мое приложение работало без сервера, поэтому я хочу развернуть его на AWS, используя его сервис Lambda.

Пожалуйста, помогите прояснить мои следующие сомнения: - 1) Во-первых, могу ли я загрузить весь код своего приложения в AWS Lambda, чтобы он оставался без сервера?

2) Если да, то нужно ли мне использовать AWS API Gateway (обязательно) для вызова моей функции Lambda, когда запрос проходит через нее?

3) Если да (точка 2), то конечные точки, которые есть в моем исходном коде микросервиса, станут неэффективными и будут переопределены новыми конечными точками шлюза API?

Все мои сомнения касаются конечных точек, какая конечная точка будет использоваться для вызова лямбда-функций?

Пожалуйста, помогите прояснить мои сомнения. Если есть какой-либо образец справочного материала, то он будет действительно великолепным.

Приветствия

1 Ответ

2 голосов
/ 13 марта 2019

Spring Boot и AWS Lambda естественно не сочетаются с IMO.

Lambda - это чистый код, он не представляет собой HTTP-сервер, он просто запускается одной из других служб AWS (APIШлюз, CloudWatch, S3, DynamoDB, Kinesis, SDK и т. Д.).Обработчик получает запрос JSON от вызывающей службы и обрабатывает запрос. Вот пример.

API-шлюз делает большую часть того, что Spring Boot предоставляет для вас.API-шлюз всегда в сети, ожидая поступления HTTP-запросов, за которые вы платите только за входящие запросы, вы не платите за бездействие (определение IMO без сервера).

После поступления запроса API-шлюзоборачивает полезную нагрузку запроса некоторыми дополнительными данными об окружающей среде и отправляет их вашему обработчику Lambda, который обрабатывает запрос и возвращает клиенту какой-то ответ.

Сказав это, если вы не хотите реструктурировать свою службу,Вам доступны следующие варианты:

  1. Оберните в образ Docker и используйте службу контейнеров AWS, используя ECS или ElasticBeanstalk ни один из них не считается серверным.

  2. Я не пробовал этого, но в соответствии с AWS:

Вы можетеиспользуйте библиотеку aws-serverless-java-container для запуска приложения Spring Boot в AWS Lambda.Вы можете использовать библиотеку в своем обработчике Lambda, чтобы загрузить в него приложение Spring Boot и прокси-события.

См. Ссылки на Преобразовать проект SpringBoot и Развернуть его вAWS Lambda .

Надеюсь, это поможет.

...