Aar*_*ger 5 elf libxml2 amazon-web-services aws-lambda serverless-framework
我有一个使用无服务器、express 和libxmljs(将 JavaScript 绑定到 libxml)的超级基本 AWS Lambda 函数:
无服务器.xml:
service: xmltest
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: us-east-1
functions:
app:
handler: index.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
plugins:
- serverless-offline
Run Code Online (Sandbox Code Playgroud)
索引.js:
const serverless = require('serverless-http');
const express = require('express');
const libxml = require("libxmljs");
const app = express();
app.use(express.json());
app.post('/lookup', async function (req, res) {
res.send({result: "hello world"});
});
module.exports.handler = serverless(app);
Run Code Online (Sandbox Code Playgroud)
当我在本地运行时:
$ curl -X POST http://localhost:3000/lookup -d {"example":123}
{"result":"hello world"}
Run Code Online (Sandbox Code Playgroud)
当我在 AWS 上运行时:
$ curl -X POST https://REDACTED.execute-api.us-east-1.amazonaws.com/dev/lookup -d {"example":123}
{"message": "Internal server error"}
Run Code Online (Sandbox Code Playgroud)
CloudWatch 日志说:
2019-06-05T12:46:43.280Z undefined ERROR Uncaught Exception
{
"errorType": "Error",
"errorMessage": "/var/task/node_modules/libxmljs/build/Release/xmljs.node: invalid ELF header",
"stack": [
"Error: /var/task/node_modules/libxmljs/build/Release/xmljs.node: invalid ELF header",
" at Object.Module._extensions..node (internal/modules/cjs/loader.js:730:18)",
" at Module.load (internal/modules/cjs/loader.js:600:32)",
" at tryModuleLoad (internal/modules/cjs/loader.js:539:12)",
" at Function.Module._load (internal/modules/cjs/loader.js:531:3)",
" at Module.require (internal/modules/cjs/loader.js:637:17)",
" at require (internal/modules/cjs/helpers.js:22:18)",
" at bindings (/var/task/node_modules/bindings/bindings.js:84:48)",
" at Object.<anonymous> (/var/task/node_modules/libxmljs/lib/bindings.js:1:99)",
" at Module._compile (internal/modules/cjs/loader.js:701:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)"
]
}
Run Code Online (Sandbox Code Playgroud)
如何在 AWS 上导入 libxmljs?
我看到一些相关的问题,比如
所以我猜测 libxmljs 中的某些东西是为与 Amazon Linux 不同的架构(我的本地机器是 macOS)构建的。但我不确定如何解决这个问题?
npm install我通过在 Linux 机器上运行而不是在 Mac 上解决了这个问题。
就我而言,我设置了 AWS CodePipeline,它在 EC2 实例上运行所有构建脚本。也可以使用其他托管 CI 管道、Docker 容器等来解决这个问题。
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |