减少无服务器部署包的大小

Fro*_*sen 5 amazon-web-services aws-lambda serverless-framework

我有一个 python 脚本,我想在 AWS 上作为 lambda 函数运行。不幸的是,解压后的包比允许的 250 MB 大,主要是由于 numpy (85mb) 和 pandas (105mb)

我已经做了以下但大小仍然太大:

1) 排除未使用的文件夹:

package:
    exclude:
        - testdata/**
        - out/**
        - etc/**
Run Code Online (Sandbox Code Playgroud)

2)压缩python包:

custom:
    pythonRequirements:
        dockerizePip: true 
        zip: true
Run Code Online (Sandbox Code Playgroud)

如果我解压缩由serverless package我生成的 zip 文件,我会找到一个.requriements.zip包含我的 python 包的.virtualenv/文件夹,然后文件夹中还有我的虚拟环境,其中再次包含所有 python 包。我试图排除 中的.virtualenv/../lib/python3.6/site-packages/**文件夹serverless.yml,但随后在调用该函数时出现内部服务器错误。

还有其他参数可以减小封装尺寸吗?

Ser*_*lev -6

(您确定需要微服务pandasnumpy?这些库中没有任何“微”内容)。

有一种方法。使用 Zappa 部署 Lambda https://github.com/Miserlou/Zappa。无论如何,这是一种编写、部署和管理 Python Lambda 的便捷方法。但使用 Zappa,您可以指定一个名为 的选项slim_handler。如果设置为true,您的大部分代码将驻留在 S3 中,并在 Lambda 执行后被拉取:

AWS 目前将 Lambda zip 大小限制为 50 MB。如果您的项目大于此值,请在 zappa_settings.json 中设置 slim_handler: true。在这种情况下,您的胖应用程序包将被替换为仅包含处理程序的小型包。然后,处理程序文件在运行时从 S3 中拉取大型项目的其余部分!大型项目的初始负载可能会增加启动开销,但在热 lambda 函数上差异应该很小。请注意,这也会占用应用程序函数的内存空间。