2022年6月17日金曜日

botocore でバケット配下のオブジェクトをすべて削除する方法

botocore でバケット配下のオブジェクトをすべて削除する方法

概要

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 件のコメント:

コメントを投稿