4

我正在尝试在 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 库?

4

4 回答 4

3

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

 

项目结构

为了避免我的本地(Mac 上的 Nodejs node_modules/7.5)和tarball(Linux 上的 Nodejs 6.10)之间的冲突,我在子目录下创建了我的 Lambda 服务。 项目结构如下:node_modules/

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 环境编译,提供在本地测试图像操作)。

我的service/handler.jsservice/utils/包含 ES6 兼容的源代码和Lambda 函数处理程序——它是从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 相关。

 


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

于 2017-03-27T21:29:17.150 回答
1

Nik 的回答绝对帮助我找到了一个可行的解决方案!我要补充的一件事是 serverless-sharp-image 背后的人更新了他们的包,因此 tarball 现在可以与节点 v6.10 一起使用,所以我看不出有理由引用两个不同的节点环境。我在 v6.10 中做所有事情。

https://github.com/adieuadieu/serverless-sharp-image/tree/master/lib

于 2017-04-13T02:06:42.127 回答
1

有类似的问题并设法通过以下方式为 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的文档中

于 2019-03-03T20:44:32.643 回答
1

对于现在偶然发现这篇文章的任何人。我通过将package.json文件复制到AWS Cloud9 IDE并简单地运行npm install. 从那里,只需下载node_modules/文件夹。

于 2021-08-12T13:04:17.783 回答