簡體   English   中英

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

[英]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.

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