无服务器python需求slim:true对依赖项大小没有任何影响 简明的
在serverless.yml中使用以下设置时无服务器python需求slim:true对依赖项大小没有任何影响 简明的,python,aws-lambda,serverless-framework,Python,Aws Lambda,Serverless Framework,在serverless.yml中使用以下设置时 custom: pythonRequirements: dockerizePip: true slim: true zip: true slim:true和slim:false导致相同的文件大小。如何减小zip文件的文件大小 满满的 我正在尝试使用该框架获取python代码及其对aws lambda函数的依赖关系。遵循提供的建议,减少依赖项大小,以符合250MB lambda限制。在我的serverless.yml文件
custom:
pythonRequirements:
dockerizePip: true
slim: true
zip: true
slim:true
和slim: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:
...
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
my Requirements.txt的内容如下:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
我不断得到以下错误:
Unzipped size must be smaller than 262144000 bytes..
这让我相信我的requirements.zip文件太大了;详细的输出说明正在将service test.zip文件上载到S3271.17 MB
我一直在努力缩小文件,我用dockerizePip
运行了slsdeploy
,并将slim
设置为false
进行测试,得到了相同的结果;271.17 Mb的test.zip文件。这似乎令人费解,据我所知,slim:true
会在压缩文件之前减小文件大小,但使用slim:true
和slim:false
运行会导致相同的文件大小。如何使苗条
工作
更新1:
我尝试在pythonRequirements
slimPatterns:
- '**/*.dist-info/**'
但是所有dist info目录仍然存在于zip文件中,并且输出大小相同(271.17MB)
更新2:
我保留了更新1中的所有内容,但删除了.serverless目录和requirements.zip。所有的.dist info目录都保留了下来,即使我在slimPatterns
中排除了它们(或者我是这么认为的)
更新3:
我尝试使用包排除,执行以下操作:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
这确实成功地删除了节点_模块(我以前应该这样做),但没有成功地以任何方式更改.requirements.zip
。所有.dist info
目录仍保留
更新4:
我随后在
pythonRequirements
中添加了一个noDeploy
字段,其中包括setuptools
和six
。尽管如此,它们最终都出现在我的.requirements.zip中,而且我的文件大小没有改变(269.9 Mb,与更新3相同,由于删除了节点模块,更新3稍微小了一点)它对我也不起作用。最后,我使用以下选项使用图层-
custom:
pythonRequirements:
slim: true
layer: true
这将我的部署包大小减少到10mb以下。然后,所有依赖项进入一个单独的zip(~100mb),该zip创建一个Lambda层。这也有助于减少Lambda冷启动问题。实际上,这个问题背后的基本概念是有缺陷的。这个问题的主要目的是如何将大型依赖项压缩到Lambdas大小约束上。最近,AWS发布了对Lambda函数的EFS支持,这意味着您可以直接将卷装载到Lambda函数上。这意味着几乎无限的存储空间,并且不需要拉链,这意味着冷启动要少得多。此外,其中一个文件系统可以装载到多个Lambda函数
我不会详细讨论,还有很多事情要做,但是如果您想在Lambda上获得大型依赖树,我建议您:
provider:
name: aws
runtime: python3.6
plugins:
- serverless-python-requierments
custom:
pythonRequierments:
dockerizePip: true
slim: true
zip: true
functions:
...
xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
package:
exclude:
-node_modules/**
-'**/*.dist-info/**'
- 创建专有网络
- 创建一个ec2实例
- 创建EFS卷并将其装载到ec2实例
- 通过`pip install-r requirements.txt-t/mnt/../efs/path将依赖项安装到efs实例
- 将该EFS实例装载到serverless.yml中的lambda
- 通过将EFS卷上的模块附加到path,将其添加到lambda函数中