NodeJS 使用层时,导入模块在AWS Lambda中不工作-“找不到包”

qybjjes1  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(181)

我试图在lambda函数中添加一个层,其中可以包含NPM中的模块。我将这个模块用于几个lambda函数,并了解到层是重用代码的好方法。
我正在使用节点18。因此,需要“导入”模块,一旦我创建并添加了层,该模块就应该可用。

import { CognitoJwtVerifier } from "aws-jwt-verify"

当我测试函数时,错误消息指出它找不到包。过程。env.NODE_Path显示:/opt/nodejs/node18/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules:/var/runtime:/var/task.我之前已经通过上传一个。zip存档与包包括在内,它一直工作之前.
虽然有可能我没有正确地创建层,但我遵循了明确的指示来这样做,并不认为这是问题所在。
我遇到了几个“解决方案”,包括使用符号链接,但大多数似乎是针对旧版本的Node,当尝试使用ES6时,这些版本并不好用。就此而言,AWS建议在使用节点18时解决路径问题。x.参见https://aws.amazon.com/blogs/compute/node-js-18-x-runtime-now-available-in-aws-lambda/
有没有我可能遗漏的常见问题?

rta7y2nd

rta7y2nd1#

修好了以下是我遇到的问题和解决方案:
当你将图层添加到你的Lambda(我使用的是控制台)时,你可以选择性地指定Compatible Runtimes。我用的是Node 18。x,所以我指定了运行时,但函数永远不会找到我通过层添加的模块。
我检查了路径(如我上面的原始问题所述),并注意到除了常规路径(即。opt/nodejs/node_modules),它还显示了/opt/nodejs/node 18/node_modules的运行时特定路径(我添加了粗体以突出显示差异)。
然后,我用修改后的目录结构从头开始重新创建模块(即nodejs/node 18/node_modules),并上传该层。一切都很完美。

相关问题