我有一个python脚本,我想在AWS上作为lambda函数运行。不幸的是,该软件包的解压缩大于允许的250 MB,主要是由于numpy(85mb)和pandas(105mb)
我已经做了以下但是尺寸仍然太大了:
1)排除未使用的文件夹:
package:
exclude:
- testdata/**
- out/**
- etc/**
2)压缩python包:
custom:
pythonRequirements:
dockerizePip: true
zip: true
如果我解压缩由serverless package
生成的zip文件,我找到一个包含我的python包的.requriements.zip
,然后在.virtualenv/
文件夹中还有我的虚拟环境,其中包含所有的python包。我试图排除.virtualenv/../lib/python3.6/site-packages/**
中的serverless.yml
文件夹,但在调用该函数时出现内部服务器错误。
还有其他参数可以减少包装尺寸吗?
答案 0 :(得分:1)
.virtualenv/
目录不应包含在zip文件中。
如果该目录与serverless.yml
位于同一目录中,则应将其添加为排除在serverless.yml
文件中,否则它将与其他文件一起打包:
package:
exclude:
- ...
- .virtualenv/**
include:
- ...
答案 1 :(得分:-3)
(你确定微服务中需要pandas
和numpy
吗?这些库中没有“微观”。
有一种方法。使用Zappa https://github.com/Miserlou/Zappa部署Lambda。无论如何,这是编写,部署和管理Python Lambdas的便捷方式。但是使用Zappa,您可以指定一个名为slim_handler
的选项。如果设置为true
,则大多数代码将驻留在S3,并且一旦执行Lambda将被拉出:
AWS目前将Lambda zip大小限制为50兆字节。如果你的项目 比这更大,设置slim_handler:true在你的 zappa_settings.json。在这种情况下,您的胖应用程序包将 用一个小的处理程序包替换。然后是处理程序文件 在运行时将大型项目的其余部分从S3中拉下来!该 大型项目的初始加载可能会增加启动开销,但是 在温暖的lambda函数上差异应该是最小的。请注意这一点 也会占用应用程序功能的内存空间。