我正在创建一个lambda层,捆绑了一些依赖项,包括node_modules。我成功地创建了一个层,但当我试图从我的代码中请求一个模块时,控制台告诉我找不到该模块。这里是代码
var Promise = require('promise');
module.exports.handler = function(event, context, callback) {
new Promise(function (resolve, reject) {
setTimeout(function() {
callback(null, "helloWorld2");
}, 9000);
});
};
如何从层引用节点模块???
5条答案
按热度按时间htzpubme1#
你是如何运行lambda的?如果通过sam cli,像下面这样的东西已经为我工作作为我的
template.yaml
.示例模板
指向本地层
SAM开发人员指南包括一个关于Working with Layers的页面。在我写这篇文章的时候,他们并没有真正进入如何引用本地文件路径中的层,而是专注于对远程托管层的引用。
我发现棘手的方面是,node.js层的目录结构应该是...
.这意味着为了使本地安装的
node_modules
目录作为层工作,您的package.json
文件必须嵌套在名为nodejs
的文件夹中。注意上面例子
template.yaml
中的路径:ExampleFunction.Properties.CodeUri
设置为nodejs/
ExampleFunction.Properties.Handler
应该设置为处理程序文件的路径,相对于nodejs/
。NodeModulesLayer.Properties.ContentUri
设置为包含template.yaml
文件和nodejs
目录的文件夹。这意味着我的例子假设以下结构...
保留sam构建支持
另一个需要警惕的问题是...
关于在
template.yaml
中定义函数资源,在CodeUri
和Handler
中放置路径的哪些部分方面有一些“灵活性”。在某些情况下,做…......就像做......
但是,如果你使用
sam build
命令,前者将不工作。该命令期望在CodeUri
目录中找到package.json
。因此,请继续使用CodeUri: nodejs/
,并使用Handler
值来导航访问处理程序所需的任何其他文件夹层次结构。bogh5gae2#
试试这个简单的例子,如何在nodejs中设置lambda层:
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
ut6juiuv3#
2022年的毕业典礼...
我很难弄清楚,这是否仍然是最先进的,或者我们现在可以简化依赖关系。**事实证明,现在可以在没有黑客或复杂设置的情况下包含依赖项。
对我来说,用
new lambda.NodeJsFunction()
而不是new lambda.Function()
创建lambda就可以了。然而,我很难找到一个工作样本。我决定和你分享一个样本回购。示例仓库
https://github.com/AntoniusGolly/cdk-lambda-typescript-boilerplate
它的作用:
cdk deploy
,没有其他捆绑我希望这能帮助一些人,因为我会感激它。
tjjdgumg4#
为了给你的模块寻址,你必须使用path和'/opt'作为前缀。
如果这是你的文件,你打包到
myLib.zip
与myLib.js
内,你应该写:如果你插入已安装的依赖项,那么你上传
node_modules.zip
与node_modules
文件夹和地址:sqxo8psd5#
我发现最简单的方法是在运行时运行ls命令
输出
在这里,您可以看到文件直接部署在/opt下的node_modules中,因此在我的示例中,这里是工作的import语句