2011-06-29 25 views
10

Khi tôi cố gắng xóa một cái xô bằng cách sử dụng dòng:Làm thế nào để xóa một phiên bản s3 từ một xô sử dụng boto và trăn

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 

print conn.delete_Bucket('BucketNameHere').message 

Nó nói với tôi xô tôi đã cố gắng để xóa là không có sản phẩm nào.

Xô không có khóa nào trong đó. Nhưng nó có phiên bản.

Làm cách nào để xóa các phiên bản?

tôi có thể xem danh sách các phiên bản sử dụng bucket.list_versions()

Java có một phương pháp deleteVersion trên kết nối s3 của nó. Tôi thấy rằng mã ở đây:

http://bytecoded.blogspot.com/2011/01/recursive-delete-utility-for-version.html

Anh ấy dòng này để xóa các phiên bản:

s3.deleteVersion(new DeleteVersionRequest(bucketName, keyName, versionId)); 

Có bất cứ điều gì có thể so sánh trong boto?

Trả lời

20

Boto hỗ trợ các phiên bản nhóm sau phiên bản 1.9c. Dưới đây là cách hoạt động:

import boto 

s3 = boto.connect_s3() 

#Create a versioned bucket 
bucket = s3.create_bucket("versioned.example.com") 
bucket.configure_versioning(True) 

#Create a new key and make a few versions 
key = bucket.new_key("versioned_object") 
key.set_contents_from_string("Version 1") 
key.set_contents_from_string("Version 2") 

#Try to delete bucket 
bucket.delete() ## FAILS with 409 Conflict 

#Delete our key then try to delete our bucket again 
bucket.delete_key("versioned_object") 
bucket.delete() ## STILL FAILS with 409 Conflict 

#Let's see what's in there 
list(bucket.list()) ## Returns empty list [] 

#What's in there including versions? 
list(bucket.list_versions()) ## Returns list of keys and delete markers 

#This time delete all versions including delete markers 
for version in bucket.list_versions(): 
    #NOTE we're still using bucket.delete, we're just adding the version_id parameter 
    bucket.delete_key(version.name, version_id = version.version_id) 

#Now what's in there 
list(bucket.list_versions()) ## Returns empty list [] 

#Ok, now delete the bucket 
bucket.delete() ## SUCCESS!! 
+0

Cảm ơn! Điều đó hiệu quả. – ChickenFur

+0

Chỉ cần lưu cho tôi một đống rắc rối. Đã khiến tôi phát điên! – Sirex

+1

Bạn nên sử dụng delete_keys, chứ không phải delete_key. nó siêu nhanh hơn. Xem phần này cho giải pháp tương đương, nhưng sử dụng delete_keys: http://stackoverflow.com/questions/29809105/how-do-i-delete-a-versioned-bucket-in-aws-s3-using-the-cli – grayaii

Các vấn đề liên quan