尽管使用依赖层 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 会更新他们的文档。