python - 减小 Python zip 大小以用于 AWS Lambda

标签 python amazon-web-services docker amazon-s3 aws-lambda

我正在关注 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/

相关文章:

wordpress - HTTP 到 HTTPS 重定向在 AWS ALB 上不起作用

java - Docker 文件 COPY 然后 WORKDIR,但文件位于不同的目录中

docker - 使用 SFTP 从本地机器上的 Sublime Text 编辑 Docker 容器 ("remote"中的文件

python - 如何使用 cli 或 boto3 列出 SQS 队列订阅了哪些 SNS 主题?

jquery - 将 JSON 发布到 Python CGI

python - Django 中的自定义用户测试

python - 在 ubuntu 20.04 中安装 libpq-dev 的问题

ruby-on-rails - 如何在亚马逊 S3 路径中通过 ffmpeg 创建电影截图

amazon-web-services - 如何在 request_spot_instances 中附加 VPC 和子网?

asp.net - Ocelot + consul + 我的 web api (.Net 5) 在 docker 中通过 HTTPS