我正在使用gmNode.js软件包以及AWS Lambda上可用的默认ImageMagick安装。
gm
const gm = require('gm').subClass({ imageMagick: true });
由于某些原因,某些图像的调整大小功能失败。
我使用Amazon Linux AMI(ami- hvm-2016.03.3.x86_64-gp2)创建了EC2实例。我安装了ImageMagick的(旧)6.x版本,可从下载yum。当我在EC2实例上使用该安装程序运行脚本时,它重现了我在Lambda上运行代码时看到的故障,并确认是此版本的IM导致了该故障。
yum
如果我使用安装GraphicsMagick sudo yum install GraphicsMagick。这允许我的脚本执行调整大小而不会出现错误。
sudo yum install GraphicsMagick
const gm = require('gm').subClass({ imageMagick: false });
但是,我不确定如何在无服务器部署中将其捆绑在一起。如果我将GraphicsMagick与脚本安装到相同的文件夹中sudo yum --installroot=/var/task install GraphicsMagick,然后使用此require语句运行脚本:
sudo yum --installroot=/var/task install GraphicsMagick
const gm = require('gm').subClass({ imageMagick: false, appPath: './usr/bin/' });
当我在EC2实例上运行脚本时,调整大小工作。但是,当我使用无服务器部署并且脚本在Lambda中运行时,可执行文件似乎已损坏。 gm呼叫失败,并显示以下错误gm(buffer).size(/*...*/)。
gm(buffer).size(/*...*/)
could not get the image size: ERR: {"code":"EPIPE","errno":"EPIPE","syscall":"write"}
如何构建可与无服务器一起部署的ImageMagick或GraphicsMagick版本?
我启动了最新的aws linux并运行了以下命令。
yum -y install gcc-c++ libpng-devel libjpeg-devel libtiff-devel wget wget https://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.26/GraphicsMagick-1.3.26.tar.gz tar zxvf GraphicsMagick-1.3.26.tar.gz cd GraphicsMagick-1.3.26 ./configure --prefix=/var/task/graphicsmagick --enable-shared=no --enable-static=yes make sudo make install tar zcvf ~/graphicsmagick.tgz /var/task/graphicsmagick/
我将目录下放到本地,然后将其放入要压缩和部署的软件包中。我的布局类似于链接的aws repo代码,但针对无服务器进行了修改。
Lambda代码:
// graphicsmagick dir is at the root of my project const BIN_PATH = process.env['LAMBDA_TASK_ROOT'] + "/graphicsmagick/bin/"; const Gm = require('gm').subClass({ appPath: BIN_PATH }); // below is inside the handler process.env['PATH'] = process.env['PATH'] + ':' + BIN_PATH;
无服务器
package: artifact: /path/to/function.zip
我使用工件并构建自己的zip。如果您遇到以下问题,建议您这样做。 https://github.com/serverless/serverless/issues/3215
# -y to keep the symlinks and thus reduce the size from 266M to 73M cd lambda && zip -FS -q -r -y ../dist/function.zip *
来自以下方面的想法:
https://gist.github.com/bensie/56f51bc33d4a55e2fc9a
https://github.com/awslabs/serverless-image- resizing
编辑:可能还想签出lambda图层。可能只需要做一次这种事情。