AWS S3에서 제거하고자하는 12 개의 버킷이 있습니다. 모두 비슷한 이름을 가지며 bucket-to-remove
및 일부 객체가 포함되어 있습니다.한 번에 여러 S3 버킷을 제거하는 방법?
UI를 사용하는 것이 매우 느리므로 CLI를 사용하여 이러한 모든 버킷을 빠르게 제거 할 수있는 솔루션이 있습니까?
AWS S3에서 제거하고자하는 12 개의 버킷이 있습니다. 모두 비슷한 이름을 가지며 bucket-to-remove
및 일부 객체가 포함되어 있습니다.한 번에 여러 S3 버킷을 제거하는 방법?
UI를 사용하는 것이 매우 느리므로 CLI를 사용하여 이러한 모든 버킷을 빠르게 제거 할 수있는 솔루션이 있습니까?
boto3을 사용하면 객체가있는 버킷을 삭제할 수 없으므로 먼저 버킷을 삭제하기 전에 객체를 제거해야합니다. 에 따르면
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)
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
명령은 버킷 내부의 모든 개체를 반복적으로 삭제하기 때문에 실행하는 데 약간의 시간이 걸립니다.
한 번에 모두 삭제하려면이 샘플 라인을 사용해보십시오. 이것은 매우 파괴적이라는 것을 기억하십시오. 당신이하고있는 것을 당신이 알고 있기를 바랍니다.
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)을 읽어 보시기 바랍니다. 버킷 자체를 삭제하기 전에 버킷의 모든 객체 (모든 객체 버전 및 삭제 표시 자 포함)를 삭제해야한다는 점은 분명합니다. –