【问题标题】:Shared python libraries between multiple APIs on AWS在 AWS 上的多个 API 之间共享 python 库
【发布时间】:2018-04-09 10:06:06
【问题描述】:

我有几个使用 AWS lambda 运行的不同 python API(即 python 脚本)。标准方法是生成一个 zip 文件,其中包含 lambda 函数所需的所有外部库,然后将其上传到 AWS。现在,我有一些不同 API 之间共有的函数(例如,自定义 utils 函数,如解析文本文件或日期)。目前,我正在简化在每个 zip 文件中复制文件 utils.py。但是,这种方法效率很低(我不喜欢重复代码)。我想要一个包含我所有.py 共享文件的S3 存储桶,并让我的API 直接加载这些文件。这可能吗? 一种简单的方法是将文件下载到tmp 文件夹并加载它们,但我不确定这是最好/最快的方法:

import boto3
client_s3 = boto3.client("s3")
client_s3.download_file("mybucket", "utils.py", "/tmp/utils.py")

这可以用更优雅的方式完成吗?

【问题讨论】:

  • 您能否将所有 lambda 处理程序和依赖项放在一个 zip 中,并在所有函数中使用该 zip 文件?
  • 这行不通,因为不同的 API 需要不同的外部 python 包,如果放在一起将超过 250MB(AWS 的最大大小限制)

标签: python amazon-web-services amazon-s3 shared-libraries boto


【解决方案1】:

这实际上不是一个简单的问题要解决。我们使用lambda layers 已经有一段时间了,它旨在解决该问题,因此您可以共享通用代码。 lambda 层的问题在于,当您更改层内的某些内容(层+您的 lambda 函数)时,您必须重新部署两次。这很快就会导致颈部疼痛,而对于 CICD,您可能也会遇到问题。

我们尝试了一段时间,现在我们回到打包代码并将代码包含在 lambda 中。如果您想避免代码重复,则效率不高,但至少您没有与忘记部署依赖函数这一事实相关的所有错误。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多