我正在尝试使用Sharp库 AWS </跨度> LAMBDA </跨度> 但它需要编译模块 拉姆达 </跨度> 环境。说明说要创建一个ec2实例并在那里编译它 - 但我现在已经走了?
我发现了这些,但是自提交以来它们都至少有一年的历史了
https://github.com/node-hocus-pocus/thaumaturgy
https://github.com/Max-Kolodezniy/ AWS </跨度> - 拉姆达 </跨度> -建立
https://github.com锟
Nik的答案肯定帮助我找到了一个有效的解决方案!我要补充的一件事是,无服务器 - sharp-image背后的人更新了他们的软件包,因此tarball现在可以与节点v6.10一起工作,所以我没有理由引用两个不同的节点环境。我在v6.10中做了一切。
https://github.com/adieuadieu/serverless-sharp-image/tree/master/lib
有类似的问题,并设法为Linux x64平台安装二进制文件
npm install --arch=x64 --platform=linux --target=8.10.0 sharp
然后像往常一样上传Lambda,它运行得很好。 以上适用于Mac以及Windows和详细信息,请参阅文档 http://sharp.pixelplumbing.com/en/stable/install/#aws-lambda
我使用了它 锐0.17.3-AWS-Linux的x64的节点6.10.1.tar.gz tarball,在AWS EC2实例上运行时创建的 的 Nodejs 6.10.1 强> 。 tarball包含 node_modules/ 目录用 sharp 系统二进制文件(libvips库)特有的 Lambda执行环境 。
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
我需要的大多数依赖项都用于开发和测试目的。这些都保存在root中 package.json 文件(还包括 sharp ,但为我的Nodejs 7.5环境编译,提供本地测试图像操作)。
package.json
我的 service/handler.js 和 service/utils/ 包含与ES6兼容的源代码 Lambda函数处理程序 它是从它转化而来的 src/ 目录。
service/handler.js
service/utils/
src/
如果我需要其他依赖生产(除此之外) sharp ),我安装它们 services/package.json 运用 --prefix 选项。但不是 aws-lambda ,都没有 aws-sdk 它们全局安装在Lambda中,这意味着无需将它们包含在可部署中 .zip 文件。
services/package.json
--prefix
aws-lambda
aws-sdk
.zip
npm i -S lodash --prefix services/
它确保安装 lodash 版本与Lambda环境兼容,因为 service/package.json 定义要依赖的Nodejs版本:
lodash
service/package.json
{ "private": true, "engines": { "node" : "6.10.1" }, "dependencies": { ... } }
但是,其他生产依赖关系并不一定与环境有关。如果是这样,它们将无法工作,因为您从本地计算机安装它们,这不等于Lambda的计算机。
因为Lambda需要 .zip 存档,我压缩我的内容 service/ 目录。我的Lambda功能有效。一切都与ES6兼容, sharp 有Lambda环境二进制文件,我的其他生产依赖版本与Nodejs 6.10.1相关联。
service/
另外,我建议使用 无服务器? (我也用它)。它大大简化了Lambda函数的开发和部署。