无服务器NodeJS / Native node_modules

时间:2017-08-31 05:18:02

标签: node.js amazon-web-services aws-lambda serverless-framework

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:2)

我遇到了这个问题并做了一些挖掘。事实证明,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

答案 1 :(得分:0)

由于Lambda在Linux容器上运行,因此您应该从Linux机器运行serverless deploy

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

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

如果此zip的内容不符合您的预期(与您手动复制时的内容不同),那么您的文件结构和/或serverless.yml可能出现问题。