# S3 Intelligent-Tiering Not Enabled

> 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.

Source: https://zop.dev/integrations/aws/recommendations/s3-intelligent-tiering-not-enabled
Updated: 2026-08-19

---

## 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/metrics-dimensions.html) 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](https://aws.amazon.com/s3/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

1. Go to S3 Console → Select bucket
2. Management → Create lifecycle rule
3. Add transition to Intelligent-Tiering class
4. 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)
