在亚马逊S3上批量恢复先前版本

时间:2013-04-15 22:54:26

标签: php python amazon-web-services amazon-s3 boto

因此。我是个白痴。我星期五以编程方式覆盖了大约14,000个文件,直到今天才意识到这一点。幸运的是,文件是版本化的。不幸的是,我找不到一个很好的清晰示例,说明如何编写脚本来浏览文件,然后恢复第二个最新版本。我一直在浏览Boto文档,我看到了如何删除版本,但没有恢复。如果有人能给我一些显示如何恢复特定版本的代码,我很乐意使用php或python。

1 个答案:

答案 0 :(得分:4)

这需要您的注意。我不想尝试为您提供完整的解决方案,因为我没有时间对其进行彻底的测试,我也不想做出任何承诺。

然而,也许这会有所帮助。

首先,我们假设我们想要在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

假设我们要“恢复”最旧的文件。为此,我们实际上将所需的对象版本复制回自身。在博托,这将是这样的:

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

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

我认为你必须先探索一下,然后在松开脚本之前做很多测试。例如,您可以尝试将所需的对象版本复制到另一个存储桶中,看看在复制到所需存储桶之前是否得到了所需的数据。

希望这有帮助。