当前位置: 首页 > 面试题库 >

如何在AWS Lambda上安装GraphicsMagick或ImageMagick?

竺展
2023-03-14
问题内容

我正在使用gmNode.js软件包以及AWS Lambda上可用的默认ImageMagick安装

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导致了该故障。

如果我使用安装GraphicsMagick sudo yum install GraphicsMagick。这允许我的脚本执行调整大小而不会出现错误。

const gm = require('gm').subClass({ imageMagick: false });

但是,我不确定如何在无服务器部署中将其捆绑在一起。如果我将GraphicsMagick与脚本安装到相同的文件夹中sudo yum --installroot=/var/task install GraphicsMagick,然后使用此require语句运行脚本:

const gm = require('gm').subClass({ imageMagick: false, appPath: './usr/bin/' });

当我在EC2实例上运行脚本时,调整大小工作。但是,当我使用无服务器部署并且脚本在Lambda中运行时,可执行文件似乎已损坏。
gm呼叫失败,并显示以下错误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图层。可能只需要做一次这种事情。



 类似资料:
  • 我试图安装win32com。客户端使用下面的语法,但未成功 SyntaxError:无效语法 回溯(最近一次调用):pypiwin32名称中第1行的文件“”。错误:未定义名称“pypiwin32” SyntaxError:无效语法 SyntaxError:无效语法

  • 问题内容: 昨天我大部分时间都在寻找安装的明确答案(Python的软件包管理器)。我找不到一个好的解决方案。 如何安装? 问题答案: 我很惊讶没有人提到这一点-自2013年以来,python本身就能够安装,不需要外部命令(也不需要Internet连接)。 这将创建与安装类似的安装。

  • 我有一个覆盆子Pi4包含ubuntu 18.04。我的ubuntu已经安装从dockerfile和推感谢balena OS在我的覆盆子。 然后,我试图通过在python3环境中遵循这首tuto,在其上安装tensorflow for openvino项目。7.5: https://qengineering.eu/install-tensorflow-2.1.0-on-raspberry-pi-4.

  • 本文向大家介绍如何在Ubuntu上安装ImageMagick,包括了如何在Ubuntu上安装ImageMagick的使用技巧和注意事项,需要的朋友参考一下 使用ImageMagick创建,编辑,合成或转换位图pix。它实际上可以用一种编解码器(超过200种)来读取和写入快照,包括PNG,JPEG,JPEG-2000,GIF,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG。

  • 问题内容: 创建一个显示CSV文件中最新天气的网页后,我需要做一个项目。 我想了解一些详细的操作方法(不要真正获得http://flask.pocoo.org/docs/installation/#installation安装设置) 谁能介意简单地说明我的做法? 谢谢。 我在Windows 7和Windows Powershell上运行。 问题答案: Python 2.7.9+和3.4+ 好消息!

  • 问题内容: 我正在尝试使用Python 3.4将其安装在Windows 8.1笔记本电脑上,但失败了。 首先,我尝试了简单明了的解决方案:。但是,这没有用。它是这样说的: 所以然后我看了一个很棒的有用的东西,叫做 互联网 ,很多人都需要和错误。他们推荐了一个叫Christoph Gohlke的页面,其中他为一堆软件包提供了一些二进制工具。您可以在这里找到它(到lxml部分的快速链接)。 因此,在我