node.js - 无法在 AWS Lambda 层上上传 npm 依赖项
问题描述
我有一个 .zip 文件,其中包含 node_modules 和一个 utils 文件夹,
我将 .zip 上传到 AWS Lambda 层,但我无法获取 AWS Lambda 函数的所有依赖项,
我相信问题可能与 package.json 有关,但
我尝试删除 node_modules、package-lock.json 并使用npm install
命令重新安装依赖项。
依赖项似乎是在本地下载的,但是当我将它们上传到图层时,它们就消失了。
包.json-
{
"name": "serverless-currency",
"version": "1.0.0",
"description": "Lambda APIs for G2G Currency Module",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"debug": "SLS_DEBUG=* sls offline start"
},
"author": "Aniruddha Raje",
"license": "ISC",
"dependencies": {
"async": "^2.6.2",
"aws-sdk": "^2.447.0",
"axios": "^0.18.0",
"cryptr": "^4.0.2",
"jsonwebtoken": "^8.5.1",
"moment": "^2.24.0",
"serverless-offline": "^4.9.4",
"util": "^0.12.0"
}
}
AWS Lambda 代码 -
var fs = require('fs');
var async = require('async');
exports.handler = async (event) => {
const testFolder = '/opt/layer/node_modules';
fs.readdirSync(testFolder).forEach(file => {
console.log(file);
});
};
Lambda 错误 -
{
"errorMessage": "Cannot find module 'async'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:474:25)",
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)",
"Object.<anonymous> (/var/task/index.js:2:13)",
"Module._compile (module.js:652:30)",
"Object.Module._extensions..js (module.js:663:10)",
"Module.load (module.js:565:32)",
"tryModuleLoad (module.js:505:12)",
"Function.Module._load (module.js:497:3)"
]
}
参考 -
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
是否必须命名根文件夹,以便可以使用导入nodejs
直接访问 node_module 库,
以便代码不需要指定 /opt/node_modules/async 路径?
指定绝对路径时,代码运行没有错误。let async = require('async')
解决方案
你的目录结构错了。在官方文档(这里)中,你需要一个结构类似layer/nodejs/node_modules
的目录,nodejs
目录名称不是随机的,必须是nodejs
layer
|
|__nodejs
|
|__node_modules
|
|__node_module1
|
|__async
现在你需要将nodejs
目录压缩到nodejs.zip
(或任何你想要的)并使用这个文件来创建你的层。
推荐阅读
- neo4j - Neo4j 密码查询过滤关系计数
- java - java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)' 在空对象引用上
- python - 改进神经网络以识别手语
- php - 这种方式使用自定义字段来更改 WooCommerce 中的“添加到卡片文本”好吗?
- azure - 让我们加密 Azure 错误“找不到 Web 应用程序”
- vb.net - 将 VB6 迁移到 VB.net 记录集和数据表
- red - 红色到 dotnet 或 java android:.Net -> Red(未实现)
- javascript - How to align and get rid of overlapping videos?
- regex - Scala正则表达式:组之间的捕获
- swift - 从 Alamofire 请求分配数据后无响应