如何缩小含s3fs的Python AWS Lambda层体积,满足250MB容量限制
体积暴增原因说明
s3fs本身包体积仅不到100KB,但它依赖aiobotocore、botocore等组件,其中仅botocore默认安装后的体积就超过70MB,这是添加s3fs后层体积超出阈值的核心原因。
优化方案(保留Docker构建方式、保留s3fs依赖)
- 第一步:安装依赖时禁用缓存
修改Docker执行命令,添加--no-cache-dir参数避免pip缓存占用额外空间:docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install --no-cache-dir -r requirements.txt -t python/lib/python3.8/site-packages/; exit" - 第二步:清理非必要文件
依赖安装完成后,进入python/lib/python3.8/site-packages/目录执行以下清理命令,删除缓存、测试用例、说明文档等无用文件:find . -type d -name "__pycache__" -exec rm -rf {} + find . -type f -name "*.pyc" -delete find . -type d -name "tests" -exec rm -rf {} + find . -type d -name "*.dist-info" -exec rm -rf {} + find . -type d -name "*.egg-info" -exec rm -rf {} + - 第三步:裁剪botocore冗余文件
botocore默认携带所有AWS服务的API定义文件,你仅需用到S3相关能力,进入botocore/data/目录,删除除s3、sts之外的所有服务目录,这一步可直接减少50MB以上的占用。 - 第四步:精简二进制文件
对所有编译生成的动态链接库执行去调试信息操作,进一步压缩体积:find python/lib/python3.8/site-packages/ -name "*.so" | xargs strip - 第五步:检查重复依赖
你的依赖列表中requests已经是scrapy的默认依赖,可从requirements.txt中移除避免重复安装;也可以通过依赖树检查是否存在多版本共存的冗余组件,删除重复安装的包。
完成以上操作后先执行du -sh python/确认解压后体积小于250MB,再执行原zip命令打包即可。
内容的提问来源于stack exchange,提问作者mmz
相关产品推荐
相关产品推荐

