Skip to main content
rightsizing · aws

S3 buckets whose bytes sit mostly in Glacier instead of Deep Archive

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Glacier Flexible Retrieval stores at roughly $0.0036 per GB-month; Deep Archive at $0.00099, about a 72% cut for data touched less than once a year. ZopNight computes the real per-bucket rate delta on Glacier-dominant buckets, and abstains outright (today on every bucket) rather than estimate with a flat fraction.

Signal and threshold

How ZopNight evaluates S3 buckets whose bytes sit mostly in Glacier instead of Deep Archive.
Field Value
Rule IDsRC-1512
Categoryrightsizing
Severitylow
Metricnone — pure configuration read
Sources3_deep_archive.go

Two archive tiers, a 3.6x price gap

Glacier Flexible Retrieval and Glacier Deep Archive solve the same problem (data you must keep but almost never read) at very different rates: roughly $0.0036 versus $0.00099 per GB-month. For a bucket holding 100 TB of compliance archives that gap is worth about $267 a month, in exchange for slower retrieval: Deep Archive restores take 12 to 48 hours. Write-once-read-almost-never data rarely justifies the faster tier.

Which buckets are candidates

Discovery records, per bucket, how its bytes distribute across storage classes (the same StorageType breakdown behind BucketSizeBytes) and stamps the dominant class, the largest by bytes. A bucket becomes a candidate only when that dominant class is Glacier and a monthly cost figure exists for it. The saving, when emitted, is the genuine rate delta applied to the measured Glacier-tier capacity: the Glacier rate minus the Deep Archive rate, times the Glacier gigabytes, times 730 hours. That figure is clamped so it never exceeds the bucket’s actual billed cost, which discounts may have pushed below rack rate.

Why you will not see this finding today

Concrete-or-abstain is this rule’s contract, and today the pricing input it depends on, the per-bucket Glacier-to-Deep-Archive delta, is not yet produced by the pipeline. The rule therefore abstains on every bucket in the current release. An earlier version instead reported 30% of the bucket’s total bill as the saving: a fabricated figure with no rate basis, and exactly the behaviour the abstention replaced. A rule that says nothing until its number is real is the design, not a gap in it.

Measure your own Glacier footprint

Terminal window
aws cloudwatch get-metric-statistics \
--namespace AWS/S3 --metric-name BucketSizeBytes \
--dimensions Name=BucketName,Value=my-bucket Name=StorageType,Value=GlacierStorage \
--start-time "$(date -u -v-2d +%Y-%m-%dT%H:%M:%SZ)" \
--end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--period 86400 --statistics Average

Multiply the bytes by the per-GB rate delta to preview what a lifecycle transition would save.

Before you transition anything

Deep Archive fits objects accessed less than once a year, and that access-pattern judgement is yours to make at remediation, since the rule does not measure retrieval frequency. Mind the 180-day minimum storage duration: short-lived archives can cost more after the move, not less. The transition itself is a lifecycle rule, reversible only by paying to restore and re-tier the objects.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·