簡體   English   中英

如何使用 boto 和 python 從存儲桶中刪除 s3 版本

[英]How to delete a s3 version from a bucket using boto and python

當我嘗試使用以下行刪除存儲桶時:

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

print conn.delete_Bucket('BucketNameHere').message

它告訴我我試圖刪除的存儲桶不是空的。

存儲桶中沒有鍵。 但它確實有版本。

如何刪除版本?

我可以使用 bucket.list_versions() 查看版本列表

Java 在其 s3 連接上有一個 deleteVersion 方法。 我在這里找到了該代碼:

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

他這樣做是為了刪除版本:

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

博托有什么可比的嗎?

Boto 在 1.9c 版本之后支持版本化存儲桶。 以下是它的工作原理:

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!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM