我正在遵循这篇博客文章,创建一个使用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中创建以下错误:Failed to create layer version: Unzipped size must be smaller than 262144000 bytes
。
这里是我的requirements.txt
:
s3fs
scrapy
pandas
requests
我在使用pandas将parquet文件保存到S3存储桶时,遇到了以下错误:[ERROR] ImportError: Install s3fs to access S3
。因此,我需要包含s3fs
。但是这会导致镜像层的大小大大增加。如果不包含s3fs
,则未解压缩的层数小于200MB。
我的问题是: 如何在仍使用Docker并保留requirements.txt
中的s3fs
的情况下,将镜像层大小减少到小于250MB? 我无法解释50MB+的差异,特别是在PyPi上s3fs
的大小小于100KB。
最后,对于那些质疑我在Lambda中使用Scrapy的人:我的爬虫程序非常简单,启动EC2实例会过度消耗资源。