36 lines
1 KiB
Python
36 lines
1 KiB
Python
|
#!/usr/bin/python3
|
||
|
#
|
||
|
# An S3 bucket can only be deleted if it is empty, so all
|
||
|
# objects must be deleted. For a versioned bucket, this includes
|
||
|
# object versions and object deletion markers.
|
||
|
#
|
||
|
|
||
|
import argparse
|
||
|
import boto3
|
||
|
import click
|
||
|
|
||
|
|
||
|
def delete_s3_bucket(bucket_name, dry_run=True):
|
||
|
s3 = boto3.resource('s3')
|
||
|
bucket = s3.Bucket(bucket_name)
|
||
|
if not bucket.creation_date:
|
||
|
print(f"Bucket {bucket_name} not found")
|
||
|
return
|
||
|
n = 0
|
||
|
for o in bucket.objects.all():
|
||
|
n = n+1
|
||
|
print(f"Delete {o.key}")
|
||
|
if click.confirm(f"Delete {n} objects from {bucket_name}?"):
|
||
|
bucket.objects.all().delete()
|
||
|
bucket.object_versions.all().delete()
|
||
|
bucket.delete()
|
||
|
print(f"Deleted bucket {bucket_name}")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
parser = argparse.ArgumentParser(description="Delete S3 bucket and its contents")
|
||
|
parser.add_argument("bucket", help="Name of the bucket to delete", nargs=1)
|
||
|
args = parser.parse_args()
|
||
|
for bucket in args.bucket:
|
||
|
delete_s3_bucket(bucket)
|