aws-lambda无法找到模块

Dan*_*noz 20 javascript amazon-web-services node.js aws-lambda

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

Aar*_*ron 18

我能够让它工作的方式是:

  1. 将文件命名为exports.js
  2. 在文件中命名处理程序exports.handler
  3. 将lambda配置中的处理程序设置为exports.handler
  4. 仅压缩文件夹的内容,而不是文件夹本身(如上所述)并重命名zip文件exports.zip

  • 文件的实际名称并不重要.关键是要完全限定文件和通向它的路径.我的zip文件有一个名为`scripts`的目录,里面有几个文件,里面有`exports.handler`.对于Lamdba控制台中的_Handler_,我指定了`scripts/transforms.handler`. (3认同)

Bri*_*SFT 9

好吧,我自己做了这个,只是确保你制作zip文件,使.js文件不会在文件夹中结束,因为AWS会解压缩你上传的文件,并试图找到一个名为的.js文件.你给的处理程序,如果它在一个文件夹中,它将无法帮助你.

  • 冠军。如果使用 OS X“压缩”将所有内容都放在一个文件夹中(正如它应该的那样),那么很容易被这个问题绊倒。 (2认同)

Rom*_*kov 9

一个可能的问题是,如果您将 lambda 作为通过 PowerShell 创建的 zip 文件上传Compress-ArchiveCompress-Archive有一个错误导致 AWS 将文件提取到一个平面树(没有子目录)中,文件名中带有反斜杠:

在此处输入图片说明


小智 5

如果您的压缩文件没有全球读取权限,则可能会出现此确切错误。( chmod -R ugo+r).

在压缩文件之前检查文件权限。不幸的是,AWS 并没有充分强调这一点,它给许多人带来了很多麻烦。

  • 从头开始......`compress:false` 不起作用,但`gulp-zip` 仍然是罪魁祸首。手动压缩相同的文件有效。 (2认同)

cod*_*ade 5

如果您使用AWS Lambda Layers,则需要验证您的目录结构是否位于层所需的结构上:

\n\n

例如,对于moment.js node.js 模块,您需要以下结构:

\n\n
aws-lambda-layer.zip\n\xe2\x94\x82 nodejs\n\xe2\x94\x82 nodejs/node_modules\n\xe2\x94\x94 nodejs/node_modules/moment\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,要创建具有正确结构的图层 zip 文件,我们可以在项目的根目录下使用以下命令:

\n\n
mkdir -p nodejs && cp -r node_modules nodejs/ && zip -r aws-lambda-layer.zip nodejs\n
Run Code Online (Sandbox Code Playgroud)\n