📝

AWS S3のライフサイクルの自分的まとめ

に公開

はじめに

こんにちは、馬場です!
以前S3のライフサイクルについて人に聞かれたときに、改めて調べる機会があったのでそのメモがてら記事を書きます。

S3ライフサイクルとは?

S3ライフサイクルは、バケット内のオブジェクトに対して以下の処理を自動化できる機能です。

  • ストレージクラスの移行(例: Standard → Glacier)
  • 有効期限切れの設定
  • オブジェクトの削除

これらにより、コスト最適化やポリシーに基づいたS3オブジェクトの管理が可能になります。

有効期限切れとS3オブジェクトの削除の違い

S3ライフサイクルには「有効期限切れ」と「削除」の2つのオプションがあります。
なんとなくのニュアンスは分かりやすいですが、どんな差分があるのか?が少し分かりづらいのでこの点について解説します。

バージョニング設定の有無でも挙動が変わってしまう点が分かりづらさを加速させるのですが、以下の表のような挙動をします。

有効期限切れ 削除
バージョニング有効時 現行バージョンが"非現行"バージョンになる 非現行バージョンを削除可能
バージョニング無効時 実質オブジェクト削除と同等 オブジェクトが削除される

削除と有効期限切れについて

削除と有効期限切れの挙動についてより詳しく記載していきます。

S3オブジェクトの削除方法

S3オブジェクトを削除する方法には以下があります。

  1. 手動削除

    • AWSマネジメントコンソールやCLIで明示的に削除
  2. ライフサイクルルールによる自動削除

    • 指定した日数経過後または任意の保持バージョン以降のオブジェクトを自動削除
  3. バージョニングを利用した削除
    こちらは詳しく説明しようとすると長くなるので割愛

    • 削除マーカーを付与(復元可能)
    • 非現行バージョンを削除

※S3オブジェクトロックを利用

  • 一定期間削除や上書きを防止する機能もあります

「オブジェクトの現行バージョンを有効期限切れにする」の利用方法

バージョニングが有効なS3バケットで「現行バージョンの有効期限切れ」を設定することで、オブジェクトを非現行バージョンに移行できます。
また、この際に「オブジェクトの現行バージョンを有効期限切れにする」も設定すると将来利用が全く無くなった際に現行バージョンのオブジェクトも削除したいといったケースに対応できるようになります。

ユースケース: 保持期間を超えたデータの管理

ここまで解説した有効期限切れと削除のルールを組み合わせることで以下のような要件を満たす運用を自動化することができます。
たとえば、「最新のデータのみ保持し、30日経過後に削除する」といった要件がある場合、以下の設定を行います。

  1. 現行バージョンを30日で有効期限切れ
  2. 非現行バージョンを3日後に削除

これにより、最新データを一定期間保持しつつ古いデータを適切に削除できます。

Tips

何点か細かい注意点や機能があるのでそれらについても触れておきます。

ライフサイクルルールの実行タイミング

S3ライフサイクルルールはUTCの0時に実行されます。日本時間(JST)では午前9時に適用される点に注意してください。
ライフサイクルルールの挙動確認が早すぎると意図しない状態になってしまう可能性があります。

https://repost.aws/ja/knowledge-center/s3-lifecycle-rule-delay

ルールスコープで対象を取る

ライフサイクルルールでは、特定のプレフィックスやタグを指定して対象オブジェクトを制御できます。
例: logs/プレフィックス内のみ削除

オブジェクトサイズの指定

ライフサイクルルールの適用対象をオブジェクトサイズで指定することができます。
ストレージクラス移行にはデータ転送コストが発生するため、小さすぎるファイルの移行はコストが割高になってしまいます。

例: 128KB以上のオブジェクトのみ移行

まとめ

AWS S3のライフサイクルは少しわかりにくいですが、適切に設定することでオブジェクト管理とコストの最適化の自動化が可能になります。

適切なルール設計を行い、S3の運用を自動化しましょう!

DELTAテックブログ

Discussion