使用 AWS Lambda 编译本机代码 (npm install) 的包
Packages compiling native code (npm install) using AWS Lambda
我需要使用 sharp 包在 Lambda 函数中调整图像大小,但它在我的 Windows 机器上执行“npm install”时构建本机代码,这肯定不会'无法在托管 Lambda 的 Amazon Linux 服务器上工作。
使用无服务器时推荐的解决方法是什么?
我在 Windows 机器上为 Lambda 开发 NodeJS 图像处理应用程序时遇到了类似的问题。我设法通过使用 Docker.
解决了这个问题
由于AWS Lambda底层执行环境是基于AmazonLinux镜像,其中镜像是AWS为Docker制作public的,那么其实可以pull the image 和 运行 您 Windows 机器中的亚马逊 Linux 容器。
所以在容器中,我在其中克隆了我的代码,运行 npm install
,将它们压缩并上传到 S3 存储桶中,最后 create/update Lambda 代码来自S3.
如果你想更干净地与无服务器框架集成,你可以将你的 NPM 包安装在一个 Docker 容器中,该容器已安装到你的工作目录:
对于节点 v6.10:
$ docker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10 npm install
对于节点 v4.3:
$ docker run -v "$PWD":/var/task lambci/lambda:build-nodejs4.3 npm install
这将在您的 package.json
中安装所有软件包并将 node_modules/
安装在您的目录中。
这是使用来自 Lambci 的 Docker 容器,这与实际的 AWS Lambda 环境非常接近。
我需要使用 sharp 包在 Lambda 函数中调整图像大小,但它在我的 Windows 机器上执行“npm install”时构建本机代码,这肯定不会'无法在托管 Lambda 的 Amazon Linux 服务器上工作。
使用无服务器时推荐的解决方法是什么?
我在 Windows 机器上为 Lambda 开发 NodeJS 图像处理应用程序时遇到了类似的问题。我设法通过使用 Docker.
解决了这个问题由于AWS Lambda底层执行环境是基于AmazonLinux镜像,其中镜像是AWS为Docker制作public的,那么其实可以pull the image 和 运行 您 Windows 机器中的亚马逊 Linux 容器。
所以在容器中,我在其中克隆了我的代码,运行 npm install
,将它们压缩并上传到 S3 存储桶中,最后 create/update Lambda 代码来自S3.
如果你想更干净地与无服务器框架集成,你可以将你的 NPM 包安装在一个 Docker 容器中,该容器已安装到你的工作目录:
对于节点 v6.10:
$ docker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10 npm install
对于节点 v4.3:
$ docker run -v "$PWD":/var/task lambci/lambda:build-nodejs4.3 npm install
这将在您的 package.json
中安装所有软件包并将 node_modules/
安装在您的目录中。
这是使用来自 Lambci 的 Docker 容器,这与实际的 AWS Lambda 环境非常接近。