【问题标题】:Run ImageMagick as a python subprocess on AWS lambda在 AWS lambda 上将 ImageMagick 作为 python 子进程运行
【发布时间】:2016-03-28 05:47:20
【问题描述】:

我希望通过为 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 产生错误 ...”后返回一个空的异常线程。

【问题讨论】:

标签: python amazon-web-services amazon-s3 imagemagick-convert aws-lambda


【解决方案1】:

仅当您的 lambda 函数是用 Node.js 编写时,才会预安装 Imagemagick。但是你的 lambda 函数是用 Python 编写的。

来自Lambda support

AWS Lambda 支持以下运行时版本:

  • Node.js:v0.10.36
  • Java:Java 8
  • Python:Python 2.7

如果您创作您的 Node.js 中的 Lambda 函数代码,以下库可用 在 AWS Lambda 执行环境中,因此您不需要包含 他们:

ImageMagick:使用默认设置安装。用于版本控制 信息,请参阅 imagemagick nodejs wrapper 和 ImageMagick native 二进制(搜索“ImageMagick”)。 AWS 开发工具包:适用于 JavaScript 的 AWS 开发工具包 2.2.12版

如果您使用 Python 编写 Lambda 函数代码,则 AWS Lambda 执行中提供了以下库 环境,因此您不需要包含它们:

AWS SDK for Python (Boto 3) 1.2.1 版

没有额外的 可用于 Java 的库。

【讨论】:

  • 当...你知道我还能做些什么吗?是否也可以打包 imagemagick ?看来我必须将整个脚本从 lambda 移到服务器上...
  • 以前从未使用过。您可以尝试 PythonMagick,它是 ImageMagick 的 Python 接口。 wiki.python.org/moin/ImageMagick
  • "您可以尝试 PythonMagick,它是 ImageMagick 的 Python 接口。"是的,但是 PythonMagick 没有预装在 AWS Lambda 上,所以你必须将它包含在你的部署包中,这并不容易。有关说明,请参阅docs.aws.amazon.com/lambda/latest/dg/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2019-10-17
  • 2013-04-28
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多