我有几个使用 AWS lambda 运行的不同 python API(即 python 脚本)。标准方法是生成一个包含 lambda
函数所需的所有外部库的 zip 文件,然后将其上传到 AWS。现在,我有一些不同 API 之间共有的函数(例如自定义实用程序函数,例如解析文本文件或日期)。目前,我只是在每个 zip 文件中复制文件 utils.py
。但是,这种方法效率很低(我不喜欢重复代码)。我想要一个 S3
存储桶,其中包含我所有的 .py
共享文件,并让我的 API 直接加载这些文件。这可能吗?
一种简单的方法是将文件下载到 tmp
文件夹并加载它们,但我不确定这是最好/最快的方法:
import boto3
client_s3 = boto3.client("s3")
client_s3.download_file("mybucket", "utils.py", "/tmp/utils.py")
这可以用更优雅的方式完成吗?
最佳答案
这其实不是一个简单的问题。我们一直在使用 lambda layers有一段时间,它旨在解决该问题,因此您可以共享通用代码。 lambda 层的问题在于,当您更改层内的某些内容(层 + 您的 lambda 函数)时,您必须重新部署两次。这很快就会成为颈部疼痛,并且就 CICD 而言,您可能也有问题。
我们尝试了一段时间,现在我们回到打包代码并将代码包含在 lambda 中。如果你想避免代码重复,效率不高,但至少你没有与你忘记部署依赖函数的事实相关的所有错误。
关于python - AWS 上多个 API 之间的共享 Python 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730389/