S3 Intelligent-Tiering Not Enabled
What does ZopNight detect here?
Intelligent-Tiering suits S3 buckets whose measured access rate stays below 1,000 requests per day, a cold tail worth demoting. ZopNight sums the per-class Standard-to-IA/IT rate delta times cold-class GB times 730 hours, net of the per-1,000-object monitoring fee, firing only on a positive delta; the old flat 0.30 fraction is removed.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-071 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | s3_intelligent_tiering.go |
Where it applies
Cold buckets not already on Intelligent-Tiering
- metadata: intelligent_tiering (bool; s3.go): read via metadataBoolRaw as the suppression axis (a bucket already on Intelligent-Tiering is skipped). T0040 re-point: the prior intelligent_tiering=true Tag suppression read a key no producer wrote, so it never suppressed; it now reads the real Metadata flag. Firing still requires the measured low S3AccessRatePerDay activity axis.
- metric: S3AccessRatePerDay; the rule now reads the authoritative activity axis (producer metrics/aws/s3_access.go::S3AccessRatePerDayMetric) and fires only when the measured daily access rate is below the actively-hot ceiling (1000 req/day; cold-object tail that IT can demote); a frequently-accessed bucket (IT only adds a monitoring fee) and a bucket with no Request-Metrics series both abstain (items PAP011/PAC004).
- injected per-bucket Standard→IA/IT tier delta (SetS3TierDeltaSavings), wired end-to-end via the aggregator’s calcS3 (s3RetierDeltas, cost/calc_aws_storage.go), which sets CostOutput.S3StandardToITSavingsUSD from Metadata[“storageClasses”] × per-class pricing, net of the per-1000-object monitoring fee; threaded through ComputedCostEntry.S3StandardToITSavingsUSD → s3ITDeltaMap → SetS3TierDeltaSavings (recommender service.go). The rule fires when the delta is positive and abstains when it is absent or non-positive (e.g. no cold STANDARD-dominant capacity to demote).
Summing the per-class tier deltas
concrete-or-abstain (cost-driven rightsizing). savings = Σ over cold classes of (rate[STANDARD] − rate[target]) × classGB × 730, the per-class Standard→IA/IT per-GB rate delta applied to cold-class capacity (Metadata[“storageClasses”] × aggregator per-class rates), injected via SetS3TierDeltaSavings (clamped to cost). The prior hardcoded 0.30 flat-fraction is removed (mirrors RC-1325 azure/storage_tier.go). The delta producer (calcS3) is wired end-to-end, so the rule fires concretely when the net delta is positive and abstains otherwise. Never a fraction-of-bill phantom, never a $0 cost rec.
Adding an Intelligent-Tiering transition
- Go to S3 Console → Select bucket
- Management → Create lifecycle rule
- Add transition to Intelligent-Tiering class
- S3 Intelligent-Tiering automatically moves objects between tiers
Daily request rate as the activity axis
S3AccessRatePerDay (aggregator producer metrics/aws/s3_access.go:38/53, summed hourly AllRequests; MultiMetricsAware)