はじめに
アカウント削除の前にMediastoreのファイルを全削除する必要があり
AWS MediaStore のファイルを全部消す方法 を見つけてためしたところ、 A/B/C/media みたいな階層をもった構造だと削除できませんでした。ということでスクリプト書いたので共有します。
スクリプト
msdelete.py
#!/usr/bin/env python3
import boto3
ms = boto3.client('mediastore')
msd = boto3.client('mediastore-data')
def in_folder(path):
print(path)
items = msd.list_items(Path=path)
for item in items['Items']:
if item['Type'] == 'FOLDER' :
in_folder(path+'/'+item['Name'] )
elif item['Type'] == 'OBJECT' :
print("delete object ", path+'/'+item['Name'])
msd.delete_object(Path=path+'/'+item['Name'])
else :
print("Unknown", item)
containers = ms.list_containers()
for container in containers['Containers']:
msd = boto3.client('mediastore-data',endpoint_url=container['Endpoint'])
in_folder('')
使いかた
以下環境変数を設定してください。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
またboto3をpip3でインストールしておいてください。
実行は
python3 msdelete.py
要改善点
- 全部のコンテナ消します。特定のコンテナ消す場合はコード変更してもらえれば。
- ページネーションに対応していないので、大量のファイルの場合は削除できないかもしれません。
- 再帰つかってますがあまりにフォルダ構成が深いと死ぬかもしれません。
知見
- 今回フォルダ消してないのですが、オブジェクトを消すとフォルダもきえました。S3とおなじような構成なのでしょうか。
- boto3.clientの引数としてendpoint_urlを指定するってところに気づくまでに2時間無駄にしました。少し賢くなった。