我已经使用基于web的编辑器创建了几个Lambda函数。到目前为止还不错。现在我想开始扩展那些模块(比如Q表示承诺)。我不知道如何将这些模块输出到Lambda,这样它们就可以被我的函数使用了。
我已经通读了这篇文章,但它似乎涉及到设置EC2并从那里运行Lambda函数。在创建函数时有一种上传zip的机制,但这似乎涉及到发送本地开发的函数。因为我在基于web的编辑器中工作,这似乎是一个奇怪的工作流程。
我如何简单地部署一些模块,以便在我的Lambda函数中使用?
为了在lambda中包含npm模块,需要.zip
文件。而且您确实不应该使用Lambda web编辑器进行任何事情--就像使用任何生产代码一样,您应该在本地开发,使用git等。
1)我的Lambda函数通常是较大项目的助手实用程序,因此我在其中创建了/aws/lambdas目录来存放它们。
2)每个单独的lambda目录都包含一个包含函数代码的index.js文件、一个定义依赖关系的package.json文件和一个/node_modules子目录(lambda不使用package.json文件,它只是为了让我们可以在本地运行npm install
命令。)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3)I.gitignore所有node_modules目录和.zip文件,以便npm安装和压缩生成的文件不会干扰我们的回购。
.Gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4)我从目录中运行npm install
来安装模块,并在本地开发/测试功能。
5)I.压缩lambda目录并通过控制台上传。
(重要提示:不要从Finder中使用mac的“compress”实用程序来压缩文件!您必须从目录根目录中的CLI运行压缩-请参见此处)
zip -r ../yourfilename.zip *
注:
如果在Mac上本地安装节点模块,您可能会遇到问题,因为某些特定于平台的模块在部署到Lambda的基于Linux的环境时可能会失败。(见https://stackoverflow.com/A/29994851/165673)
解决方案是在从AMI启动的EC2实例上编译模块,该AMI与您正在使用的Lambda node.js运行时相对应(请参见Lambda运行时及其各自的AMI的列表)。
另请参见node.js中的AWS Lambda部署包-AWS Lambda
如果不上传.zip
文件,就无法加载NPM模块,但实际上可以将此过程简化为两个快速命令行。
如下所示:
>
将Lambda函数文件放在单独的目录中。这是因为您在本地为Lambda安装了npm
包,并且希望能够隔离和测试将上载到Lambda的内容。
使用NPM Install packagename
在本地安装NPM包,同时在步骤#1中创建的单独的Lambda目录中安装。
确保函数在本地运行时正常工作:Node lambdafunc.js
(您可以简单地注释掉代码中的两行export.handler
以使代码适合在本地使用Node运行)。
转到lambda的目录并压缩内容,确保不包括目录本身。
zip -r lambdaFunc.zip .
如果您已经安装了AWS-CLI
(如果您想让您的生活更轻松,我建议您安装它),那么您现在可以输入以下命令:
aws lambda update-function-code --function-name lambdaFunc \
--zip-file fileb://~/path/to/your/lambdaFunc.zip
(上面的lambdaFunc部分没有引用,以防你和我一样疑惑)
现在您可以在Lambda控制台中单击test。
我建议为上面的两个命令都添加一个简短的别名。下面是我在Lambda update命令中使用的更长的内容:
alias up="aws lambda update-function-code --function-name lambdaFunc \
--zip-file fileb://~/path/to/your/lambdaFunc.zip"
问题内容: 正如公知的,任何NPM模块可以通过运行一个简单的命令被安装:。 我已经安装了一些不再使用的模块,我只想把它们取下来。我对此有一些疑问: 我们是否有任何命令或过程可以从根目录卸载模块(例如),还是仅删除模块文件即可? 如果我们保留未使用的模块,它将对我们有何影响? 问题答案: 该命令很简单 Node.js文档https://npmjs.org/doc/具有npm所需的所有命令。 本地安装
如何卸载Node.js中具有devDependence的<code>npm
问题内容: 我有一个问题问你: 我想在Jena TDB TripleStore上加载文件。我的文件很大,大约80Mb和大约700000的三倍RDF。当我尝试加载它时,执行将停止工作或需要很长时间。 我正在使用在Web服务上运行的以下代码: 有时我会收到Java堆空间错误: 如何将这个文件加载到模型Jena中并将其保存在TDB中?提前致谢。 问题答案: 您需要在statup上为JVM分配更多的内存。
问题内容: Deno超级酷。我早上看过它,现在想迁移到deno。我试图将现有的nodejs脚本移至deno。谁能帮助我使用deno中的npm模块。我需要esprima模块。这个有包https://github.com/denoland/deno_third_party/tree/master/node_modules,但是我不知道怎么使用。 问题答案: Deno提供了一个节点兼容性库,该库将允许使
问题内容: 跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能? 伪代码: 问题答案: 您想要的是可能的,但是需要重新加载两件事……首先,但是您还必须这样做(假设是包含该语句的模块的名称)。 至于为什么…第一次加载时,将创建一个对象,其中包含一个对象。当您导入到模块,它存储到一个参考。当被调用时,对象被消隐,并且该模块重新执行。这意味着所有引用仍然有效,但是已经创建了一个新对象…因此,
如何卸载Node.js中具有开发依赖项的模块?