如何将大型Python依赖性存储在S3上(对于无服务器的AWS lambda)



我正在使用AWS lambda托管一个Python项目,使用无服务器框架管理部署,并遇到了常见的50MB软件包存储限制。到目前为止,我使用无服务器python的每个功能成功地分配了我的需求我的serverless.yml文件,如下所示。

这将前三个功能软件包保持在50MB以下,并创建了一个简单的工作流程,我可以简单地使用:sls deploy --pi-dockerizedPip来推动更改。但是,第四个软件包只有SciPy的要求,无法将其降低到52MB以下,并且在阅读了很多阅读之后,我看到的唯一常见方法是将我的依赖(IES?)上传到S3(某处),并且以某种方式确保我的导入语句是能够找到依赖项。

我还没有找到有关应如何完成包装依赖性过程的明确说明,并且(几乎同样重要),如何与无服务器一起工作(我可以保持不错的工作流程)?

serverless.yml的密钥部分:

package:
  individually: True
  exclude:
    # Exclude everything first.
    - '**/*'
functions:
  brain:
    handler: src/1-brain/wrap.handler
    package:
      include:
        - src/1-brain/**
    events:
      - schedule: rate(5 minutes)
  data:
    handler: src/2-data/wrap.handler
    package:
      include:
        - src/2-data/**
  strategy:
      handler: src/3-strategy/wrap.handler
      package:
        include:
          - src/3-strategy/**
  balancer:
      handler: src/4-portfolio-balancer/wrap.handler
      package:
        include:
          - src/4-portfolio-balancer/**  
custom:
  pythonRequirements:
    useDownloadCache: true
    useStaticCache: true
    dockerizePip: true
    zip: true
    slim: true
  pyIndividually:
    wrap:brain: src/1-brain/aws_handler.handler     # mapping to the real handler
    wrap:data: src/2-data/datafeed.handler          # mapping to the real handler
    wrap:strategy: src/3-strategy/strategy.handler  # mapping to the real handler
    wrap:balancer: src/4-portfolio-balancer/balancer.handler  # mapping to the real handler

aws lambda层使您可以将软件包/环境捆绑成一层。您最多可以使用5层,并且在所有特定lambda功能的所有层 lambda代码的累积总和中具有250 MB的未压缩极限。

查看"包括一层中的库依赖项"部分https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

最新更新