从zip文件上传代码时,我在aws-lambda控制台中一直收到此错误。我尝试上传其他zip文件,但它们正常工作。 .js文件在zip文件中名为“CreateThumbnail.js”。我相信处理程序也正确命名为“CreateThumbnail.handler”。 node_modules子目录也已设置。有人有任何想法吗?
{
"errorMessage": "Cannot find module 'CreateThumbnail'",
"errorType": "Error",
"stackTrace": [
"Function.Module._resolveFilename (module.js:338:15)",
"Function.Module._load (module.js:280:25)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)"
]
}
答案 0 :(得分:15)
我能够让它发挥作用的方式是:
答案 1 :(得分:8)
好的,我自己做了这个,只是确保你制作拉链,使.js文件不会在文件夹中结束,因为AWS会解压缩你上传的文件并试图找到.js文件由您提供的处理程序的名称,如果它在一个文件夹中,它不会帮助您。
答案 2 :(得分:4)
如果您的压缩文件没有全球读取权限,则会显示此确切错误。 (chmod -R ugo+r
)。
在压缩前检查文件权限。不幸的是,AWS并没有强调这一点,这给许多人带来了很多麻烦。
答案 3 :(得分:1)
我在node_modules目录中构建的自定义模块上遇到此问题。在我的Win10机器上进行测试时,一切运行良好,但上传后我仍然得到相同的“找不到模块'modulename'”错误。
事实证明我错了;这是无法找到的模块中的package.json行:
"main": "./build/modulename.js",
这是实际的文件名:
Modulename.js
区分大小写; Windows不是,linux(因此也就是AWS)。
答案 4 :(得分:1)
某些库文件可能没有全局读取,因此lambda将无法读取内容并构建内容。
确保node_modules
中的所有文件在打包前都可读:
chmod -R +r node_modules
然后压缩并上传。
答案 5 :(得分:1)
一个可能的问题是,如果您将lambda作为通过PowerShell Compress-Archive
创建的zip文件上传。 Compress-Archive
has a bug使AWS将文件提取到平面树(无子目录)中,文件名中带有反斜杠:
答案 6 :(得分:0)
AWS Lambda使用文件的名称和处理程序函数的名称,因此如果您在名为exports.myHandler = function(event, context)
的文件中定义了这样的处理程序:index.js
,则处理程序为{{1} }。
答案 7 :(得分:0)
这对我来说简单。
我得到了,无法创建索引。在我的例子中,我的带有exports.handler的主lambda文件必须被称为index.js
尝试调用主文件CreateThumbnail.js
答案 8 :(得分:0)
文件名:
app.js
&strong;" app.js" 中的 Lambda函数
exports.handler = function(event,context)...
亚马逊控制台上的Lambda处理程序:
app.handler( {app} .js + exports。{handler} = app.handler )
解压缩文件夹时,您应该看到:
app.js
node_modules
答案 9 :(得分:0)
本教程告诉您在zip文件中包含以下项目:
CreateThumbnail.js
/ node_modules /克
/ node_modules /异步
它未能考虑的是两个软件包(gm,async)的依赖关系也需要成为软件包的一部分。
所以这就是你要做的事情:
所以你的完整包应该是这样的:
CreateThumbnail.js
/node_modules/.bin
/node_modules/array-parallel
/node_modules/array-series
/node_modules/async
/node_modules/cross-spawn
/node_modules/debug
/node_modules/gm
/node_modules/isexe
/node_modules/lodash
/node_modules/lru-cache
/node_modules/ms
/node_modules/pseudomap
/node_modules/which
/node_modules/yallist
答案 10 :(得分:0)
这无关紧要,但是Google将我带到了这里,所以:
AWS会给您一个错误:
Unable to import module '<myfile>': Error
对我而言,真正发生的事情是需要一个不存在的JS文件。该错误有点误导人。
答案 11 :(得分:0)
如果您使用的是AWS Lambda Layers,则需要验证您的目录结构是否在图层所需的结构上:
例如,对于moment.js node.js模块,您需要以下结构:
aws-lambda-layer.zip
│ nodejs
│ nodejs/node_modules
└ nodejs/node_modules/moment
因此,要创建具有正确结构的层zip文件,我们可以在项目的根目录上使用以下命令:
mkdir -p nodejs && cp -r node_modules nodejs/ && zip -r aws-lambda-layer.zip nodejs
答案 12 :(得分:0)
这是我遵循的 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html 的说明,并且有效。
使用依赖项更新 Node.js 函数
打开命令行终端或 shell。确保您本地环境中的 Node.js 版本与您的函数的 Node.js 版本匹配。
为部署包创建一个文件夹。以下步骤假定文件夹名为 my-function。
使用 npm install 命令在 node_modules 目录中安装库。
npm install the_package_that_is_missing
创建一个包含项目文件夹内容的 .zip 文件。使用 r(递归)选项确保 zip 压缩子文件夹。
zip -r function.zip .
使用 update-function-code 命令上传包。
aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip
现在您的函数可以运行了!