如何在 lambda 中使用 axios?

the*_*ver 10 amazon-web-services alexa aws-lambda alexa-skills-kit axios

我是否必须在本地安装 axios 模块,然后将其部署到 lambda,或者有没有办法通过内联代码编辑器以及在浏览器中执行此操作?

SAn*_*riy 36

您可以使用 axios 包发布一个简单的 Node.js AWS Lambda 层,然后将创建的层附加到您的 lambda。

为图层创建 .zip 文件的命令列表:

mkdir nodejs
cd nodejs
npm i axios
rm -rf package-lock.json
cd ..
zip -r axios.zip nodejs
Run Code Online (Sandbox Code Playgroud)

此命令列表取自本文 https://ljmocic.medium.com/publish-simple-node-js-aws-lambda-layer-a87c00afdd83

创建图层 在此输入图像描述 获取层 ARN 在此输入图像描述 将层附加到 Lambda 在此输入图像描述

  • 需要注意的关键是,对于nodejs,zip 内的文件夹结构必须是“nodejs/node_modules/...”。 (5认同)
  • 在“macOS”上,为了能够安装到空文件夹中,我首先添加执行“npm init”来创建“packag.json”文件。 (3认同)

ore*_*uwa 7

除了 AWS 包之外,Lambda 实际上并没有为您捆绑包依赖项,所以是的,您需要在本地安装它,将其压缩在一起并上传到 Lambda 控制台。


Ogu*_*guz 7

您还可以创建一个图层。通过这种方法,您可以在许多功能中使用 Axios 模块。不过,您需要小心路径。当您压缩模块时,文件夹路径很重要。对于node14.*,应该是这样的。您的主文件夹名称应该是“nodejs”。

nodejs/node14/node_modules/axios
nodejs/node14/node_modules/follow-redirects 
Run Code Online (Sandbox Code Playgroud)

附加图层后,您可以直接到达它。

例如:

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;
});;
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

这个方法对我帮助很大,希望对其他人也有帮助!:)


Ani*_*kur 6

在您的 lambda 脚本所在的文件夹 (index.js) 中运行以下命令 -

npm install axios
Run Code Online (Sandbox Code Playgroud)

您应该会看到node_modules在与 index.js 相同的目录中创建的目录。现在将这两个压缩在一起(index.js 和 npm_modules)并将它上传到你的 lambda 作为 zip。您可以使用您拥有的其他 npm 模块依赖项重复此操作。如果您不想为每个模块再次重复这些手动步骤,请创建package.json文件并在那里添加所有模块依赖项,然后只运行npm install一次。