AWS S3で古いファイルの自動削除を行う

こんにちは。かっぺいです。
今日は、S3に保存したログファイルやバックアップファイルなどの古いファイルを自動的に削除する設定方法です。

世代保存する用途でのS3

バックアップファイルやログファイルなどで、ファイル名に日付が付いて数世代を保持するようなローテーション運用を行うなどして、古いファイルが溜まってくる運用パターンなどで、定期的に古いファイルを削除して容量を削減したい運用があるかと思います。

他にもAWSにはCloudFrontやCloudTrailなど、S3にログを出力することが前提となっているサービスが存在します。
この場合にも、一定期間以前のログは不要となることが想定されます。

CloudFrontやCloudTrailのログは、パスの下に大量のファイルを出力することになるので、手作業で削除はとても大変です。

ライフサイクルルール

このようなことを想定して、S3にはバケットに対してライフサイクルルールを設定して、古いファイルを削除したり、ストレージクラスを変更してコスト低減を行えるようになっています。

バケットに対して設定となりますが、通常はバケット内のプレフィックス指定やタグ、オブジェクトサイズでフィルタを指定して、条件に一致したオブジェクトを対象にして、アクションを実行するように設定します。

最も簡単な方法では、プレフィックス指定でオブジェクトのパスを指定して、特定のパスにあるファイル全てを条件に指定することができます。

ライフサイクルルールのアクション

ストレージクラスの変更や現行バージョンの有効期限切れ指定、非現行バージョンの削除など、フィルタに適用されたファイルに対しての実行アクションを指定することができます。

このアクション指定の段階で、オブジェクトが作成されてからの日数を指定することになります。

古いファイルを削除する方法

古いファイルを削除する方法は、一度オブジェクトを有効期限切れ状態にして、非現行バージョンの完全に削除という、2段階の流れを行うことによって削除を実現します。

オブジェクトの有効期限切れのアクションで、作成日からの日数を指定します。
非現行バージョンの削除アクションで、現行バージョンで無くなってからの経過日数とバージョン数を指定します。
バージョン管理をする設定にしていない場合は、バージョンの指定を行うと消えるまでの日数計算が複雑になるので、通常はバージョン数は指定しません。
経過日数を1日、バージョン数を0とすると、有効期限切れアクションが発生した翌日にファイルが完全に削除されます。