DEV Community

Wakeup Flower
Wakeup Flower

Posted on

Use S3 Lifecycle to delete and retain the two recent versions

🧩 How it works

When S3 versioning is enabled, each update to an object creates a new version:

  • The latest version = current version
  • Older ones = noncurrent versions

Lifecycle rules can:

  1. Delete noncurrent versions older than X days (NoncurrentDays), and
  2. Retain only the N most recent noncurrent versions (NewerNoncurrentVersions).

So to keep two versions total, we’ll tell S3 to keep:

  • 1 current version
  • 1 noncurrent version (delete anything older)

⚙️ Lifecycle configuration example (JSON)

{
  "Rules": [
    {
      "ID": "Keep two latest versions",
      "Status": "Enabled",
      "Filter": {},
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 1,
        "NewerNoncurrentVersions": 1
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

💡 Meaning

Field Description
NoncurrentDays: 1 Wait one day after a version becomes noncurrent before evaluating it for deletion.
NewerNoncurrentVersions: 1 Retain only one noncurrent version (so total of two versions: current + 1 previous).

🧾 Apply it to your bucket

Save the JSON above to a file, e.g. lifecycle.json, then apply with AWS CLI:

aws s3api put-bucket-lifecycle-configuration \
  --bucket my-versioned-bucket \
  --lifecycle-configuration file://lifecycle.json
Enter fullscreen mode Exit fullscreen mode

Confirm:

aws s3api get-bucket-lifecycle-configuration \
  --bucket my-versioned-bucket
Enter fullscreen mode Exit fullscreen mode

⏱ What happens next

Example: you upload photo.jpg several times.

Version Status Age Action
v5 current kept
v4 noncurrent < 1 day kept (still too new)
v3 noncurrent > 1 day deleted (more than 1 newer noncurrent version)
v2, v1 noncurrent old deleted

Result → only v5 and v4 remain.


⚠️ Notes / Caveats

  • The rule only affects noncurrent versions, never the current one.
  • Deletion isn’t instant; S3 processes lifecycle actions daily.
  • You must have versioning enabled on the bucket.
  • The combination of NoncurrentDays + NewerNoncurrentVersions determines exactly when deletions occur.

Summary

Goal Supported by Lifecycle? How
Keep exactly two most recent versions ✅ (approximate, officially supported) Use NoncurrentVersionExpiration with NewerNoncurrentVersions=1

Top comments (0)