Гнездо js работает на лямбда-функции без создания реального сервера для объединения с AWS API Gateway? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть 5 HTTP-сервисов, написанных на Nest JS. Я должен преобразовать их в лямбда-функцию , где у каждого сервиса будет своя лямбда-функция. Цель этого состоит в том, чтобы полностью превратить мой сервис в безсерверный.

Я использую API Gateway для сопоставления запросов к правой лямбде по заданному пути запроса.

Теперь создаю шаблон MVC с нуля, который получает URL-путь и разрешает и необходимые контроллер и функции (включая параметры URL и т. д.) - это то, что уже было сделано как express, так и nest js.

Есть ли способ реализовать nesst js ' Функциональность абстракции без фактического прослушивания сервера? Таким образом, я могу просто передать nest js URI и запросить данные, и он будет работать с ним?

Какие-либо другие решения для запуска MVC безсерверного процесса в lambda?

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Вы можете конвертировать все ваше приложение express в лямбда-функцию и обрабатывать запросы по мере их поступления.

В этом блоге показано, как это сделать для express: https://serverless.com/blog/serverless-express-rest-api/

Аналогичное можно попробовать и для Nest JS. Таким образом, лямбда-функция - это, по сути, кусок кода, который исполняется при поступлении запроса. Существуют ограничения на размер кода и время выполнения задания, которое определяется платформой c.

0 голосов
/ 23 марта 2020

После исследования сети и изучения этих замечательных ответов я подумал о том, чтобы собрать всю эту информацию и собрать что-то более подробное, то, что я неправильно понял из описанных статей и статей, которые я нашел.

Как создать безсерверное приложение Nest JS с помощью функции Lambda AWS provider

Давайте посмотрим на эту статью репозитория: https://github.com/rdlabo/serverless-nestjs

Спасибо ему, он в основном упаковал готовый к go Nest JS проект, настроенный с Serverless framework .

Я недостаточно опытен, чтобы много говорить о бессерверной инфраструктуре, но я могу объяснить, как она работает в нашем случае.

Прежде всего, есть serverless.yml, как объяснено статья о github-репозитории, в основном здесь вы описываете имя вашей лямбда-функции, что исключать из пакета и триггерные http-события.

functions:
  index:
    handler: dist/index.handler

    events:
    - http:
        cors: true
        path: '/'
        method: any
    - http:
        cors: true
        path: '{proxy+}'
        method: any

Если мы посмотрим на этот файл yml, вы можете увидеть что у нас есть 2 HTTP-события, одно для root пути и одно для пути прокси.

Вопрос, который я задал себе, читая его, так что же делает эта часть события?

Эта часть yml в основном создает ваши конечные точки в службе API Gateway AWS (если вы используете AWS в качестве поставщика). API Gateway - это служба, созданная AWS, которая позволяет отображать запросы в другие службы AWS, такие как лямбда-функция.

Когда вы запускаете команду sls deploy после ввода учетных данных с помощью sls config credentials безсерверный фреймворк создаст ИЛИ изменит, если существует новая лямбда-функция на основе настроенного вами конфига, и настроит конечные точки шлюза API, связанные с этой лямбда.

После развертывания вы получите ссылку, которая активирует эту лямбду , В примере, который я использую, в основном используется безсерверное решение express, созданное кем-то, в основном прокси-код, который знает, как получить объект запроса к API-шлюзу, преобразовать его в express и активировать без запуска сервера.

Примечание: безсерверный использует CloudInformation для создания стека для загрузки и развертывания лямбда-функции, я думаю, что таким образом вы можете выгрузить более 250 МБ разархивированного, потому что мой проект в настоящее время разархивирован 450 МБ, я не уверен в этом, но когда Я попытался загрузить больший zip, моя лямбда начала переполняться, так как я сказал, что в ней отсутствуют некоторые модули, я думаю, из-за размера.

Или, может быть, серверный сервер действительно оптимизирует модули, так что загруженный пакет намного меньше, чем что вы ожидаете Если кто-то знает об этом, +1!

0 голосов
/ 19 марта 2020

Вы должны предоставить больше информации о вашей архитектуре. Вы использовали Blueprint с microservice? Затем выберите microservice-http-endpoint.

Взгляните на пример [microservice-http-endpoint]. 1

...