かべぎわブログ

ブログです

オブジェクトをすべて削除してからS3バケットを削除してくれるPythonをかきました

概要

かんたんにS3バケットを削除してくれるPythonをかきました。

バケットを削除するときはすべてのオブジェクトを削除してからじゃないと削除できなくてめんどくさいなーってかんじだったのでかいた。

スクリプト

これです。
github.com

import boto3, argparse

class s3():
    def __init__(self, bucket_name, profile='default'):
        self.session = boto3.Session(profile_name=profile)
        self.s3 = self.session.resource('s3')
        self.bucket = self.s3.Bucket(bucket_name)

    def delete_all_object(self):
        self.s3_objects = list(self.bucket.objects.all())
        for self.s3_object in self.s3_objects:
            self.s3_object.delete()

    def delete_all_object_versions(self):
        self.s3_object_versions = list(self.bucket.object_versions.all())
        for self.s3_object_version in self.s3_object_versions:
            self.s3_object_version.delete()

    def delete_bucket(self):
        self.bucket.delete()

    def delete(self):
        self.delete_all_object()
        self.delete_all_object_versions()
        self.delete_bucket()


def main():
    s3(bucket_name, profile).delete()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog=__file__)
    required = parser.add_argument_group('required arguments')
    optional = parser.add_argument_group('optional arguments')
    required.add_argument('--bucket',required=True, help='The name of the bucket name.')
    optional.add_argument('--profile',nargs='?',default='default',help='Use a specific profile from your credential file.')
    
    args = parser.parse_args()
    bucket_name = args.bucket
    profile = args.profile

    main()

こんなかんじでつかう

$ python delete_bucket.py --bucket mybucket

おわりに

間違ったバケットを消さないよう注意

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本