Как я могу использовать 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

Создать слой Взять слой ARN Присоединить слой к Lambda

Вы также можете создать слой. При таком подходе вы можете использовать модуль 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. Позвольте мне показать вам, как это сделать.

  1. Создайте каталог ( это имя не случайно, должно следовать за ним )
  2. Установить аксиомыnpm i axios
  3. Держатьnode_modulesи удалите все остальное в каталоге.
  4. Вернуться на шаг назад, т.е.cd.. or whatever
  5. Застегнитеnodejsкаталог
  6. Бум! ваш слой готов к загрузке в AWS Lambda.
  7. После загрузки и присоединения слоя к вашей функции вы сможете получить доступ к аксиомам в своем обработчике , используяconst axios = require("axios");

Если вы хотите узнать, как добавлять/загружать и прикреплять слои в AWS. Ну это отдельная дискуссия.

Вы должны следовать решению @SAndriy, чтобы добавить зависимости в лямбду AWS, и, пожалуйста, прочитайте эту статью https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html .

Другие вопросы по тегам