python - AWS 上多个 API 之间的共享 Python 库

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

我有几个使用 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/

相关文章:

python - 将 MySQL 表数据转储到 csv 并转换字符编码的最佳方法是什么?

python - 如何将带有逗号分隔项的字符串转换为 Python 中的列表?

mysql - 在 Aurora AWS 无服务器 MySQL 上启用 SSL

javascript - Cognito 托管用户界面

node.js - lambda 中的 s3.getObject 不返回任何内容

python - 当 pip 设置为需要 virtualenv 时,如何允许 pip 进入 anaconda3 venv?

python - PandaSQLException : (sqlite3. 操作错误)没有这样的列 pandasql 错误

amazon-web-services - 在 amazon 为什么我不能从公共(public) ip 地址查看我的 tomcat?

amazon-web-services - AWS API 网关 + DynamoDB 角色 ARN 错误

amazon-s3 - 对从 Amazon S3 提供的 html 页面使用 GZIP