【问题标题】:Cloud9 deploy hitting size limit for numpy, pandasCloud9 部署达到 numpy、pandas 的大小限制
【发布时间】:2019-11-14 15:39:51
【问题描述】:
我正在 Cloud9 中构建以部署到 Lambda。我的功能在 Cloud9 中运行良好,但是当我去部署时出现错误
解压后的大小必须小于 262144000 字节
运行du -h | sort -h 表明我最大的罪犯是:
-
/debug 291M
-
/numpy 79M
-
/pandas 47M
-
/botocore 在 41M
我的函数非常简单,它调用一个服务,使用 panda 格式化响应,然后发送它。
- 调试中有什么?如何从部署包中精简/消除它?
- 如果其他人占用了大部分内存限制,他们将如何使用库?
【问题讨论】:
标签:
pandas
aws-lambda
aws-cloud9
【解决方案1】:
了解问题根源的简要背景
问题不在于您的功能,而在于压缩包的大小。根据 AWS documentation,压缩包的总大小不得超过 3MB。话虽如此,如果包大小不可避免地大于 3MB,因为库可能有许多依赖项,那么请考虑将压缩包上传到 AWS S3 bucket。注意:即使 s3 存储桶的大小限制为 262MB。确保您的包裹不超过此限制。您发布的错误消息Unzipped size must be smaller than 262144000 bytes 指的是部署包(即库)的大小。
现在,了解使用 AWS 时的一些事实,
-
AWS 容器是空的。
- AWS 容器有一个 linux 内核
- AWS Cloud9 只是一个类似于 RStudio 或 Pycharm 的 IDE。它使用 S3 存储桶来保存已安装的包。
这意味着您需要了解以下内容:
包及其相关依赖项
从 cloud9 中提取 linux 编译的包并保存到一个文件夹结构中,例如 python/lib/python3.6/site-packages/
解决此问题的可能/可行的解决方案
通过减小封装大小来克服这个问题。见下文。
减小部署包大小
使用图层
在 AWS 中转到 Lambda 并创建一个层
附加包含 python 包文件夹的 S3 存储桶链接。确保 lambda 函数 IAM 角色有权访问 S3 存储桶。
确保解压后的文件夹大小小于 262MB。因为如果它 >260 MB,那么它就不能附加到 AWS 层。你会得到一个错误,Failed to create layer version: Unzipped size must be smaller than 262144000 bytes