python-3.x - 如何在不使用临时目录的情况下编辑存储在 S3 中的 xml 文件?
问题描述
我在 S3 存储桶中有一个配置文件,需要通过添加来自 ec2.describe_subnets 的响应并发送到 api 端点来修改它。有没有办法使用 Lambda 自动执行此过程以从 S3 获取文件,而无需将其保存到临时目录?
解决方案
有没有办法使用 Lambda 自动执行此过程以从 S3 获取文件,而无需将其保存到临时目录?
如果您询问修改 S3 Object 的内容,那么答案是否定的,这是不可能的,因为 S3 不支持这种操作。您唯一能做的就是覆盖整个对象(即,不仅仅是它的一部分)。
如果您询问是否使用新内容覆盖 S3 对象,那么是的,例如,如果您在内存中执行此操作,则可以“不必将其保存到临时目录”。
从 S3 下载对象而不将其写入存储,在内存中进行更改,然后将其重新上传到 S3。如果文件太大而无法完全存储在内存中,您也可以以流式方式进行(即,启动下载,对于您下载的每个块进行必要的更改,并通过分段上传上传修改后的块,清理内存,重复等)。
最后一点,请记住 S3 仅支持更新的最终一致性。这意味着在您更新对象后,后续读取可能仍会下载以前的版本。如果使用该文件的任何内容都无法正确处理,您可能需要一种不同的方法(即,不要覆盖,而是使用新密钥编写一个新对象,并将该新密钥发送给消费者;或者只使用支持强一致性的存储系统,例如 DynamoDB)。
推荐阅读
- entity-framework-core - CI EntityFramework Core 缺少迁移检查
- c++ - 如何从基类转换为“this”类型到派生类
- c++11 - 将 wav 文件中的数据存储到数组中
- google-apps-script - 如何在 Google 表格中添加新标签、隐藏标签、更改公式并自动重命名?
- swift - 如何在 ARKit 中将 3d 对象放在另一个之上?(场景套件)
- android - Android Studio 的菜单栏不可读
- sql - 我在运行查询时遇到以下错误
- regex - 使用扫描方法 + 正则表达式将字符串分解为单词,如果单词有 `'` 字符,则删除该字符及其后面的所有内容
- scala - 从 catch 块记录错误到 cosmos db - spark
- flutter - 从 Hive 列表创建一组 DropdowMenuItems (Flutter & Dart)