首页 > 解决方案 > 如何在不使用临时目录的情况下编辑存储在 S3 中的 xml 文件?

问题描述

我在 S3 存储桶中有一个配置文件,需要通过添加来自 ec2.describe_subnets 的响应并发送到 api 端点来修改它。有没有办法使用 Lambda 自动执行此过程以从 S3 获取文件,而无需将其保存到临时目录?

标签: python-3.xamazon-web-servicesamazon-s3aws-lambda

解决方案


有没有办法使用 Lambda 自动执行此过程以从 S3 获取文件,而无需将其保存到临时目录?

如果您询问修改 S3 Object 的内容,那么答案是否定的,这是不可能的,因为 S3 不支持这种操作。您唯一能做的就是覆盖整个对象(即,不仅仅是它的一部分)。

如果您询问是否使用新内容覆盖 S3 对象,那么是的,例如,如果您在内存中执行此操作,则可以“不必将其保存到临时目录”。

从 S3 下载对象而不将其写入存储,在内存中进行更改,然后将其重新上传到 S3。如果文件太大而无法完全存储在内存中,您也可以以流式方式进行(即,启动下载,对于您下载的每个块进行必要的更改,并通过分段上传上传修改后的块,清理内存,重复等)。

最后一点,请记住 S3 仅支持更新的最终一致性。这意味着在您更新对象后,后续读取可能仍会下载以前的版本。如果使用该文件的任何内容都无法正确处理,您可能需要一种不同的方法(即,不要覆盖,而是使用新密钥编写一个新对象,并将该新密钥发送给消费者;或者只使用支持强一致性的存储系统,例如 DynamoDB)。


推荐阅读