TL;DR: Intelligent-Tiering watches each object's access pattern and moves it between price tiers automatically — infrequently-touched objects get ~46% cheaper after 30 days, and snap back to the frequent tier instantly (and free) the moment something reads them. It's the right default for buckets where you can't predict what goes cold. The cost: a monitoring fee of $0.0025 per 1,000 objects/month, which is why it backfires on tiny objects.
The numbers
| Tier | When | $/GB-month (us-east-1) |
|---|---|---|
| Frequent Access | default | $0.023 |
| Infrequent Access | untouched 30 days | $0.0125 |
| Archive Instant Access | untouched 90 days (opt-in) | $0.004 |
| Archive Access | idle 90–270 days (opt-in) | ~$0.0036 |
| Deep Archive Access | idle 180–730 days (opt-in) | ~$0.00099 |
No retrieval fees between the instant-access tiers, ever — that's the key difference from Standard-IA. Monitoring costs $0.0025 per 1,000 objects/month.
Worked example — 10 TB, 60% going infrequent: $235/month on Standard becomes ~$196 with Intelligent-Tiering (~17%), and enabling the archive tiers for genuinely cold data pushes typical savings to 30–50%.
Do this
-
Check average object size first. Size ÷ object count per bucket (Storage Lens shows both). Under ~128 KB average, the monitoring fee eats the savings — skip those buckets.
-
Enable it for new objects by uploading with the class directly:
--storage-class INTELLIGENT_TIERINGonaws s3 cp/ SDK PUTs. -
Migrate existing objects with a one-time lifecycle transition:
aws s3api put-bucket-lifecycle-configuration --bucket YOUR-BUCKET \ --lifecycle-configuration '{"Rules":[{"ID":"to-intelligent-tiering", "Status":"Enabled","Filter":{}, "Transitions":[{"Days":0,"StorageClass":"INTELLIGENT_TIERING"}]}]}' -
Opt into the archive tiers for buckets with truly cold long tails (compliance records, old media):
aws s3api put-bucket-intelligent-tiering-configuration --bucket YOUR-BUCKET \ --id archive-cold --intelligent-tiering-configuration '{"Id":"archive-cold", "Status":"Enabled","Tierings":[{"Days":90,"AccessTier":"ARCHIVE_ACCESS"}, {"Days":180,"AccessTier":"DEEP_ARCHIVE_ACCESS"}]}'Skip this step if instant access to everything matters — the two Archive tiers reintroduce multi-hour restore times.
Gotchas
- Tiny objects lose money. Every object pays the same monitoring fee; a bucket of 5 KB thumbnails pays fees on millions of objects while saving pennies.
- Short-lived objects lose money. Deleted before day 30 = monitoring fees, zero tiering benefit.
- Cross-region replication doesn't inherit it. The destination bucket needs its own Intelligent-Tiering setup.
- Incomplete multipart uploads still bill. Add an abort-incomplete-MPU lifecycle rule regardless of storage class.
Skip this if
- Your access pattern is known and stable (e.g., logs hot for 7 days, then cold forever) — a plain lifecycle policy is simpler and avoids the monitoring fee.
- Everything in the bucket is accessed constantly — Standard is already correct.
- You need the absolute floor price for archives you'll never touch — Glacier Deep Archive via lifecycle rules is cheaper than IT's deep tier once patterns are predictable.