无服务器,节点和Hummus。编译二进制文件不起作用

时间:2017-12-01 06:30:00

标签: node.js lambda serverless hummus.js

我尝试使用无服务器框架在Lambda函数上使用HummusJS进行部署。

Hummus npm库需要一个二进制编译才能运行。这个(hummus.node)在其node_modules文件夹中提供。但是当我需要“鹰嘴豆泥”时图书馆正在抛出一个错误。



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);
};




  

模块初始化错误:错误(本机)时出错   Module.load中的Object.Module._extensions..node(module.js:597:18)   (module.js:487:32)在tryModuleLoad(module.js:446:12)at at   Module.require中的Function.Module._load(module.js:438:3)   (module.js:497:17)at require(internal / module.js:20:19)at   宾语。   (/var/task/pdf-manipulator/node_modules/hummus/hummus.js:5:31)at at   Object.Module._extensions..js中的Module._compile(module.js:570:32)   (module.js:579:10)

2 个答案:

答案 0 :(得分:1)

我使用docker-lambda构建二进制文件,然后将其复制到'/node_modules/hummus/bindings/hummus.node'。

https://github.com/lambci/docker-lambda

然后我可以在docker-lambda中运行应用程序,该应用程序再现了lambda环境。

答案 1 :(得分:0)

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提取正确的二进制文件。