GCS buckets carrying no lifecycle rules at all
What does ZopNight detect here?
Buckets with zero lifecycle rules never transition aging objects to Nearline or Coldline, so old data bills at Standard rates forever. ZopNight detects the missing policy from the bucket record but currently abstains from a dollar figure: GCP exposes no object-age metric, so the eligible bytes cannot be measured.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-140 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | bucket_lifecycle.go |
Where it applies
What a missing policy costs
Lifecycle rules are the only mechanism that moves objects between storage classes or
deletes them on age without anyone remembering to. A bucket with none configured
accumulates logs, build artifacts, and abandoned exports at Standard rates indefinitely.
The classic shape is a CI bucket that has been appending for 3 years. The detection reads
the bucket’s own configuration, stamped by the discoverer as
lifecycle_policy_present=false from the live bucket record via storage.buckets.get
(carried in roles/storage.admin in ZopNight’s catalog), and fires only when that flag is
positively false; an unknown state is skipped.
Why this page shows no savings number
An age-based lifecycle saving is (bytes old enough to transition) × (rate difference). The
second factor is known; the first has no producer. Cloud Monitoring’s
storage/total_bytes breaks capacity down by storage class but carries no age axis, and
GCP publishes no “bytes older than N days” metric at all. The two data sources that do
know object ages (Storage Insights inventory reports and a raw object listing) require
per-bucket export pipelines or pagination over potentially billions of objects. Rather
than pretend every Standard byte is transition-eligible, or borrow the 50% figure that
belongs to the separate cold-access reclass rule and double-count it, the rule abstains:
it emits nothing until a real age split exists.
Inspect a bucket’s lifecycle config
gcloud storage buckets describe gs://my-bucket \ --format="default(lifecycle_config)"A null result is exactly the state this rule flags. Adding a first policy, say transition
to Nearline at 30 days and delete at 365, takes one gcloud storage buckets update --lifecycle-file call and applies to existing objects on their next age evaluation.
Distinct from the Nearline reclass rule
RC-1233 answers a different question: should this bucket’s default class change because measured access is cold? That rule prices a real Standard-to-Nearline delta from the whole bucket’s bill. This rule is about aging subsets of a bucket that stays hot at the front. Applying both figures to one bucket would count the same bytes twice, which is precisely why this one holds its number back.