我正在尝试使用无服务器框架在Lambda函数上使用HummusJS进行部署。
Hummus npm库需要一个二进制编译才能运行。这个(hummus.node)在其node_modules文件夹中提供。然而,当我需要'鹰嘴豆泥'时,图书馆正在抛出一个bug。
const hummus = require('hummus');
module.exports.stamp = (event, context, callback) => {
const response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
'Content-Type': 'application/json'
},
body: JSON.stringify({ url: 'url' })
};
callback(null, response);
};
模块初始化错误:在try.oduleLoad上的Module.load(module.js:487:32)处的Object.Module._extensions..node(module.js:597:18)处出现错误(本机)错误(module.js:446: 12)在Function.Module._load(module.js:438:3)的Module.require(module.js:497:17)at的require(internal / module.js:20:19)at。 (/var/task/pdf-manipulator/node_modules/hummus/hummus.js:5:31)在Module._compile(module.js:570:32)处于Object.Module._extensions..js(module.js:579) :10)
我使用docker-lambda构建二进制文件,然后将其复制到'/node_modules/hummus/bindings/hummus.node'。
https://github.com/lambci/docker-lambda
然后我可以在docker-lambda中运行应用程序,它会重现lambda环境。
docker-lambda
解决方案绝对有效。然而,一位同事指出了一个更简单的解决方案,不需要docker-lambda
。
hummus
使用node-pre-gyp
来构建hummus.node
二进制文件,并且有一个环境变量EXTRA_NODE_PRE_GYP_FLAGS
来提供额外的标志。如果为AWS Lambda的运行时环境配置了正确的标志,node-pre-gyp
实际上将找到https://hummus.s3-us-west-2.amazonaws.com/
中存在的正确的预构建二进制文件。
为此,请通过执行以下操作来设置环境变量:
export EXTRA_NODE_PRE_GYP_FLAGS='--target_arch=x64 --target_platform=linux --target_libc=glibc'
然后做npm install
,它应该为AWS Lambda引入正确的二进制文件。