Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在S3上存储大型Python依赖项(适用于带无服务器的AWS Lambda)_Python_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

如何在S3上存储大型Python依赖项(适用于带无服务器的AWS Lambda)

如何在S3上存储大型Python依赖项(适用于带无服务器的AWS Lambda),python,amazon-web-services,amazon-s3,aws-lambda,Python,Amazon Web Services,Amazon S3,Aws Lambda,我正在使用AWS Lambda主持一个Python项目,使用无服务器框架管理部署,并且遇到了通常达到的50MB包存储限制。到目前为止,我已经成功地使用serverless python和serverless python requirements插件将我的需求分解为每个函数,将每个文件作为单独的Lambda函数进行dockrise、压缩和上载,如我的serverless.yml文件的关键部分所示,如下所示 这使前三个功能包的容量保持在50MB以下,并创建了一个简单的工作流,在这个工作流中,我可以

我正在使用AWS Lambda主持一个Python项目,使用无服务器框架管理部署,并且遇到了通常达到的50MB包存储限制。到目前为止,我已经成功地使用serverless python和serverless python requirements插件将我的需求分解为每个函数,将每个文件作为单独的Lambda函数进行dockrise、压缩和上载,如我的serverless.yml文件的关键部分所示,如下所示

这使前三个功能包的容量保持在50MB以下,并创建了一个简单的工作流,在这个工作流中,我可以简单地使用:
slsdeploy--pi dockerizedPip
。然而,第四个软件包(仅要求
SciPy
)不能降低到52MB以下,经过大量阅读,我看到的唯一常见方法是将依赖项上传到S3(某处),并以某种方式确保导入语句能够找到依赖项

我还没有找到关于打包依赖项的过程应该如何完成的明确说明,以及(几乎同样重要的是)如何与Serverless一起工作(这样我才能保持良好的工作流程)

serverless.yml的关键部分:


AWS Lambda层使您能够将包/环境捆绑到一个层中。对于任何特定的lambda函数,您最多可以使用5个层,并且在所有相应层的累积和+lambda代码之间有250 MB的未压缩限制

查看“在层中包含库依赖项”部分

谢谢-如何使用无服务器软件将此功能引入我的工作流程?我尝试在serverless.yml文件的pythonRequirements部分中使用layer:true,但这似乎没有改变部署中的任何内容(事实上,我怀疑我的pythonRequirements配置实际上没有被使用,因为pythonRequirements需要优先)。能做到吗?如果不是,我如何确保我的函数正确导入任何通过层手动上传的包?我不太熟悉Serverless framework,但我能够在文档中找到这些,用于设置Lambda层的配置yml文件。好,谢谢,;看起来像是最近的发展,但似乎是我需要的,因为Serverless可以容纳层。另见:
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