[英]What is the fastest way to empty s3 bucket using boto3?
我正在考虑删除然后重新创建存储桶(我后来意识到的错误选项)。
那么如何删除bucket中的所有对象呢?
我试过这个: http : //boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.delete_objects
但它不是全部删除多个对象。
你能建议清空桶的最佳方法是什么吗?
只需使用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()
如果启用了版本控制,则会调用其他答案以删除所有对象版本:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
bucket.object_versions.delete()
根据之前的响应,并添加启用版本控制的检查,您可以清空存储桶,启用或不启用版本:
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()
这会确保成功删除存储桶对象、版本以及存储桶,还是有更好的方法?
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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.