Хранение модуля узла в корзине S3 для AWS Lambda

#node.js #amazon-web-services #aws-lambda

Вопрос:

Я разработал функцию/программу на основе nodejs и хочу запустить ее на AWS Lambda. Проблема в том, что размер больше 50 МБ, а AWS Lambda поддерживает прямой код функции размером менее 50 МБ.

В основном в моем коде размер модуля узла составляет 43 МБ, а фактический код составляет около 7 МБ. Итак, есть ли какой-либо способ отделить мой модуль узла от кода, возможно, если мы сможем сохранить модули узла в корзине S3, а затем получить доступ к нему на AWS Lambda? Любые предложения были бы полезны. Спасибо

P. S: Из-за некоторых проблем с зависимостями я не могу запустить эту функцию в качестве образа докера на Лямбде.

Комментарии:

1. Какие пакеты NPM вы импортируете, которые занимают 43 МБАЙТ?

2. @jarmod Я не слишком уверен, потому что я получил эту папку от разработчиков, которые ее закодировали.

3. Папка node_modules предположительно находится в вашем упакованном ZIP-файле, который вы не смогли загрузить в AWS Lambda.

Ответ №1:

Если вы не хотите или не можете использовать упаковку Docker, вы можете заархивировать свои node_modules в хранилище S3.

Ваш handler (или модуль, содержащий ваш обработчик), затем может загрузить zip-архив и извлечь файлы в /tmp . Затем вы require() отправляете свои модули оттуда.

Приведенное выше описание не может быть точным на 100%, так как существует множество способов сделать это. Но такова общая идея.

Это один из методов развертывания , который zappa , инструмент для развертывания приложений Python/Django в AWS Lambda, поддерживался задолго до того, как в Lambda были разрешены контейнеры docker.

https://github.com/Miserlou/Zappa/pull/548

Ответ №2:

Вы можете использовать лямбда-слои, которые идеально подходят для вашего случая использования. Некоторое время назад нам нужно было использовать facebook sdk для одного из наших проектов, и мы создали слой лямбда для facebook sdk(32 МБ), а затем пакет развертывания стал всего 4 КБ.

В нем говорится, что

Использование слоев может ускорить развертывание приложений с помощью бессерверной модели приложений AWS (AWS SAM) или бессерверной платформы. Перемещая зависимости среды выполнения из кода функции на уровень, это может помочь reduce the overall size of the archive в загрузке во время развертывания.

Одна лямбда — функция может использовать до five layers . Максимальный размер общей разархивированной функции и всех слоев находится 250 MB далеко за пределами ваших возможностей.