如何一次删除多个S3存储桶?

Arm*_*let 2 amazon-s3

我想在AWS S3中删除十几个桶,它们都有一个类似的名称,其中包含bucket-to-remove一些对象.

使用UI非常慢,是否有使用CLI快速删除所有这些存储桶的解决方案?

Raj*_*Raj 14

批量删除 S3 存储桶的最简单方法就是根本不编写任何代码。我使用Cyber​​duck浏览我的 S3 帐户并轻松删除存储桶及其内容。

  • 这实际上是一个很好的解决方案,因为不涉及代码并且比 AWS 控制台 UI 更好 (2认同)

Aru*_*yal 11

我做了这个

aws s3api list-buckets \
   --query 'Buckets[?starts_with(Name, `bucket-pattern `) == `true`].[Name]' \
   --output text | xargs -I {} aws s3 rb s3://{} --force
Run Code Online (Sandbox Code Playgroud)

然后根据需要更新桶模式。

不过要小心,这是一个非常危险的操作。


小智 8

您可以尝试使用此示例行一次删除所有内容.请记住,这是非常具有破坏性的,所以我希望你知道你在做什么:

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

你完成了.可能需要一段时间,具体取决于存储桶的数量及其内容.

  • 提醒读者,您可能需要在“my-bucket-pattern”周围添加引号。 (2认同)

Arm*_*let 4

使用 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)
Run Code Online (Sandbox Code Playgroud)