使用boto3清空s3存储桶的最快方法是什么?

时间:2017-04-10 14:55:57

标签: python python-2.7 boto3

我正在考虑删除然后重新创建存储桶(我后来意识到的错误选项)。

然后如何删除存储桶中的所有对象?

我试过这个:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.delete_objects

但是它删除了多个对象并不是全部。

你能建议什么是空桶的最佳方法吗?

4 个答案:

答案 0 :(得分:21)

只需使用aws cli

aws s3 rm s3://mybucket --recursive

好吧,如果你坚持使用boto3,可以获得更长的答案。这将向s3发送删除标记。无需文件夹处理。 bucket.Object.all将创建一个不限制为1K的迭代器。

import boto3    
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
# suggested by Jordon Philips 
bucket.objects.all().delete()

答案 1 :(得分:0)

如果启用了版本控制,则可以通过另一个调用类似的方式删除所有对象版本:

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
bucket.object_versions.delete()

答案 2 :(得分:0)

根据之前的响应,并添加启用版本控制的检查,您可以清空存储桶,启用或不启用版本:

s3 = boto3.resource('s3')
s3_bucket = s3.Bucket(bucket_name)
bucket_versioning = s3.BucketVersioning(bucket_name)
if bucket_versioning.status == 'Enabled':
    s3_bucket.object_versions.delete()
else:
    s3_bucket.objects.all().delete()

答案 3 :(得分:-2)

这将确保成功删除存储桶对象,版本以及存储桶 还是有更好的方法?

import boto3
s3_client = boto3.client( 's3', region_name=AWS_REGION )
s3_resource = boto3.resource( 's3', region_name=AWS_REGION )

for bucket_name in del_list:
    bucket = s3_resource.Bucket( bucket_name )
    try:
        print( "deleting", bucket_name, "..." )
        resp1 = bucket.object_versions.delete()
        resp2 = s3_client.delete_bucket( Bucket=bucket_name )
        if resp1:
            msg = f"Versions deleted for bucket: {bucket_name} \n Response:{resp1}"
            logging.info( msg )
        msg = f"{bucket_name} Successfully deleted: {resp2}"
        logging.info( msg )
        print( msg )
    except Exception as e:
        msg = f"Exception raised for bucket: {bucket} \nException details: \n{e}"
        logging.error( msg )