尽管使用依赖层 Lambda 函数包仍然很大
Lambda function package still large despite using a layer for dependencies
我有一个 Python Lambda,自从我开始使用 AWS X-Ray 以来,包大小从 445KB 激增到 9.5MB。
为了解决这个问题并加快我的代码部署,我单独打包了我的需求并在我的模板中添加了一个层。 documentation 建议这种方法应该有效。
Packaging dependencies in a layer reduces the size of the deployment package that you upload when you modify your code.
pip install --target ../package/python -r requirements.txt
Resources:
...
ProxyFunction:
Type: AWS::Serverless::Function
Properties:
Architectures:
- x86_64
CodeUri: proxy/
Handler: app.lambda_handler
Layers:
- !Ref ProxyFunctionLibraries
Role: !GetAtt ProxyFunctionRole.Arn
Runtime: python3.8
Tracing: Active
ProxyFunctionLibraries:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: proxy-function-lib
Description: Dependencies for the ProxyFunction.
ContentUri: package/.
CompatibleRuntimes:
- python3.8
然而,这似乎并没有阻止Lambda 仍然在顶层打包所有东西,而且我每次部署包仍然是9.5MB。由于某种原因,新层的大小为 11MB,但只有在进行更改时才会部署。
如何减小 Lambda 函数包的大小?
实际上这里的解决方案很简单,虽然对 non-Lambda 专家来说不是显而易见的。
如问题中所述,第一步是构建包库。
pip install --target ../package/python -r requirements.txt
然而,当使用 sam build -u
构建 Lambda 时,使用了相同的 'requirements.txt' 文件,并且再次安装了所需的依赖项,这次是作为应用程序的一部分。
所以我所要做的就是删除我希望打包在一个单独层中的需求并重建。这确实意味着我必须保持 2x 'requirements.txt' 但这完全可以管理。
我已经打开了 issue,希望 AWS 会更新他们的文档。
我有一个 Python Lambda,自从我开始使用 AWS X-Ray 以来,包大小从 445KB 激增到 9.5MB。
为了解决这个问题并加快我的代码部署,我单独打包了我的需求并在我的模板中添加了一个层。 documentation 建议这种方法应该有效。
Packaging dependencies in a layer reduces the size of the deployment package that you upload when you modify your code.
pip install --target ../package/python -r requirements.txt
Resources:
...
ProxyFunction:
Type: AWS::Serverless::Function
Properties:
Architectures:
- x86_64
CodeUri: proxy/
Handler: app.lambda_handler
Layers:
- !Ref ProxyFunctionLibraries
Role: !GetAtt ProxyFunctionRole.Arn
Runtime: python3.8
Tracing: Active
ProxyFunctionLibraries:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: proxy-function-lib
Description: Dependencies for the ProxyFunction.
ContentUri: package/.
CompatibleRuntimes:
- python3.8
然而,这似乎并没有阻止Lambda 仍然在顶层打包所有东西,而且我每次部署包仍然是9.5MB。由于某种原因,新层的大小为 11MB,但只有在进行更改时才会部署。
如何减小 Lambda 函数包的大小?
实际上这里的解决方案很简单,虽然对 non-Lambda 专家来说不是显而易见的。
如问题中所述,第一步是构建包库。
pip install --target ../package/python -r requirements.txt
然而,当使用 sam build -u
构建 Lambda 时,使用了相同的 'requirements.txt' 文件,并且再次安装了所需的依赖项,这次是作为应用程序的一部分。
所以我所要做的就是删除我希望打包在一个单独层中的需求并重建。这确实意味着我必须保持 2x 'requirements.txt' 但这完全可以管理。
我已经打开了 issue,希望 AWS 会更新他们的文档。