エンジニアブログ

S3に置いてある過去バージョンのオブジェクトを、ライフサイクルポリシーで一気に消す

2019.12.17

バージョニングを有効にしたけどうっかりライフサイクルポリシーを設定し忘れてどんどん過去バージョンのファイルが溜まっていって
気づいたら容量がとんでもないことになっていることってありますよね(ない)。
時すでに遅いがとりあえず過去バージョンのファイルを削除せねば、でもファイルをちまちま削除するのは面倒だし。。。
もしかしてライフサイクルポリシーを設定すれば一気に削除できるもんなのだろうか?
というわけで検証してみました。

結論:できる

ライフサイクルポリシーが有効になった時点以降のファイルしかポリシーが適用されないのではないのかしらん?とか思っていたのですが、そんなことはありませんでした。ちゃんとバケット内のファイル全て(プレフィックスを設定していれば対象のファイル)に適用されます。
結論としては、設定した日数を経過しているファイルはすべてポリシー通りに削除されます。

設定手順

S3コンソールにアクセスし、バケットの管理からライフサイクルルールの追加を選択します。
ストレージクラスの移行はしないのでそこは設定しませんでした。
次に失効の設定ですが、ここらへんは各々の要件にしたがって入力してください。
自分の場合は現行のファイルも過去バージョンのファイルもある程度日数が経過したら削除したいので、現行のバージョン以前のバージョンにチェックを入れました。
001.png

設定後の話

すぐにファイルが削除されるのかなと思ったのですが、S3コンソールを確認すると特に変化は見られませんでした。ライフサイクル設定の要素によると、オブジェクトが作成された日時を翌日の00:00UTC(日本時間9:00)に丸めてアクションを実行するようです。
でもバージョニングされたファイルの場合はすぐにアクションが実行されそうですが、結果整合性の関係もありすぐに削除されなさそうです。翌日に再度確認してみるとファイルが削除されてました。

なお数百万ファイルで200GBくらいの規模のバケット×2にライフサイクルの設定を行ったところ、一方のバケットは翌日にファイルが削除されていたのですが、もう一方のバケットは翌日になってもファイルが削除されていませんでした。
バケットポリシーで何か引っかかってるのかなとか見返してみたのですが、特に変なところもないので何でだろーと思っていたところ次の日には消えていたので、たぶんS3の結果整合性の関係で反映に時間がかかったのだと思います。

関連キーワード

この記事をシェアする

Facebook Twitter LINE はてなブックマーク

この記事を読んだ方に
おすすめの記事