减少无服务器部署包

时间:2017-10-23 11:03:19

标签: amazon-web-services aws-lambda serverless-framework

我有一个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文件夹,但在调用该函数时出现内部服务器错误。

还有其他参数可以减少包装尺寸吗?

2 个答案:

答案 0 :(得分:1)

.virtualenv/目录不应包含在zip文件中。 如果该目录与serverless.yml位于同一目录中,则应将其添加为排除在serverless.yml文件中,否则它将与其他文件一起打包:

package:
  exclude:
    - ...
    - .virtualenv/**
  include:
    - ...

答案 1 :(得分:-3)

(你确定微服务中需要pandasnumpy吗?这些库中没有“微观”。

有一种方法。使用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函数上差异应该是最小的。请注意这一点   也会占用应用程序功能的内存空间。

相关问题