この記事について
あるS3バケットがありました。このバケット上で、同一ファイル名のオブジェクトの削除/作成/上書きを繰り返しています。
このバケットのバージョニングを有効化にしてしまいました。
バージョニングの有効化に気づくのに遅れて、数日経ってから見てみると、非現行バージョンがとんでもない数になっていました。
一つ一つ削除していたら1日が終わってしまうレベルです。。
マネージメントコンソールからバケットを空にすれば現行バージョンのオブジェクトも削除されてしまいます。そのため一括で非現行バージョンを削除することが難しそうです。
S3のライフサイクル機能を利用して、非現行バージョンのみを一日待てば削除することはできますが、すぐには削除することができません。
そんな時にS3バケット高速削除・空にするツール「cls3」を利用すれば、非現行バージョンを一撃で削除することができます。
この記事にはcls3の紹介および、cls3を利用して非現行バージョンのオブジェクトを削除する方法について記載します。
ある日X(Twitterにて)
困り果てたエンジニアもどきがいました。
そんな時に救世主が
どうやらいい感じのツールがあるらしい!
そしてさらに、ツール作者の方までご降臨される超展開が!
これがあるからX(Twitter)はやめられません。。。
@web_seさん、@365_step_techさん、ありがとうございますm(_ _)m
こんなことになったからには実際に利用するしかないので、早速使ってみます!
S3バケット高速削除・空にするツール「cls3」
オブジェクトの非現行バージョンのみの一括削除は行うことができません。(2024年2月現在)
ライフサイクル機能を利用しても一日待つ必要があり、即座の削除は不可能です。
そんな問題を解決するのがcls3です。
cls3はGo言語で実装されたツールで、バージョンを楽に/高速に削除して、S3バケットを削除できるようにします。
cls3は複数バケットを対象にとることができ、さらにリージョンを跨いだ複数のバケットを対象にすることも可能です。
また実行時にプログレスバーが表示されるため、削除対象が大量にあるケースでも、削除がどのくらいで終わるか把握することが可能です。
実際に使ってみる
まずはインストールします。
> brew install go-to-k/tap/cls3
これだけで使える用意はできました。
今回はテスト用のバケットを用意して、非現行オブジェクトをいくつか作成しました。
test.txtの現行バージョンがあり、非現行バージョンが15個あります。
この非現行バージョンを削除するために、以下のコマンドを実行します。
> cls3 -b test-matsuda-20240216 -o INF test-matsuda-20240216 Checking... INF test-matsuda-20240216 Clearing... 100% |██████████████████████████████████████████████████| (15/15) INF test-matsuda-20240216 Cleared!!: 15 objects.
これだけです!なんて簡単。。。
確認してみると、見事に非現行バージョンのみ削除されていました。
注意点
oオプションをつけないと、現行バージョン含む全てのバージョンが削除されてしまいます。
そのため、非現行バージョンのみを削除したい場合は、必ずoオプションをつけましょう。
–oldVersionsOnly, -o Delete old version objects only (including all delete-markers) (default: false)
最後に
Xでつぶやいたところ、思わぬ救世主が現れて課題解決に至りました。
同じように大量の非現行バージョンに苦しんでいる方がいれば、ぜひcls3を利用してみてください!
そして利用したらGitHubにスターをつけましょう!
以上です!