【问题标题】:Reduce size of serverless deploy package减少无服务器部署包的大小
【发布时间】:2019-04-12 03:38:00
【问题描述】:

我有一个 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 包。我曾尝试排除serverless.yml 中的.virtualenv/../lib/python3.6/site-packages/** 文件夹,但随后在调用该函数时出现内部服务器错误。

还有其他参数可以减小包裹尺寸吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我认为这个信息已经过时了,zip文件的大小无关紧要,重要的是解压缩文件的大小,它必须小于250 Mb。
      • 此信息是最新的。部署包不能超过 50 Mb。未压缩代码的大小不能超过 250 Mb,但这与此处无关。 Zappa 会将代码/库下载到 /tmp,这允许高达 512 Mb 的存储空间。
      • hmm...这很奇怪,我部署了几次 50+ Mb 的 zip,但它仅在解压缩后的大小大于 250Mb 时才停止工作,并且它明确表示 已解压缩 错误消息中的文件大小必须为
      • 我无法对此发表评论,但文档非常清楚,部署包只有 50 Mb:docs.aws.amazon.com/lambda/latest/dg/limits.html
      • 看来只要你通过 s3 加载 zip 就可以超过 50MB。无论哪种方式,250MB 的解压缩限制都是相同的。
      猜你喜欢
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2017-06-18
      相关资源
      最近更新 更多