2011-06-29 12 views
10

Gdy próbuję usunąć wiadro użyciu linijki:Jak usunąć wersję s3 z wiadra użyciu boto i pytona

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 

print conn.delete_Bucket('BucketNameHere').message 

Mówi mi wiadro próbowałem usunąć nie jest pusta.

Wiadro nie zawiera żadnych kluczy. Ale ma wersje.

Jak mogę usunąć wersje?

widzę listę wersji korzystając bucket.list_versions()

Java ma metodę deleteVersion na jego połączenia S3. Znalazłem ten kod tutaj:

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

Czyni to linia, aby usunąć wersję:

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

Czy jest coś porównywalnego w boto?

Odpowiedz

20

Boto obsługuje wersjonowane segmenty po wersji 1.9c. Oto, jak to działa:

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

Dzięki! To się udało. – ChickenFur

+0

Właśnie uratowałem mi stertę kłopotów. Prowadził mnie do szaleństwa! – Sirex

+1

Powinieneś używać delete_keys, a nie delete_key. to super duper szybciej. Zobacz to dla równoważnego rozwiązania, ale używając delete_keys: http://stackoverflow.com/questions/29809105/how-do-i-delete-a-versioned-bucket-in-aws-s3-using-the-cli – grayaii

Powiązane problemy