使用AWS Lambda编译本机代码(npm安装)的软件包

使用AWS Lambda编译本机代码(npm安装)的软件包,lambda,aws-lambda,serverless-framework,serverless-architecture,sharp,Lambda,Aws Lambda,Serverless Framework,Serverless Architecture,Sharp,我需要在Lambda函数中使用该软件包来调整图像大小,但在我的Windows计算机中执行“npm安装”时,它会生成本机代码,这在托管Lambda的Amazon Linux服务器中肯定不起作用 使用无服务器时,建议采用什么方法解决此问题?在Windows机器上为Lambda开发NodeJS图像处理应用程序时,我遇到了类似的问题。我设法通过使用解决了这个问题 由于AWS Lambda底层执行环境基于Amazon Linux映像,在该映像中,AWS for Docker将公开该映像,因此您可以在Win

我需要在Lambda函数中使用该软件包来调整图像大小,但在我的Windows计算机中执行“npm安装”时,它会生成本机代码,这在托管Lambda的Amazon Linux服务器中肯定不起作用


使用无服务器时,建议采用什么方法解决此问题?

在Windows机器上为Lambda开发NodeJS图像处理应用程序时,我遇到了类似的问题。我设法通过使用解决了这个问题

由于AWS Lambda底层执行环境基于Amazon Linux映像,在该映像中,AWS for Docker将公开该映像,因此您可以在Windows机器中实际运行Amazon Linux容器


因此,在容器中,我将我的代码克隆到那里,运行
npm安装
,将它们压缩并上传到S3 bucket中,最后从S3创建/更新Lambda代码。

如果您想更干净地与无服务器框架集成,您可以在装载到工作目录的Docker容器中安装NPM包:

对于节点v6.10:

$docker run-v“$PWD”:/var/task lambci/lambda:build-nodejs6.10 npm安装

对于节点v4.3:

$docker run-v“$PWD”:/var/task lambci/lambda:build-nodejs4.3 npm安装

这将安装
package.json中的所有包,并将
node\u modules/
装载到目录中


这是使用来自的Docker容器,它非常接近实际的AWS Lambda环境。

您使用无服务器框架实现了吗?我不确定什么是最好的方法。我从来没有用过docker,所以我有点迷路了。这个命令是否应该安装在linux虚拟机中编译的node_模块,覆盖当前的Windows模块?然后我可以像往常一样进行“sls部署”@Emi Yep!这是正确的。您将启动一个Docker容器(类似于Linux虚拟机)并运行“npm安装”。“-v”命令将本地卷装入容器中的卷,以便共享数据。这样,您的容器将能够安装您的
包.json
,因此它知道要安装哪些包,并且
节点模块中安装的包将在您的目录中可用。注意:我还没有在Windows上做Docker,所以音量可能会比较复杂。谢谢!运行此命令时出现错误:“错误:EACCES:权限被拒绝,mkdir'/var/task/node_modules'”和“请以root/Administrator身份再次尝试运行此命令。”。是否要在此命令中添加其他内容?由于您使用的是Windows,您可能需要切换装载方式。您使用的是Windows命令行还是Powershell?他有一些帮助。您需要将卷装载部分(
-v“$PWD”:/var/task
)切换到
-v%cd%:/var/task
(对于Windows命令行)或Powershell(
-v${PWD}:/var/task
)。