2017-03-14 87 views
1

我有一打我想在AWS S3中删除的桶,所有桶都有一个类似的名称,其中包含bucket-to-remove以及其中的一些对象。如何一次删除多个S3存储桶?

使用用户界面非常慢,是否有解决方案可以使用CLI快速删除所有这些存储桶?

回答

1

使用boto3您不能删除其中有对象的存储桶,因此您首先需要在删除存储桶之前删除这些对象。最简单的解决方案是一个简单的Python脚本,例如:

import boto3 
import botocore 
import json 

s3_client = boto3.client(
    "s3", 
    aws_access_key_id="<your key id>", 
    aws_secret_access_key="<your secret access key>" 
) 

response = s3_client.list_buckets() 
for bucket in response["Buckets"]: 
    # Only removes the buckets with the name you want. 
    if "bucket-to-remove" in bucket["Name"]: 
     s3_objects = s3_client.list_objects_v2(Bucket=bucket["Name"]) 
     # Deletes the objects in the bucket before deleting the bucket. 
     if "Contents" in s3_objects: 
      for s3_obj in s3_objects["Contents"]: 
       rm_obj = s3_client.delete_object(
        Bucket=bucket["Name"], Key=s3_obj["Key"]) 
       print(rm_obj) 
     rm_bucket = s3_client.delete_bucket(Bucket=bucket["Name"]) 
     print(rm_bucket) 
+0

你只是回答你自己的问题错误。您不需要删除对象以删除存储桶!您只需在S3中创建不需要的I/O。 – mootmoot

+0

boto3不是AWS CLI! – mootmoot

+1

我建议你在传播谎言之前先阅读[doc](http://botocore.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.delete_bucket)。清楚地表明,必须删除存储区中的所有对象(包括所有对象版本和删除标记),然后才能删除存储区本身。 –

0

按照S3 docs你可以只使用如果桶不具有版本控制启用CLI命令aws s3 rb删除桶。如果是这样的话,你可以写一个简单的bash脚本来获取桶的名称和一个删除一个,如:

#!/bin/bash 

# get buckets list => returns the timestamp + bucket name separated by lines 
S3LS="$(aws s3 ls | grep 'bucket-name-pattern')" 

# split the lines into an array. @see https://stackoverflow.com/a/13196466/6569593 
oldIFS="$IFS" 
IFS=' 
' 
IFS=${IFS:0:1} 
lines=($S3LS) 
IFS="$oldIFS" 

for line in "${lines[@]}" 
    do 
     BUCKET_NAME=${line:20:${#line}} # remove timestamp 
     aws s3 rb "s3://${BUCKET_NAME}" --force 
done 

小心不要删除重要的桶!我建议在实际删除它们之前输出每个存储桶的名称。另请注意,aws s3 rb命令需要一段时间才能运行,因为它会递归删除存储桶中的所有对象。

0

你可以尝试这个示例行来一次删除所有。请记住,这是高度破坏性的,所以我希望你知道你在做什么:

for bucket in $(aws s3 ls | awk '{print $3}' | grep my-bucket-pattern); do aws s3 rb "s3://${bucket}" --force ; done 

你完成了。可能需要一段时间,取决于桶的数量和内容。