为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2021-11-09 16:19:34
我正在使用 AWS Lambda 来托管 Python 项目,使用无服务器框架管理部署,并且遇到了常见的 50MB 包存储限制。到目前为止,我已经使用 serverless-python-individually 和 serverless-python-requirements 插件成功地将我的需求拆分为每个函数,以将每个文件作为单独的 Lambda 函数进行 dockerise、压缩和上传,如关键部分所示我的 serverless.yml 文件,如下所示。这使前三个函数包保持在 50MB 以下,并创建了一个简单的工作流程,我可以在其中简单地使用:sls deploy --pi-dockerizedPip. 然而,第四个包,只需要SciPy,不能减少到 52MB 以下,经过大量阅读后,我看到的唯一常见方法是将我的依赖项(即?)上传到 S3(某处)并以某种方式确保我的导入语句能够找到依赖项。我还没有找到关于应该如何完成打包依赖项的确切过程的明确说明,以及(几乎同样重要),如何与 Serverless 一起工作(这样我才能保持良好的工作流程)?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
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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

查看“在层中包含库依赖项”部分 https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信