1

我正在尝试使用无服务器框架在 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);
};

模块初始化错误:在 Object.Module._extensions..node (module.js:597:18) 处的 Error (native) 在 Module.load (module.js:487:32) 在 tryModuleLoad (module.js:446: 12) 在 Function.Module._load (module.js:438:3) 在 Module.require (module.js:497:17) 在 require (internal/module.js:20:19) 在 Object. (/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)

4

2 回答 2

1

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

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

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

于 2017-12-06T01:27:34.033 回答
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 提取正确的二进制文件。

于 2019-03-21T22:59:27.783 回答