如何使用boto获取所有版本的S3密钥并取消删除?

时间:2015-01-30 19:32:29

标签: amazon-s3 versioning boto undelete

我有一个S3存储桶已经有一段时间但现在才开始版本控制。尝试使用它来尝试找出我在版本控制时获得的检测保护类型,而不激活“MFA删除”选项。

我上传了一个测试文件,然后将其删除,然后重新上传两次。现在,使用the S3 browser tool 我看到该文件的4个版本:#1,#2(删除),#3和#4(当前)。如果我使用boto获取最新版本,我可以提取其version_id

import boto
c=boto.connect_s3()
b=c.get_bucket('my-bucket')
k = b.get_key('test2/dw.txt')
print k.version_id

但是如何获得给定密钥的version_id的完整列表?如果我想要检索密钥的版本#1(已删除),我是否需要先使用版本#2 id来“取消删除”它?

最后,此删除保护(创建删除标记)是否与打开版本控制之前上载的旧文件一起使用?

THX

2 个答案:

答案 0 :(得分:5)

您可以使用存储桶对象的list_versions方法获取所有可用版本的列表。

import boto
c = boto.connect_s3()
bucket = c.get_bucket('my-bucket')
for version in bucket.list_versions():
    print(version)

这将返回一个Key个对象列表,这些对象具有与之关联的特定version_ids。您可以检索任何版本,但使用Key对象上的常规方法。如果您想将旧版本作为当前版本,则必须重新上传或将其复制到服务器上。

在存储桶上启用版本控制后,该存储桶中任何对象之后的所有删除操作都将导致删除标记写入存储桶而不是实际删除该对象。

答案 1 :(得分:2)

您可以使用以下方法获取所有版本的列表

session = boto3.Session(aws_access_key_id, aws_secret_access_key)

s3 = session.client('s3')

bucket_name = 'bucketname'

versions = s3.list_object_versions (Bucket = bucket_name, Prefix = 'Key')

print(versions.get('Versions'))

这将打印该存储桶中存在的所有版本的列表以及密钥,存储类,大小等其他信息