AWS Lambda:如何使用 Pillow 库?

AWS Lambda : How to use Pillow library?

我正在尝试创建一个 AWS lambda 函数,以便为我上传的图像创建缩略图。 我的脚本在本地 运行 很好,我按照这个 tutorial 来部署我的函数,但是我的 Pillow 库有问题,事实上,当我测试我的函数时,我可以看到以下日志:

我发现这个 post 有同样的问题,但在我的情况下,我无法在机器上执行命令行。

您必须在您的 lambda 程序包中包含 libjpeg.so,但它还需要使用 patchelf 实用程序进行一些调整。假设您通过“pip install module-name -t”(而不是通过 virtualenv)准备 lambda 包,请执行以下操作:

cd into/your/local/lambda/package/dir
cp -L $(ldd PIL/_imaging.so|grep libjpeg|awk '{print }') PIL/
patchelf --set-rpath PIL PIL/_imaging.so
# zip, deploy and test the package

此脚本适用于 Pillow 版本 3.2.0。

关于patchelf:在Ubuntu下可以'apt install'编辑,但在其他Linux下可能需要built from source

这里的问题是 Pillow 使用必须为完全正确的环境构建的本机库。

我通过将我的要求安装在一个非常接近 AWS Lambda 环境 lambci/lambda 的 Docker 容器中解决了这个问题。我用的是 build-python3.8 版本。

我在那里安装了我的要求,并压缩了 /var/lang/lib/python3.8/site-packages/ 目录的全部内容以及我的 lambda 函数文件。

我用标准的亚马逊 Linux Docker 图片试过了,但没有用。只有 lambci/lambda 图片对我有用。