以下の内容はhttps://kakakakakku.hatenablog.com/entry/2025/07/17/221652より取得しました。


S3 バケットの「バージョニング」と「ライフサイクル」を組み合わせてファイルを数日後に削除する

Amazon S3 バケットにあるファイル(オブジェクト)をアプリケーションから削除しつつ,誤った削除(オペレーションミスなど)を考慮して数日間はファイルを戻せるようにしておきたいという要件があったとする📝

アプリケーション側で頑張って仕組みを作り込むのではなく,Amazon S3 バケットの「バージョニング」「ライフサイクル」を使ってうまく仕組み化できた.検証したことをまとめておこうと思う \( 'ω')/

設定

Amazon S3 バケットの「バージョニング」を有効化して,「ライフサイクル」では以下のアクションを設定しておけば OK👌

  • オブジェクトの非現行バージョンを完全に削除(日数は任意)
  • 有効期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除

バージョニング設定

ライフサイクル設定

Terraform だと aws_s3_bucket_versioningaws_s3_bucket_lifecycle_configuration を使って以下のように実装できる👌

resource "aws_s3_bucket" "sandbox" {
  bucket = "kakakakakku-sandbox-lifecycle"
}

resource "aws_s3_bucket_public_access_block" "sandbox" {
  bucket = aws_s3_bucket.sandbox.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

resource "aws_s3_bucket_versioning" "sandbox" {
  bucket = aws_s3_bucket.sandbox.id

  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_lifecycle_configuration" "sandbox" {
  depends_on = [
    aws_s3_bucket_versioning.sandbox
  ]

  bucket = aws_s3_bucket.sandbox.id

  rule {
    id     = "expire-objects"
    status = "Enabled"

    filter {}

    noncurrent_version_expiration {
      noncurrent_days = 1
    }

    expiration {
      expired_object_delete_marker = true
    }
  }
}

動作確認

Step.1

検証のために作った Amazon S3 バケット kakakakakku-sandbox-lifecycle にファイルをアップロードする.今回はサンプルとして AWS アイコンセット Asset-Package_02072025.dee42cd0a6eaacc3da1ad9519579357fb546f803.zip を使った(本当に何でも良し!).

aws.amazon.com

そして,ファイルを削除しておく🗑️ バージョニングを有効化すると,ファイルを削除しても実際には Amazon S3 バケットに残っていて,削除マーカー というファイルの裏に隠れているような状態になる.マネジメントコンソールだと バージョンの表示 というトグルをクリックすると確認できる.

Step.1

Step.2

数日待っていると「非現行バージョン」としてファイルは削除されて 削除マーカー のみになる👌

Step.2

注意点としては「設定した日数ピッタリ」で消えるのではなく遅延する可能性があるところ.ドキュメントでは「until days or even weeks later(数日後もしくは数週間後)」と書かれていて,ライフサイクル処理を平坦化する仕組みになっている.よって「確実に◯日後に削除する必要がある」という厳格な要件であれば使えない🙅‍♂️

Even though the expiration rule has been satisfied on January 1, Amazon S3 might not actually delete these objects until days or even weeks later. This delay occurs because S3 Lifecycle queues objects for transitions or expirations asynchronously.

docs.aws.amazon.com

Step.3

さらに待っていると「有効期限切れのオブジェクト削除マーカー」として残っていた 削除マーカー も削除されてキレイになる👌

Step.3

まとめ

Amazon S3 バケットの「バージョニング」「ライフサイクル」をうまく活用しよう〜 \( 'ω')/




以上の内容はhttps://kakakakakku.hatenablog.com/entry/2025/07/17/221652より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14