如何减少AWS Lambda的打包python zip文件的大小

时间:2018-03-30 02:57:48

标签: python amazon-web-services aws-lambda

下午,

我最近遇到了AWS Lambda和Azure Functions。 AWS对压缩文件和解压缩文件的大小施加了限制,这对于python脚本需要包含所有相关模块。我一直在使用lambda-uploader打包我的脚本及其模块依赖,但是pandas包太大了。

我见过人们在AWS Lambda上完成机器学习和使用pandas的例子(虽然有点过时),但我看不出他们是如何做到的。有什么建议吗?

6 个答案:

答案 0 :(得分:3)

您上传到lambda的软件包不应包含Lambda运行代码所需的代码和支持模块。 Lambda控制台UI limits的文件大小为10MB,但是如果将它们放在S3存储桶中,则可以上传最大50MB的zip文件,然后请求Lambda从S3加载它们。

您需要执行的任何其他资产(如机器学习模型)应单独上载到S3,然后在执行时从Lambda函数中下载。 Lambda函数可以写入/tmp文件夹,但请记住,它只能访问512MB的磁盘空间。另外请记住,Lambda函数的最大运行时间为300秒,因此下载非常大的文件需要花费一些时间来完成您正在下载的数据的实际工作。

答案 1 :(得分:1)

要获得尽可能小的zip文件,请使用选项-9

$ zip -9

答案 2 :(得分:0)

尝试使用Zappa。将slim_handler添加到您使用true创建的zappa_settings.json的{​​{1}}中。

答案 3 :(得分:0)

最好的方法是使用Serverless Framework中概述的this article。它有助于使用模仿亚马逊Linux环境的docker映像对它们进行压缩。此外,它会自动使用S3作为Lambda的代码存储库,这会增加大小限制。提供的文章是非常有用的指南,并且与开发人员在AWS上使用tensorflow和其他大型库的方式相同。

如果您仍然遇到 250MB大小限制,则可以尝试遵循this article,它使用与上一篇文章相同的python-requirements-plugin,但可以选择-slim: true。这将帮助您通过从文件中删除不必要的文件来最佳地压缩文件包,从而使您可以在解压缩之前和之后减小文件包的大小。

答案 4 :(得分:0)

如果您使用的是无服务器的slim选项,但仍然达到250MB的限制,则可以使用选项zip: true。这样可以使所有程序包在部署过程中都保持压缩状态,您只需要将它们解压缩到处理程序模块中即可,如here所述:

try:
  import unzip_requirements
except ImportError:
  pass

答案 5 :(得分:0)

如果您使用的是Python库,则可以摆脱botocore,boto3,因为它们已经存在于AWS的lambdas函数中。