如何在 Amazon S3 存储桶中回滚到以前的版本?

Posted

技术标签:

【中文标题】如何在 Amazon S3 存储桶中回滚到以前的版本?【英文标题】:How to rollback to previous version in Amazon S3 bucket? 【发布时间】:2018-06-25 20:57:48 【问题描述】:

我通过以下方式上传文件夹/文件:

aws s3 cp files s3://my_bucket/
aws s3 cp folder s3://my_bucket/ --recursive

有没有办法返回/回滚到以前的版本?

像 git revert 或类似的东西?

更新: 这里是我上传了 4 次的测试文件。

如何获得以前的版本(使其成为“最新版本”)

例如,将其设为“2018 年 1 月 17 日 12:48:13”或“2018 年 1 月 17 日 12:24:30” 不是在 gui 中而是通过使用命令行成为“最新版本”?

【问题讨论】:

【参考方案1】:

没有。但是,为了防止将来出现这种情况,您可以在存储桶上启用版本控制,甚至配置存储桶以防止自动覆盖和删除。

要在您的存储桶上启用版本控制,请访问存储桶中的“属性”选项卡并将其打开。完成此操作后,存储桶中每个项目的副本或版本将包含版本元数据,您将能够检索已上传对象的旧版本。

启用版本控制后,您将无法将其关闭。

编辑(为您更新的问题更新我的答案):

您不能以这种方式对对象进行版本控制。您为每个对象提供了一个唯一的 Key,因此 S3 将其视为一个新对象。您将需要为每个对象 PUTS 使用相同的 Key 才能正确使用版本控制。使其工作的唯一方法是从存储桶中获取所有对象,并以编程方式在 Key 中查找最新日期。

编辑 2:

https://docs.aws.amazon.com/AmazonS3/latest/dev/RestoringPreviousVersions.html

要恢复以前的版本,您可以:

版本控制的价值主张之一是能够检索 对象的早期版本。这样做有两种方法:

将之前版本的对象复制到同一个桶中复制的 对象成为该对象和所有对象的当前版本 版本被保留。

永久删除当前版本的对象删除时 当前对象版本,实际上,您转了以前的版本 进入该对象的当前版本。

【讨论】:

您不能以这种方式进行操作。您为每个对象提供了一个唯一的 Key,因此 S3 将其视为一个新对象。您将需要为每个对象 PUTS 使用相同的 Key 才能正确使用版本控制。使其工作的唯一方法是获取存储桶中的所有对象并以编程方式在 Key 中查找最新日期。 感谢您的评论。 @NicholasMartinez 再看看这个问题。在存储桶上启用了版本控制,并且显示了带有键 1.txt 的对象的 4 个版本。 @Michael-sqlbot 是的,你是对的,我的错!屏幕截图是版本。我的坏人! @Michael-sqlbot 我相信我已经用正确的信息更新了我的答案。【参考方案2】:

这里是如何完成的:

如果你使用的是cli,

https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html

获取所需版本的对象。

然后对下载的对象执行一个put对象。

https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html

您的旧 S3 对象现在将是最新的对象。

AWS S3 对象是不可变的,您只能放置和删除。重命名是同一个对象的 GET 和 PUT,但名称不同。

希望对你有帮助。

【讨论】:

【参考方案3】:

S3 允许您为存储桶启用版本控制。如果您启用了版本控制,您应该能够找到以前的版本。如果没有,那你就不走运了。

更多信息请参见以下页面:https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

【讨论】:

【参考方案4】:

我无法得到这个问题的答案。我通过去 aws s3 控制台找到了自己,并想在这里分享。

So, the quickest way is to simply navigate to:
--AWS Console -> to s3 console -> the bucket -> the s3 object 
You will see the following:

At this point you can simpyl navigate to all your object
versions by clicking at the "Versions" and pick (download or move) 
whichever version of the object you are interested in

【讨论】:

以上是关于如何在 Amazon S3 存储桶中回滚到以前的版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环中回滚到下一次迭代?

如何在 googleplay 中回滚 apk 版本? [复制]

如何重命名 Amazon S3 存储桶中的文件? [复制]

Amazon S3 boto:如何重命名存储桶中的文件?

仅在 Asp.net 中回滚到特定迁移

如何(批量)删除Amazon S3存储桶中几百个文件的列表