无服务器 python 要求 slim:true 对依赖项大小没有任何作用
Serverless python requirements slim:true does nothing for dependency size
简介
在 serverless.yml
中使用以下设置时
custom:
pythonRequirements:
dockerizePip: true
slim: true
zip: true
slim:true
和 slim:false
产生相同的文件大小。我该怎么做才能减小 zip 文件的文件大小?
已满
我正在尝试获取 python 代码及其对 aws lambda 函数的依赖,使用 serverless framework. following the recommendations provided here 减少依赖大小以符合 250MB lambda 限制。在我的 serverless.yml 文件中,我有以下内容:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
我的requierments.txt如下:
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
我不断收到以下错误:
Unzipped size must be smaller than 262144000 bytes..
这让我相信我的 requierments.zip 文件太大了;详细输出表明 uploading service test.zip file to s3 271.17 MB
.
我正在尝试使文件变小,我 运行 sls deploy
和 dockerizePip
以及 slim
设置为 false
用于测试目的,我得到了相同的结果;一个 271.17 Mb 的 test.zip 文件。这似乎令人费解,据我所知,slim: true
会在压缩文件之前减小文件大小,但 运行 slim:true
和 slim:false
会产生相同的文件大小。我怎样才能使 slim
工作?
更新 1:
我尝试在 pythonRequierments
中添加一个 slimPattern
,正如 here 所讨论的
slimPatterns:
- '**/*.dist-info/**'
但所有 dist 信息目录仍然存在于 zip 文件中,并且输出大小相同 (271.17MB)
更新 2:
我保留了更新 1 中的所有内容,但删除了 .serverless 目录和 requierments.zip。所有 .dist-info 目录仍然存在,即使我在 slimPatterns
中排除了它们(或者我认为如此)。
更新 3:
我尝试使用包排除,执行以下操作:
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
这确实成功地删除了 node_modules(我之前应该这样做),但没有成功地以任何方式更改 .requierments.zip
。所有 .dist-info
个目录保留。
更新 4:
我关注了this,在pythonRequirements
中添加了一个noDeploy
字段,其中包括setuptools
和six
。尽管如此,两者最终都出现在我的 .requirements.zip
中,并且我的文件大小没有改变(269.9 Mb,与更新 3 相同,由于删除 node_modules
而略小)
它对我也不起作用。我最终使用以下选项使用图层 -
custom:
pythonRequirements:
slim: true
layer: true
这将我的部署包大小减少到不到 10mb。然后所有依赖项进入一个单独的 zip(~100mb),创建一个 Lambda 层。这也有助于减少 Lambda 冷启动问题。
真的,这个问题背后的基本概念是有缺陷的。这个问题的主要目的是如何将大的依赖关系压缩到 Lambdas 大小约束上。最近,AWS 发布了对 Lambda 函数的 EFS 支持,这意味着您可以将卷直接挂载到您的 Lambda 函数上。这意味着几乎无限的存储空间,并且没有压缩要求,这意味着冷启动显着减少。此外,这些文件系统之一可以挂载到多个 Lambda 函数。
我不会深入细节,还有很多事情要做,但如果你想在 Lambda 上获得大型依赖树,我推荐以下内容:
- 创建 VPC
- 创建一个 ec2 实例
- 创建 EFS 卷并将其装载到您的 ec2 实例
- 通过
pip install -r requierments.txt -t /mnt/.../efs/path
将依赖项安装到 efs 实例
- 将 EFS 实例挂载到 serverless.yml
中的 lambda
- 将 EFS 卷上的模块添加到 lambda 函数,方法是将其附加到路径
简介
在 serverless.yml
中使用以下设置时custom:
pythonRequirements:
dockerizePip: true
slim: true
zip: true
slim:true
和 slim:false
产生相同的文件大小。我该怎么做才能减小 zip 文件的文件大小?
已满
我正在尝试获取 python 代码及其对 aws lambda 函数的依赖,使用 serverless framework. following the recommendations provided here 减少依赖大小以符合 250MB lambda 限制。在我的 serverless.yml 文件中,我有以下内容:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
我的requierments.txt如下:
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
我不断收到以下错误:
Unzipped size must be smaller than 262144000 bytes..
这让我相信我的 requierments.zip 文件太大了;详细输出表明 uploading service test.zip file to s3 271.17 MB
.
我正在尝试使文件变小,我 运行 sls deploy
和 dockerizePip
以及 slim
设置为 false
用于测试目的,我得到了相同的结果;一个 271.17 Mb 的 test.zip 文件。这似乎令人费解,据我所知,slim: true
会在压缩文件之前减小文件大小,但 运行 slim:true
和 slim:false
会产生相同的文件大小。我怎样才能使 slim
工作?
更新 1:
我尝试在 pythonRequierments
slimPattern
,正如 here 所讨论的
slimPatterns:
- '**/*.dist-info/**'
但所有 dist 信息目录仍然存在于 zip 文件中,并且输出大小相同 (271.17MB)
更新 2:
我保留了更新 1 中的所有内容,但删除了 .serverless 目录和 requierments.zip。所有 .dist-info 目录仍然存在,即使我在 slimPatterns
中排除了它们(或者我认为如此)。
更新 3:
我尝试使用包排除,执行以下操作:
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
这确实成功地删除了 node_modules(我之前应该这样做),但没有成功地以任何方式更改 .requierments.zip
。所有 .dist-info
个目录保留。
更新 4:
我关注了this,在pythonRequirements
中添加了一个noDeploy
字段,其中包括setuptools
和six
。尽管如此,两者最终都出现在我的 .requirements.zip
中,并且我的文件大小没有改变(269.9 Mb,与更新 3 相同,由于删除 node_modules
而略小)
它对我也不起作用。我最终使用以下选项使用图层 -
custom:
pythonRequirements:
slim: true
layer: true
这将我的部署包大小减少到不到 10mb。然后所有依赖项进入一个单独的 zip(~100mb),创建一个 Lambda 层。这也有助于减少 Lambda 冷启动问题。
真的,这个问题背后的基本概念是有缺陷的。这个问题的主要目的是如何将大的依赖关系压缩到 Lambdas 大小约束上。最近,AWS 发布了对 Lambda 函数的 EFS 支持,这意味着您可以将卷直接挂载到您的 Lambda 函数上。这意味着几乎无限的存储空间,并且没有压缩要求,这意味着冷启动显着减少。此外,这些文件系统之一可以挂载到多个 Lambda 函数。
我不会深入细节,还有很多事情要做,但如果你想在 Lambda 上获得大型依赖树,我推荐以下内容:
- 创建 VPC
- 创建一个 ec2 实例
- 创建 EFS 卷并将其装载到您的 ec2 实例
- 通过
pip install -r requierments.txt -t /mnt/.../efs/path
将依赖项安装到 efs 实例
- 将 EFS 实例挂载到 serverless.yml 中的 lambda
- 将 EFS 卷上的模块添加到 lambda 函数,方法是将其附加到路径