“Runtime.ImportModuleError”尝试使用层访问 AWS lambda 函数中的 npm 包

ksh*_*ine 8 javascript amazon-web-services node.js aws-lambda aws-lambda-layers

我想在 AWS lambda 函数中使用 npm 包“请求”。

我正在尝试按照本文中概述的程序进行操作:https : //medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e

我创建了这样的目录结构:

nodejs
?   package-lock.json
?   package.json
????node_modules
Run Code Online (Sandbox Code Playgroud)

我的 package.json 看起来像这样:

{
  "name": "my-package-name",
  "version": "1.0.0",
  "description": "whatever",
  "author": "My Name",
  "license": "MIT",
  "dependencies": {
    "request": "^2.88.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

据我从文章中可以看出,我应该做的就是 run npm i,压缩目录,将其作为图层上传,然后将该图层添加到我的 lambda 函数中。

截屏

我已经完成了所有这些,但是当我尝试测试我的功能时,我得到的只是:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'request'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'request'",
    "Require stack:",
    ...
Run Code Online (Sandbox Code Playgroud)

...好像从未添加过图层。无论是否添加图层,错误都完全相同。如果有某种权限问题需要解决,文章中没有任何内容表明这一点。

我尝试了一些不同的事情,例如我的 .zip 文件是否包含顶级目录“nodejs”或仅包含其内容。我试过用这样的文件添加"main": "index.js",到我的package.json, 中index.js

export.modules.request = require('request');
Run Code Online (Sandbox Code Playgroud)

……无济于事。

我错过了什么?

ksh*_*ine 16

哦,我简直不敢相信只有这个!

.zip 文件的顶级目录必须完全命名为“ nodejs”!我使用了不同的名称,只是在这篇文章的文本中将其改回“nodejs”以使其更通用,但目录名称一直是真正的问题。

叹。

  • 和你一样,我已经为此苦苦挣扎了几个小时,而且 100% 有效。感觉自己很傻:)谢谢! (2认同)