AWS S3で削除したいバケツがたくさんあります。すべて同じ名前のbucket-to-remove
といくつかのオブジェクトが含まれています。複数のS3バケットを一度に削除するにはどうすればよいですか?
UIを使用するのは非常に遅いですが、CLIを使用してこれらのバケットをすばやく削除するソリューションはありますか?
AWS S3で削除したいバケツがたくさんあります。すべて同じ名前のbucket-to-remove
といくつかのオブジェクトが含まれています。複数のS3バケットを一度に削除するにはどうすればよいですか?
UIを使用するのは非常に遅いですが、CLIを使用してこれらのバケットをすばやく削除するソリューションはありますか?
boto3を使用すると、オブジェクトが含まれているバケットを削除することはできません。まず、バケットを削除する前にオブジェクトを削除する必要があります。あなたはバケットが有効になってバージョニングていない場合にのみ、CLIコマンドaws s3 rb
を使用してバケットを削除することができS3 docsによると
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)
:最も簡単な解決策は、以下のような簡単なPythonスクリプトです。その場合は、あなたはバケツ名を取得し、それらを一つずつ削除するには、簡単な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
コマンドは、バケット内のすべてのオブジェクトを再帰的に削除するため、実行に時間がかかることにも注意してください。
すべてを一度に削除するには、このサンプル行を試してください。これは非常に破壊的であることを忘れないでください、私はあなたが何をしているか知っている願っています:
for bucket in $(aws s3 ls | awk '{print $3}' | grep my-bucket-pattern); do aws s3 rb "s3://${bucket}" --force ; done
あなたはそれで行われます。バケツの量と内容に応じてしばらく時間がかかることがあります。
あなた自身の質問に間違いなく答えるだけです。バケツを削除するためにオブジェクトを削除する必要はありません! S3で不要なI/Oを作成するだけです。 – mootmoot
boto3はAWS CLIではありません! – mootmoot
あなたのコメントに嘘を広げる前に[doc](http://botocore.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.delete_bucket)を読むことをお勧めします。バケット内のすべてのオブジェクト(すべてのオブジェクトバージョンと削除マーカーを含む)は、バケット自体を削除する前に削除する必要があります。 –