概要
botocore だけ使って削除する場合はループさせる方法しかなさそうです
boto3 が使える場合は bucket.object_versions.delete()
が使えるようです
環境
- macOS 11.6.6
- Python 3.10.2
- botocore 1.24.11
サンプルコード
from botocore import session
import sys
class TestClient():
def __init__(self):
self.client = session.get_session().create_client(
's3',
region_name='us-east-1',
endpoint_url='https://s3.compatible.api',
aws_access_key_id='xxx',
aws_secret_access_key='xxx',
)
def delete_object(self, bucket, key):
return self.client.delete_object(
Bucket=bucket,
Key=key,
)
def delete_all_objects(self, bucket):
objs = self.list_objects(bucket)
for obj in objs['Contents']:
response = self.delete_object(bucket, obj["Key"])
return response
def list_objects(self, bucket):
result = self.client.list_objects(
Bucket=bucket
)
return result
if __name__ == '__main__':
cli = TestClient()
print(cli.delete_all_objects(sys.argv[1]))
注意事項
list_objects が最大 1000 オブジェクトまでしか取得できないのでそれ以上の場合はページングなどの考慮が必要になります
0 件のコメント:
コメントを投稿