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