为AWS Lambda构建节点模块

猴子驴

我正在尝试在AWS Lambda中使用Sharp库,但它要求为lambda环境编译模块。指令说要创建一个ec2实例并在那里编译它-但是我注意到有一些工具可以帮助您解决这些问题,但是它们至少已经使用了一年,并且没有维护。是否有Serverless随附的软件包,或者现在被认为是标准方式的软件包?

我发现了这些,但自提交以来它们都已经至少一年了

https://github.com/node-hocus-pocus/thaumaturgy

https://github.com/Max-Kolodezniy/aws-lambda-build

https://github.com/tomdale/lambda-packager

也许在某个目录下,我可以在其中下载用于AWS Lambda的预编译Sharp库?

尼克·苏美子

我使用在运行Node.js 6.10.1的AWS EC2实例上创建的sharp-0.17.3-aws-linux-x64-node-6.10.1.tar.gz tarball使其工作压缩包包含目录,其中包含特定于Lambda执行环境的系统二进制文件(libvips库)node_modules/sharp

项目结构

为了避免本地node_modules/(在Mac上为Nodejs 7.5)与压缩包node_modules/内部(在Linux上为Nodejs 6.10 之间发生冲突,我在子目录下创建了Lambda服务。项目结构如下:

node_modules/
service/
  node_modules/ <= sharp-0.17.3-aws-linux-x64-node-6.10.1.tar.gz
  utils/
  handler.js
  package.json  <= engines: node 6.10.1
  serverless.yml
src/
jasmine.json
package.json

我需要的大多数依赖关系都是出于开发和测试目的。这些都保存在根package.json文件中(也包括sharp,但已在我的Nodejs 7.5环境中编译,可在本地测试图像操作)。

Myservice/handler.jsservice/utils/包含带有Lambda函数处理程序的ES6兼容源代码–它是从src/目录中编译的

如果我需要其他依赖来进行生产(除之外sharp),则将它们安装到services/package.jsonusing--prefix选项。但不是aws-lambda,也不是aws-sdk-它们是全局安装在Lambda内的,这意味着无需将它们包括在可部署.zip文件中。

npm i -S lodash --prefix services/

它确保安装lodash与Lambda环境兼容版本,因为service/package.json定义了Nodejs版本依赖于:

{
  "private": true,
  "engines": { "node" : "6.10.1" },
  "dependencies": {
    ...
  }
}

但是,有一个细微差别-其他生产依存关系不必与环境有关。如果是这样,它们将无法工作,因为您是从本地计算机上安装它们的,而不是Lambda的计算机。

Lambda功能部署

由于Lambda需要.zip存档,因此我压缩目录的内容service/而且我的Lambda函数有效。一切都与ES6兼容,sharp具有Lambda环境二进制文件,而我的其他生产依赖版本与Nodejs 6.10.1相关。


另外,我建议使用Serverless⚡️(我也使用它)。它极大地简化了Lambda函数的开发和部署。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AWS LAMBDA RequestHandler为无效输出

AWS Lambda函数返回“找不到模块'索引'”,但配置中的处理程序设置为索引

在Go中为AWS Lambda指定多个事件处理程序

为SonarCloud构建多模块Maven项目

在Java中为AWS Lambda执行“ Hello World”时出错

在AWS中找不到模块``扩展''Lambda节点JS

无法为AWS Lambda导入grequest

为AWS Device Farm构建XCTest UI测试

将AWS Lambda函数认证为PHP脚本

在Java中为AWS Lambda处理事件对象

使用角度为6的节点路径模块

AWS为Lambda创建Cloudformation日志警报

AWS Lambda代码为Lex转换MP3输入

从AWS Lambda发送SES电子邮件-节点JS错误“找不到模块'nodemailer”

将Ballerina部署为AWS Lambda功能

为Scikit图像构建自定义AWS Lambda层

在异步AWS Lambda函数中使用带有节点获取模块的node.js时遇到问题

AWS Lambda导入模块故障

为pymysql导入AWS lambda层

如何在cloudformation lambda中为AWS Lambda设置maximumRetryAttempt?

节点快递服务器未使用AWS Lambda为Angle App呈现静态内容

AWS Cognito:无法为区域中的认知身份构建端点

AWS Lambda函数中的异常为空

将节点请求模块与 AWS Lambda 和 API Gateway 结合使用

AWS IOT 节点 sdk 为 listThings 和 createThing 提供 ResourceNotFoundException

如何在 AWS SAM 模板中为 lambda 设置 TTL?

在 postman 中为 AWS Cloudwatch 构建 GetMetricData API

为每个 BST 节点构建遍历路径

无法使用 Linux Alpine docker 为 AWS lambda 构建 zip 文件