はじめに
サービスで使用している画像ファイルが8億オブジェクト以上ある中で、
一部サービス終了に伴い画像ファイルを削除する必要が発生し
大量にあるので、マネージメントコンソールからオブジェクトの削除を実施しても
完了しない・タイムアウトになることから安全かつ確実に削除する方法を実施したものを
まとめてみました。
前提
1つバケットに対して、フォルダごとに機能別にオブジェクト(画像)を管理している。
やりたいこと
バケットの中のオブジェクトは現状サービスでも使われているものもあるので、
バックアップを取得して安全に削除を実施すること。
課題
大量のオブジェクトがあることから、マネージメントコンソールやawscliでは難しいこと。
解決策
大量のS3オブジェクトに対して一括でAPIを実行できるS3 batch Operatonsで、
削除するオブジェクトに対してタグを付け、念のためにバケット全体のバックアップで
オブジェクトのコピーを実施する。
(全体のバックアップはもしかしたら不要かもしれないが、削除するものだけバックアップをとる方がいい)
削除は上記でタグを付けたものに対して、ライフサイクルルールで削除を実施していくことで、
多少時間が掛かるが安全に削除を実施した。
やってみる
step1.S3バケットのインベントリーレポートを取得
対象のオブジェクト情報を取得する必要があるため、インベントリー情報から取得をおこないました。
出力される「manifest.json」ファイルに中にオブジェクトの実際の情報がcsvファイルで書かれています。
step2.削除するオブジェクトに対してタグ付けを実施
タグ付自体はもし処理中にオブジェクトがアップされた場合は削除されるのを
防ぐためのものになりますので、特に気にしない場合はスキップしても問題ないかと思います。
step3.バケット全体を別バケットにバックアップ(コピー)
step4.ライフサイクルルールでオブジェクトを削除
step5.バックアップ先のオブジェクトを削除
★★★近日アップデート
step4と基本は同じようにライフサイクルルールでの削除を実施
参考Link