Cloud9 部署达到 numpy 的大小限制,pandas

Cloud9 deploy hitting size limit for numpy, pandas

我正在 Cloud9 中构建以部署到 Lambda。我的函数在 Cloud9 中运行良好,但是当我部署时出现错误

Unzipped size must be smaller than 262144000 bytes

运行 du -h | sort -h 表明我最大的罪犯是:

我的功能非常简单,它调用一个服务,使用 panda 格式化响应,然后发送。

  1. 调试中的内容以及我如何从部署包中精简它down/eliminate?
  2. 如果其他人耗尽了大部分内存限制,他们将如何使用库?

了解问题根本原因的简要背景

问题不在于您的功能,而在于压缩包的大小。根据 AWS documentation,压缩包的总大小不得超过 3MB。话虽如此,如果包大小大于 3MB 这是不可避免的,因为库可能有很多依赖项,然后考虑将压缩包上传到 AWS S3 bucket。注意:即使是 s3 存储桶也有 262MB 的大小限制。确保您的包裹不超过此限制。您发布的错误消息 Unzipped size must be smaller than 262144000 bytes 指的是部署包的大小,也就是库。

现在,了解使用 AWS 时的一些事实,

  1. AWS 容器为空
  2. AWS 容器有一个 linux 内核
  3. AWS Cloud9 只是一个 IDE,类似于 RStudio 或 Pycharm。它使用 S3 存储桶来保存已安装的包。

这意味着您需要了解以下内容:

  1. 包及其相关依赖项

  2. 从 cloud9 中提取 linux 编译的包并保存到文件夹结构中,如 python/lib/python3.6/site-packages/

Possible/Workable解决这个问题

通过减小包大小来解决这个问题。见下文。

减小部署包大小

  • 手动方法:删除每个库文件夹中名为 *.info*._pycache 的文件和文件夹。您需要手动查看每个文件夹中的上述文件扩展名才能删除它们。

  • 自动方法:我要弄清楚命令。进行中

使用图层

在 AWS 中转到 Lambda 并创建一个层

附加包含 python 程序包文件夹的 S3 存储桶 link。确保 lambda 函数 IAM 角色有权访问 S3 存储桶。

确保解压缩后的文件夹大小小于 262MB。因为如果它 >260 MB 那么它不能附加到 AWS 层。你会得到一个错误,Failed to create layer version: Unzipped size must be smaller than 262144000 bytes