我正在关注 this使用 Docker 创建运行时环境以与 AWS Lambda 结合使用的博客文章。我正在创建一个用于 Python 3.8 的层:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
然后将层存档为 zip:zip -9 -r mylayer.zip python
到目前为止所有标准。问题出现在 .zip
大小,大于 250mb,因此在 Lambda 中产生以下错误:无法创建层版本:解压缩的大小必须小于 262144000 字节
.
这是我的requirements.txt
:
s3fs
scrapy
pandas
requests
我包含了 s3fs
,因为在尝试使用 pandas 将 parquet 文件保存到 S3 存储桶时出现以下错误:[ERROR] ImportError: Install s3fs to access S3
。这个问题是包含 s3fs
会大量增加层大小。没有 s3fs
层是 < 200mb 解压缩。
我最直接的问题是:如何在仍然使用 Docker 并在我的 requirements.txt
中保留 s3fs
的同时将层大小减少到 < 250mb? 我无法解释 50mb 以上的差异,尤其是因为 s3fs
< 100kb on PyPi .
最后,对于那些质疑我将 Lambda 与 Scrapy 结合使用的人:我的爬虫是微不足道的,而启动一个 EC2 实例就太过分了。
最佳答案
缩小图层背后的关键思想是确定 pip
安装的内容以及您可以删除的内容,通常是手动操作。
在你的情况下,因为你只是略高于限制,我会摆脱 pandas/tests
。因此,在创建 zip 层之前,您可以在该层的文件夹中运行以下命令(mylayer
来自您过去的问题):
rm -rvf python/lib/python3.8/site-packages/pandas/tests
这应该会在解包后将您的层修剪到 262MB 限制以下。在我的测试中,它现在是 244MB。
或者,您可以手动查看 python
文件夹,并开始删除不需要的任何其他测试、文档、示例等。
关于python - 减小 Python zip 大小以用于 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69355100/