在 Amazon S3 上批量恢复先前版本

问题描述 投票:0回答:2

所以。我是个白痴。周五,我以编程方式覆盖了存储桶中的大约 14,000 个文件,直到今天才意识到。幸运的是,这些文件是有版本的。不幸的是,我找不到一个很好的清晰示例来说明如何编写脚本来浏览文件,然后恢复第二个最新版本。我一直在浏览 Boto 文档,并且了解如何删除版本,但不能恢复。如果有人能给我一些显示如何恢复特定版本的代码,我可以轻松使用 php 或 python。

php python amazon-web-services amazon-s3 boto
2个回答
5
投票

这是需要您小心的事情。我不想尝试为您提供完整的解决方案,因为我没有时间彻底测试它,也不想做出任何承诺。

但是,也许这会有所帮助。

首先,我们假设我们想要查找 boto 中特定存储桶中特定密钥的所有版本。我们可以这样做:

import boto

conn = boto.connect_s3()
bucket_name = 'mybucket'
key_name = 'mykey'

bucket = conn.lookup(bucket_name)
for k in bucket.list_versions(key_name):
    print(k.name, k.version_id, k.last_modified)

这应该打印出类似这样的内容:

mykey TyvPH4UUD4zRnGhmmLH6HGHOcOnsJgQG 2013-03-03T19:10:39.000Z
mykey IxNYlmoyDsOSspR6SwuGVNM7Nr83ZTSI 2013-03-03T15:11:06.000Z
mykey XVI9_yxQYU6B2KXQv0VLj7luYOGwWCoh 2013-03-03T15:10:55.000Z
mykey qh0zjxWjRC8WvXQc_RmvVdCJ.S3gF2ui 2013-03-03T15:07:46.000Z

假设我们要“恢复”最旧的文件。为此,我们实际上将对象的所需版本复制回其自身。在 boto 中,看起来像这样:

bucket.copy_key(new_key_name=key_name, src_bucket_name=bucket_name, src_key_name=key_name, src_version_id='qh0zjxWjRC8WvXQc_RmvVdCJ.S3gF2ui')

这会将指定版本的密钥复制回同一存储桶中的自身。

我认为在释放脚本之前,您必须对此进行一些探索并进行大量测试。例如,您可以尝试将所需版本的对象复制到另一个存储桶中,并在复制到所需存储桶之前查看是否获得所需的内容。

希望这有帮助。


0
投票

S3 时间点恢复 是 Amazon S3 的时间点恢复工具。

https://github.com/angeloc/s3-pit-restore

© www.soinside.com 2019 - 2024. All rights reserved.