在AWS Lambda上将ImageMagick作为Python子进程运行

3
我希望您能通过给予AWS lambda来自我的s3存储桶的一系列图像来生成动画GIF,它将下载到其/tmp/文件夹中。我在文档中读到,imagemagick预先安装在lambda上,但由于某种原因,我无法通过python子进程调用它。
import subprocess

# ... some code later ...

# Now, generate the gif  
input_dir = '/tmp/'
output_dir = '/tmp/'

args = (['convert', '-delay', '60', '-dispose', 'Background', '+page'] +
        files_list +
        ['-loop', '0', os.path.join(output_dir, 'animation.gif')])

try:
    subprocess.check_call(args)
    print("gif was generated")
except subprocess.CalledProcessError as e:
    print("gif produced errors ...")
    print(e.output)

你有什么想法可以通过lambda的子进程调用imagemagick吗?我已经能够在本地和ec2上使其工作,但是在lambda上运行不成功。我只收到一个空的.gif文件和一个空的异常线程的响应,输出“gif produced errors ...”。


你看过这个教程吗?http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html - Josep Valls
1个回答

3
如果您的Lambda函数是用Python编写的,那么Imagemagick将不会被预安装。
来自Lambda支持
AWS Lambda支持以下运行时版本:
- Node.js:v0.10.36 - Java:Java 8 - Python:Python 2.7
如果您在Node.js中编写Lambda函数代码,则AWS Lambda执行环境中提供以下库,因此您无需包含它们: ImageMagick:使用默认设置安装。有关版本信息,请参见imagemagick nodejs wrapper和ImageMagick本机二进制文件(搜索“ImageMagick”)。AWS SDK:AWS SDK for JavaScript版本2.2.12。
如果您在Python中编写Lambda函数代码,则AWS Lambda执行环境中提供以下库,因此您无需包含它们: AWS SDK for Python(Boto 3)版本1.2.1。
Java没有其他可用的库。

当然……你知道我还能做些什么吗?是否也可以打包imagemagick?看起来我终究还是得把整个脚本从Lambda移到服务器上…… - 24x7
以前从未使用过。您可以尝试PythonMagick,它是ImageMagick的Python接口。https://wiki.python.org/moin/ImageMagick - helloV
你可以尝试使用PythonMagick,它是ImageMagick的Python接口。但是,在AWS Lambda上没有预安装PythonMagick,所以您需要将其包含在部署包中,这并不容易。请参阅http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html?shortFooter=true#with-s3-example-deployment-pkg-python获取说明。 - Grilse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接