当前位置:  开发笔记 > 编程语言 > 正文

如何在AWS Lambda中加载npm模块?

如何解决《如何在AWSLambda中加载npm模块?》经验,为你挑选了3个好方法。

我使用基于Web的编辑器创建了几个Lambda函数.到现在为止还挺好.我现在想开始扩展模块(例如Q for promises).我无法弄清楚如何将模块输出到Lambda,以便它们可以被我的函数使用.

我已经读完了这个但似乎涉及设置EC2并从那里运行Lambda函数.在创建函数时有一种上传zip的机制,但这似乎涉及发送本地开发的函数.因为我在基于Web的编辑器中工作,这似乎是一个奇怪的工作流程.

如何简单地部署一些模块以用于我的Lambda函数?



1> JohnAllen..:

我很确定你无法在不上传.zip文件的情况下加载NPM模块.

但实际上,您可以将此过程分为两个快速命令行.

这是如何做:

    将Lambda函数文件放在单独的目录中.这是因为您npm在本地为Lambda 安装软件包,并且您希望能够隔离并测试要上传到Lambda的内容.

    npm install packageName当您在步骤1中创建的单独Lambda目录中时,在本地安装NPM软件包.

    确保您的函数在本地运行时有效:( node lambdaFunc.js您可以简单地注释掉export.handler代码中的两行,以使代码适应本地运行的Node).

    好的,你的Lambda包有效.您的Lambda包的目录中使用诸如aws-cli while之类的命令将其压缩.确保不压缩目录本身,但内容的目录.

    如果你已经.zip安装了,我建议如果你想让你的生活更轻松,你现在可以输入这个命令:

    zip -r lambdaFunc.zip .
    

    (如果你不知道我做了什么,在上面的lambdaFunc部分没有引号)

    现在,您可以在Lambda控制台中单击test.

    我建议为上述两个命令添加一个简短的别名.以下是我用于更长时间Lambda更新命令的内容:

    aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip
    


您可能需要明确说明您所针对的区域:`aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://〜/ path/to /你/ lambdaFunc.zip`
在使用这些步骤时,我不得不使用`--zip-file fileb://`对`--zip-file file://`
确保仅*压缩目录的内容*,并且*从CLI *压缩(使用Mac finder中的“ compress”命令[将不起作用](/sf/ask/17360801/ / 165673))。
这非常有用..至少有两件事使我无法使用... 1)对我而言,它是--zip文件fileb:而不是file。2)在MacOS上似乎带有3个斜杠,例如`fileb:/// Users / wio / Documents`

2> Yarin..:

.zip需要一个文件才能在Lambda中包含npm模块.你真的不应该使用多大的任何东西-拉姆达网页编辑器与任何生产代码,您应在当地开发,承诺与git等

我的流量:

1)我的lambda函数通常是一个较大的项目帮助工具,所以我创建了一个/ AWS/lambda表达式内的目录,以存放它们.

2)每个单独的拉姆达目录包含index.js含有功能码,文件的package.json文件中定义的依赖关系,以及/ node_modules子目录.(Lambda不使用package.json文件,因此我们可以在本地运行npm install命令.)

的package.json:

{
  "name": "my_lambda",
  "dependencies": {
    "svg2png": "^4.1.1"
  }
}

3)我.gitignore所有node_modules目录和.zip文件,以便从npm安装和压缩生成的文件不会混乱我们的仓库.

的.gitignore:

# Ignore node_modules
**/node_modules

# Ignore any zip files
*.zip

4)我安装模块,在本地开发和测试

5)我.zip lambda目录并通过控制台上传.

(重要提示:不要使用来自Finder的Mac''compress'实用程序压缩文件!您必须从目录的根目录中通过CLI运行zip-请参阅此处)

zip -r ../yourfilename.zip * 

另请参阅Node.js中的AWS Lambda部署包 - AWS Lambda


注意:

您可能遇到像PhantomJS这样的模块构建特定于操作系统的二进制文件的问题,因此在OSX上本地构建的节点包最终会在Lambda中失败.

我在这里找到的答案是使用这些脚本在Docker容器中构建它.



3> 小智..:

希望这对您有所帮助,借助无服务器框架,您可以执行以下操作:

    将这些内容添加到您的serverless.yml文件中:

plugins: - serverless-webpack custom: webpackIncludeModules: forceInclude: - (for example: node-fetch) 2.然后创建您的Lambda函数,通过进行部署serverless deploy,serverless.yml中包含的软件包将为您提供。

有关无服务器的更多信息:https : //serverless.com/framework/docs/providers/aws/guide/quick-start/

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有