使用 Sharp 库运行 AWS Lambda 函数时出现问题

Posted

技术标签:

【中文标题】使用 Sharp 库运行 AWS Lambda 函数时出现问题【英文标题】:Problem running AWS Lambda function with Sharp library 【发布时间】:2019-06-15 10:11:35 【问题描述】:

我通过 AWS 研讨会 (https://amplify-workshop.go-aws.com/70_generating_thumbnails/10_creating_a_photo_processor_lambda.html) 通过 aws-amplify CLI 创建了一个 lambda 函数。似乎某个地方的 Node.js 版本冲突存在问题。

我认为Sharp库是问题所在,所以我尝试将版本更改为最新版本,看看是否可以解决问题,但并没有解决问题。

CloudWatch 错误日志:

module initialization error: Error
was compiled against a different Node.js version using
NODE_MODULE_VERSION 67. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (module.js:681:18)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/var/task/node_modules/sharp/lib/constructor.js:10:15)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)

我相信有一个简单的解决方法,但我不确定问题的根源在哪里。谢谢。

【问题讨论】:

您使用的是什么节点版本? lambda 仅支持 Node.js 6.108.10。 docs.aws.amazon.com/lambda/latest/dg/programming-model.html 我的 Lambda 函数使用的是 v8.10,很抱歉我忘了提及。由于 NODE_MODULE_VERSION_67 与 Node.js 版本 11 相关,我想知道它来自哪里?锋利的图书馆? 您可能是从本地系统捆绑的,可能安装了node 11。 也可能与***.com/questions/46384591/…重复 将您的本地节点版本更改为8.10,删除node_modulesnpm install、包含node_modules 的捆绑文件夹并上传到lambda。它应该可以工作。 【参考方案1】:

以下内容对我有用:

npm_config_arch=x64 npm_config_platform=linux npm install sharp

由于某种原因,参数不起作用。

【讨论】:

【参考方案2】:

安装sharp时使用您的aws lambda节点版本。

rm -rf node_modules/sharp
npm install --arch=x64 --platform=linux --target=10.4.1 sharp

【讨论】:

谢谢!这对我有用!【参考方案3】:

看起来您已经使用 lambda 不兼容版本的 Node.js 构建了您的 node_modules。仅限 Lambda supports Node.js 6.10 和 8.10。

尝试将您的本地节点版本更改为8.10,删除node_modulesnpm install、包含node_modules 的捆绑文件夹并上传到lambda。这应该可以。

【讨论】:

以上是关于使用 Sharp 库运行 AWS Lambda 函数时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

错误:darwin-x64' 二进制文件不能在 'linux-x64' 平台上使用(AWS lambda + typescript + webpack sharp 模块)

为 aws lambda 构建节点模块

如何将使用Sharp库的无服务器框架应用程序部署到AWS?

AWS lambda 类似于 Haskell 函数的执行

访问 AWS Lambda 的 Amazon CloudWatch 日志

有时,我的 AWS lambda 函数没有使用调用异步运行