Я создал несколько функций Lambda с помощью веб-редактора. Все идет нормально. Теперь я хотел бы начать расширять их модулями (такими как Q для обещаний). Я не могу понять, как вывести модули в Lambda, чтобы они могли использоваться моими функциями.
Я прочитал это, но, кажется, это связано с настройкой EC2 и запуском функций Lambda оттуда. Существует механизм для загрузки zip-файла при создании функции, но, похоже, он включает отправку функций, разработанных локально. Так как я работаю в веб-редакторе, это выглядит как странный рабочий процесс.
Как я могу просто развернуть некоторые модули для использования в моих функциях Lambda?
Ответы:
Вы не можете загрузить модули NPM без загрузки
.zip
файла, но вы можете фактически упростить этот процесс до двух быстрых командных строк.Вот как:
Поместите ваши файлы функций Lambda в отдельный каталог. Это потому, что вы устанавливаете
npm
пакеты для Lambda локально и хотите иметь возможность изолировать и протестировать то, что вы будете загружать в Lambda.Установите свои пакеты NPM локально,
npm install packageName
находясь в отдельном каталоге Lambda, который вы создали на шаге 1.Убедитесь, что ваша функция работает при локальном запуске:
node lambdaFunc.js
(вы можете просто закомментировать двеexport.handler
строки в вашем коде, чтобы адаптировать код для работы с Node локально).Перейдите в каталог Lambda и сожмите содержимое , убедитесь, что не включаете сам каталог.
Если у вас есть
aws-cli
установленное программное обеспечение, которое я предлагаю иметь, если вы хотите облегчить свою жизнь, теперь вы можете ввести эту команду:(нет кавычек вокруг части lambdaFunc выше, если вам интересно, как я)
Теперь вы можете нажать тест в консоли Lambda.
Я предлагаю добавить короткий псевдоним для обеих вышеперечисленных команд. Вот что у меня есть для более длинной команды обновления Lambda:
источник
aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://~/path/to/your/lambdaFunc.zip
--zip-file fileb://
против--zip-file file://
, используя эти шаги--zip-file fileb:
вместоfile
меня. 2) на MacOS это похоже на 3 слеша, например, какfileb:///Users/wio/Documents
.zip
Файл необходим для того , чтобы включить НПЕ модули Lambda. И вам действительно не следует использовать веб-редактор Lambda для чего-либо еще - как с любым рабочим кодом, вы должны разрабатывать локально, заниматься git и т. Д.МОЙ ПОТОК:
1) Мои лямбда-функции обычно являются вспомогательными утилитами для более крупного проекта, поэтому я создаю в них каталог / aws / lambdas для их размещения.
2) Каждый отдельный лямбда-каталог содержит index.js файл содержащий код функции, файл package.json, определяющий зависимости, и подкаталог / node_modules . (Файл package.json не используется Lambda, просто мы можем выполнить
npm install
команду локально .)package.json:
3) Я .gitignore все каталоги node_modules и .zip файлы, так что файлы, сгенерированные из npm, устанавливаются и архивируются, не загромождают наше репо.
.gitignore:
4) Я запускаю
npm install
из каталога для установки модулей и разрабатываю / тестирую функцию локально.5) Я заархивировал лямбда-каталог и загрузил его через консоль.
( ВАЖНО: не используйте утилиту сжатия «Mac» из Finder для архивирования файла! Вы должны запустить zip из CLI в корне каталога - см. Здесь )
НОТА:
Вы можете столкнуться с проблемами, если вы будете устанавливать модули узлов локально на вашем Mac, поскольку некоторые специфичные для платформы модули могут дать сбой при развертывании в среде Lambda на основе Linux. (См. Https://stackoverflow.com/a/29994851/165673 )
Решение состоит в том, чтобы скомпилировать модули в экземпляре EC2, запущенном из AMI, который соответствует используемой среде выполнения Lambda Node.js (см. Этот список сред выполнения Lambda и их соответствующие AMI ).
См. Также Пакет развертывания AWS Lambda в Node.js - AWS Lambda.
источник
Теперь вы можете использовать лямбда-слои для этого. Просто добавьте слой, содержащий нужный пакет, и он будет отлично работать.
Следуйте этому посту: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
источник
Надеюсь, это поможет, с Serverless Framework вы можете сделать что-то вроде этого:
plugins: - serverless-webpack custom: webpackIncludeModules: forceInclude: - <your package name> (for example: node-fetch)
2. Затем создайте свою функцию Lambda, разверните ее сserverless deploy
помощью пакета, который включен в serverless.yml.Для получения дополнительной информации об отсутствии сервера: https://serverless.com/framework/docs/providers/aws/guide/quick-start/
источник
serverless plugin install --name pluginName
Модуль npm должен быть встроен в ваш пакет nodejs и загружен в AWS Lambda Layers как zip, тогда вам нужно будет обратиться к вашему модулю / js, как показано ниже, и использовать доступные методы из него. const mymodule = require ('/ opt / nodejs / MyLogger');
источник