Как я могу использовать axios в лямбде?
Нужно ли устанавливать модуль axios локально, а затем развертывать его в lambda или есть способ сделать это через встроенный редактор кода в браузере?
6 ответов
Lambda на самом деле не связывает ваши зависимости пакета, кроме пакета AWS, так что да, вам нужно установить его локально, сжать вместе и загрузить в консоль Lambda.
Вы можете опубликовать простой слой AWS Lambda Node.js с пакетом axios, а затем прикрепить созданный слой к вашей лямбда-выражению.
Список команд для создания файла .zip для слоя:
mkdir nodejs
cd nodejs
npm i axios
rm -rf package-lock.json
cd ..
zip -r axios.zip nodejs
Этот список команд взят из этой статьи https://ljmocic.medium.com/publish-simple-node-js-aws-lambda-layer-a87c00afdd83
Вы также можете создать слой. При таком подходе вы можете использовать модуль Axios во многих функциях. Однако вы должны быть осторожны с путем. При архивировании модулей важны пути к папкам. Для node14.* Это должно быть примерно так. Имя вашей основной папки должно быть «nodejs».
nodejs/node14/node_modules/axios
nodejs/node14/node_modules/follow-redirects
После прикрепления слоя вы можете сразу добраться до него.
Например:
const axios = require("axios");
exports.handler = async(event) => {
// TODO implement
var response = await axios.post(process.env.URL, { "data": event.data }, {
headers: {
"authorization": process.env.PASS,
"content-type": "application/json",
}
}, { timeout: 10000 }).then(response => response)
.catch((error) => {
//console.log(error.response.status);
//console.log(error.response.data);
//console.log(error.response.headers);
return error;
});;
}
Для получения дополнительной информации: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
Этот подход мне очень помог, надеюсь, он поможет и другим! :)
В папке, где находится ваш лямбда-скрипт (index.js), выполните следующую команду -
npm install axios
Тебе следует увидеть node_modules
каталог создается в том же каталоге, что и index.js. Теперь объедините их вместе (index.js и npm_modules) и загрузите их как лямбда в виде zip. Вы можете повторить это с другими зависимостями модуля npm, которые у вас есть. Если вы не хотите повторять эти шаги вручную для каждого модуля, создайте package.json
файл и добавить все ваши зависимости модуля там и просто запустить npm install
один раз.
Все, что нам нужно сделать, это установить axios локально, заархивировать папку и загрузить ее в AWS-Lambda-Layers. Позвольте мне показать вам, как это сделать.
- Создайте каталог ( это имя не случайно, должно следовать за ним )
- Установить аксиомы
npm i axios
- Держать
node_modules
и удалите все остальное в каталоге. - Вернуться на шаг назад, т.е.
cd.. or whatever
- Застегните
nodejs
каталог - Бум! ваш слой готов к загрузке в AWS Lambda.
- После загрузки и присоединения слоя к вашей функции вы сможете получить доступ к аксиомам в своем обработчике , используя
const axios = require("axios");
Если вы хотите узнать, как добавлять/загружать и прикреплять слои в AWS. Ну это отдельная дискуссия.
Вы должны следовать решению @SAndriy, чтобы добавить зависимости в лямбду AWS, и, пожалуйста, прочитайте эту статью https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html .