我正在尝试在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.js
和service/utils/
包含带有Lambda函数处理程序的ES6兼容源代码–它是从src/
目录中编译的。
如果我需要其他依赖来进行生产(除之外sharp
),则将它们安装到services/package.json
using--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需要.zip
存档,因此我压缩目录的内容service/
。而且我的Lambda函数有效。一切都与ES6兼容,sharp
具有Lambda环境二进制文件,而我的其他生产依赖版本与Nodejs 6.10.1相关。
另外,我建议使用Serverless⚡️(我也使用它)。它极大地简化了Lambda函数的开发和部署。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句