#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.
Ответ №2:
Вы можете использовать лямбда-слои, которые идеально подходят для вашего случая использования. Некоторое время назад нам нужно было использовать facebook sdk для одного из наших проектов, и мы создали слой лямбда для facebook sdk(32 МБ), а затем пакет развертывания стал всего 4 КБ.
Использование слоев может ускорить развертывание приложений с помощью бессерверной модели приложений AWS (AWS SAM) или бессерверной платформы. Перемещая зависимости среды выполнения из кода функции на уровень, это может помочь
reduce the overall size of the archive
в загрузке во время развертывания.
Одна лямбда — функция может использовать до five layers
. Максимальный размер общей разархивированной функции и всех слоев находится 250 MB
далеко за пределами ваших возможностей.