如何突破AWS Lambda函数250MB的代码及层总容量限制?
AWS Lambda依赖容量超限解决方案
容量限制说明
Lambda代码+所有挂载层的解压后总容量250MB是官方固定硬限制,不支持扩容申请,只能通过依赖瘦身或架构调整解决问题。
方案1:依赖包瘦身(可大幅缩减体积)
你可以安全删除依赖包内的冗余文件,不会影响正常功能运行:
- 通用可删除内容(所有依赖包都适用)
- 全部
__pycache__目录、.pyc/.pyo缓存文件 - 测试目录
tests、示例目录examples、文档目录doc/docs - 多架构冗余二进制文件:只保留和你Lambda运行架构匹配的
.so动态库文件,删除另一架构的文件(比如你用x86_64环境就删除所有arm64架构的二进制文件,反之同理)
- 全部
- 针对性可删除内容
- 你仅需statsmodels的分布相关功能时,可直接删除
tsa(时间序列)、multivariate(多变量统计)、discrete(离散模型)、emplike(经验似然)等你用不到的子模块,仅保留distributions相关目录即可,删除前可先在本地测试你用到的功能是否正常 - matplotlib可删除多余字体文件、非必要的配色配置文件、内置示例资源
- 你仅需statsmodels的分布相关功能时,可直接删除
- 安装/打包优化
- 用
pip install --no-deps安装依赖,避免自动安装重复的冗余依赖包 - 打包层文件时使用最高压缩比,命令参考:
zip -9 -r lambda-layer.zip python/
- 用
方案2:架构调整彻底规避容量限制
如果瘦身之后还是无法降到250MB以内,可以选择更简单的架构调整方案:
- 改用容器镜像部署Lambda:容器镜像的容量上限为10GB,完全可以容纳你所有的依赖包,不需要做复杂的瘦身操作,只需要把依赖打包到容器镜像推送到ECR即可直接部署Lambda,业务代码不需要做任何修改
- 拆分业务逻辑到多个Lambda:将不同功能的逻辑拆分为独立的Lambda函数,每个Lambda仅加载自身需要的依赖,比如统计类Lambda只加载statsmodels、numpy、pandas,NLP类Lambda只加载gensim、nltk、sklearn,可视化类Lambda只加载matplotlib、pyLDAvis,单个Lambda的依赖总大小就很容易控制在250MB以内
内容的提问来源于stack exchange,提问作者mganti
相关产品推荐
相关产品推荐

