无服务器 NodeJS / 本机 node_modules

Serverless NodeJS / Native node_modules

我在使用无服务器框架将节点模块加载到 AWS Lambda 中时遇到问题。我的一个节点包使用本机库,因此我使用 EC2 创建 node_module 文件夹,然后将它们复制到我的无服务器项目中。如果我手动压缩项目并上传到 AWS Lambda,一切正常,但如果我使用 serverless deploy 没有指定工件,我会收到有关模块的错误消息(具体来说:ELF file's phentsize not the expected size 关于 .node 文件)

我已经尝试添加 excludeDevDependencies: false 这使得部署更大,但仍然给我错误。目前,它仅在我压缩项目文件夹的内容并将该文件指定为要上传的工件时才有效。是否有不同的方法来获取具有本机绑定的节点模块以使用无服务器部署?

更新:关闭开发依赖排除,使用serverless package打包并检查无服务器创建的扩展zip文件后,我发现打包后.o和.a文件的文件大小不同版本与原版相比。这正常吗?

由于 Lambda 在 Linux 容器上运行,您应该 运行 serverless deploy 来自 Linux 机器。

这样,您的本机模块将针对您的目标架构进行编译,即 Linux。

要检查 serverless 创建的部署包,您可以使用 sls packagesls deploy --noDeploy(对于旧版本),并检查它创建的 .serverless 目录.您将在此处看到一个 zip 文件,解压缩其内容,然后从那里测试代码。

如果此 zip 的内容不是您所期望的(与您手动复制它们时不同),那么您的文件结构可能有问题 and/or serverless.yml.

我 运行 进入这个问题并进行了一些挖掘。事实证明,serverless v1.21.0 破坏了二进制文件的打包。

https://forum.serverless.com/t/serverless-1-21-0-breaks-sharp-library/2606

https://github.com/serverless/serverless/issues/4182

建议的修复是升级到 v1.21.1