无服务器 python 要求 slim:true 对依赖项大小没有任何影响

War*_*x56 6 python aws-lambda serverless-framework

简短的

在 serverless.yml 中使用以下设置时

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

slim:trueslim:false产生相同的文件大小。我可以采取什么措施来减小 zip 文件的文件大小?

满的

我正在尝试获取 python 代码,它依赖于使用无服务器框架的 aws lambda 函数。按照此处提供的建议减少依赖项大小以符合 250MB lambda 限制。在我的 serverless.yml 文件中,我有以下内容:

provider:
  name: aws
  runtime: python3.6

plugins:
  - serverless-python-requierments

custom:
  pythonRequierments:
    dockerizePip: true
    slim: true
    zip: true

functions:
...
Run Code Online (Sandbox Code Playgroud)

我的requierments.txt如下:

xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
Run Code Online (Sandbox Code Playgroud)

我不断收到以下错误:

Unzipped size must be smaller than 262144000 bytes..
Run Code Online (Sandbox Code Playgroud)

这让我相信我的 requierments.zip 文件太大;详细输出说明uploading service test.zip file to s3 271.17 MB

我正在尝试缩小文件大小,我运行sls deploy,dockerizePipslim设置false为用于测试目的,我得到了相同的结果;271.17 Mb 的 test.zip 文件。这似乎令人困惑,因为我知道它slim: true会在压缩文件之前减小文件大小,但运行并slim:true产生slim:false相同的文件大小。我怎样才能slim工作?

更新1:

我尝试在此处slimPattern添加一个讨论的内容pythonRequierments

slimPatterns:
  - '**/*.dist-info/**'
Run Code Online (Sandbox Code Playgroud)

但所有 dist info 目录仍然存在于 zip 文件中,并且输出大小相同 (271.17MB)

更新2:

我保留了更新 1 中的所有内容,但删除了 .serverless 目录和 requierments.zip。所有 .dist-info 目录仍然保留,即使我将它们排除在外slimPatterns(或者我是这么认为的)。

更新3:

我尝试使用包排除,执行以下操作:

package:
  exclude:
    -node_modules/**
    -'**/*.dist-info/**'
Run Code Online (Sandbox Code Playgroud)

这确实成功地删除了node_modules(我之前应该这样做),但没有成功地.requierments.zip以任何方式进行更改。所有.dist-info目录均保留。

更新4:

我按照这个,添加了一个noDeploy字段pythonRequirements,其中包括setuptoolssix。尽管如此,两者最终都在我的 中.requirements.zip,并且我的文件大小没有改变(269.9 Mb,与更新 3 相同,由于删除了 ,所以文件大小稍小node_modules

Sar*_*ain 3

它对我也不起作用。我最终使用以下选项使用图层 -

custom:
  pythonRequirements:
    slim: true
    layer: true
Run Code Online (Sandbox Code Playgroud)

这将我的部署包大小减少到不到 10mb。然后,所有依赖项都会进入一个单独的 zip (~100mb),从而创建 Lambda 层。这也有助于减少 Lambda 冷启动问题。