S3 Intelligent-Tiering: the basics
A storage class that tiers your data for you
S3 Intelligent-Tiering is a storage class that automatically moves each object between a Frequent Access tier and an Infrequent Access tier based on that object's actual access pattern. Touch an object and it lands (or stays) in Frequent Access; leave it untouched for 30 days and S3 quietly demotes it to Infrequent Access at roughly half the storage price; touch it again and it's promoted back — automatically, per object, with no retrieval fees and no per-transition charges. You pay one small extra cost: a monitoring fee of about $0.0025 per 1,000 objects per month.
It exists because manual lifecycle rules require you to predict the future. A rule that says "move to Infrequent Access at 30 days" is a bet that nobody will read the object on day 45 — and if they do, you eat a retrieval fee and bounce it back to Standard. Intelligent-Tiering removes the bet entirely. There are also two opt-in asynchronous tiers — Archive Access and Deep Archive Access — that you can enable per bucket to push genuinely cold objects down to near-Glacier prices, still automatically.
The check flags high-churn or unpredictable buckets — user uploads, data lakes, staging areas, mixed hot/cold archives — that are sitting entirely in S3 Standard with no tiering at all. These are exactly the buckets where you cannot write a confident lifecycle rule, and where Intelligent-Tiering is the correct default. It is not flagged for buckets of predictably-cold data (a direct Glacier transition is cheaper there) or buckets of millions of tiny objects (where the per-object monitoring fee can outweigh the savings).
In this lesson you'll learn exactly how Intelligent-Tiering moves objects between Frequent, Infrequent, and the optional Archive tiers, the monitoring-fee math that decides when it wins and when it loses, the 128 KB small-object rule, and how it differs from manual lifecycle transitions for predictably-aging data. You'll see how to set it as the storage class on upload for high-churn buckets, how to transition existing objects into it with a lifecycle rule, and how to turn on the opt-in Archive tiers with put-bucket-intelligent-tiering-configuration.
The data lake that paid hot rates for cold data
An analytics team ran a 2.4 PB data lake entirely in S3 Standard because their access pattern was 'unknown' — some partitions were queried daily, most hadn't been read in over a year, and nobody could say which was which. They'd avoided lifecycle rules precisely because they were afraid of moving a partition that turned out to be hot and eating retrieval fees. Switching the lake to Intelligent-Tiering let S3 sort it out object by object: within 90 days about 70% of the data had auto-demoted to Infrequent and Archive Instant Access. The monitoring fee on their object count came to under $400 a month; the storage saving was just over $19,000 a month. The thing they'd been afraid to do manually, the storage class did for free.
Enabling Intelligent-Tiering in action
Marco runs platform engineering at a media company. The dashboard flags acme-user-uploads — 320 TB, entirely in S3 Standard, growing ~8 TB a month. It holds raw user-submitted images and video: every upload is hammered for the first few days while it's processed and reviewed, then access falls off a cliff and is wildly unpredictable after that. Some assets go viral months later; most are never seen again.
This is the textbook case where a manual rule is a bad bet. "Move to Infrequent Access at 30 days" would save money on the 90% that go cold but slap a retrieval fee on the 10% that resurface — and Marco has no way to know in advance which is which. So he doesn't guess. He sets new uploads to land directly in Intelligent-Tiering and writes a lifecycle rule to migrate the existing 320 TB into it.
He checks the storage-class distribution before changing anything, applies the change, and then enables the opt-in Archive Access tier so genuinely dormant assets can drop to near-Glacier prices without anyone managing it. Three months later the bucket is about 60% Infrequent and Archive, the user-facing retrieval experience is unchanged (all the tiers he enabled are instant-access), and the monthly S3 line for that bucket has dropped by roughly 45%.
First, see how much of the bucket is sitting in Standard. CloudWatch's BucketSizeBytes per storage class shows the distribution that tells you there's room to tier.
320 TB of unpredictable data paying full Standard rate — the case Intelligent-Tiering is built for.
Set new objects to land directly in Intelligent-Tiering on upload, so fresh uploads start auto-tiering immediately rather than accumulating in Standard.
New uploads start in Intelligent-Tiering, so nothing piles up at Standard rates from day one.
Turn on the opt-in Archive Access tier so genuinely dormant objects drop to near-Glacier prices automatically. This is a per-bucket configuration applied with put-bucket-intelligent-tiering-configuration.
Enabling the opt-in async Archive tiers pushes long-dormant objects to near-Glacier prices, still automatically.
Intelligent-Tiering under the hooddeep dive
Intelligent-Tiering tracks a last-access timestamp per object and uses it to place the object in one of up to five tiers. The two automatic, always-on tiers are Frequent Access (same price as S3 Standard, $0.023/GB-month) and Infrequent Access ($0.0125/GB-month), with an object demoting to Infrequent after 30 consecutive days without access and promoting straight back on the next access. A third automatic tier, Archive Instant Access (~$0.004/GB-month), kicks in at 90 days and is still millisecond-latency. All transitions are free — no per-object transition charge — and there are never retrieval fees on these three tiers. The catch is a monitoring and automation fee of ~$0.0025 per 1,000 objects per month.
The two optional tiers are opt-in per bucket via put-bucket-intelligent-tiering-configuration: Archive Access ($0.0036/GB-month) at a configurable age, and Deep Archive Access ($0.00099/GB-month) deeper still. Unlike the automatic tiers, these are asynchronous — retrieving an object takes minutes to hours, like Glacier — so you only enable them on data you're confident won't need instant access. Two rules govern eligibility: objects smaller than 128 KB are never auto-tiered (they stay in Frequent Access, though they can still incur the monitoring fee), and objects must be Intelligent-Tiering class to begin with, set either on PUT with --storage-class INTELLIGENT_TIERING or via a lifecycle Transition.
The monitoring fee is what decides whether it wins. The math: at ~$0.0025 per 1,000 objects/month, a bucket of 10 million objects pays $25/month in monitoring regardless of size. If those are large objects (say 1 GB each, 10 PB total) the fee is a rounding error against the storage savings. But a bucket of 10 million tiny 5 KB objects holds only ~48 GB — its entire Standard bill is about $1.10/month, and the $25 monitoring fee dwarfs any saving. That's the lose case: many tiny objects. For predictably-cold data you can name (logs, backups, snapshots that age on a known schedule), a direct lifecycle transition to Glacier or Deep Archive skips the monitoring fee entirely and is cheaper — that's a separate lesson on manual storage-class transitions.
# Migrate existing objects in a high-churn bucket into Intelligent-Tiering
# via a lifecycle rule (transition existing data; new PUTs use --storage-class).
cat > it-lifecycle.json <<'EOF'
{
"Rules": [
{
"ID": "migrate-existing-to-intelligent-tiering",
"Status": "Enabled",
"Filter": {},
"Transitions": [{ "Days": 0, "StorageClass": "INTELLIGENT_TIERING" }]
}
]
}
EOF
aws s3api put-bucket-lifecycle-configuration \
--bucket acme-user-uploads \
--lifecycle-configuration file://it-lifecycle.json
# Day-0 transition migrates eligible (>=128 KB) existing objects within ~24h.
# Smaller objects stay in Frequent Access and are simply not auto-tiered. What is the impact of leaving high-churn buckets in Standard?
The direct cost is paying Frequent-Access prices for data that's gone cold. Infrequent Access is roughly 45% cheaper than Standard and Archive Instant Access is roughly 80% cheaper — and on a high-churn bucket the majority of data is older than 30-90 days and being read rarely or never. A 320 TB bucket fully in Standard is ~$7,400/month; once Intelligent-Tiering settles it into a realistic mix of Frequent, Infrequent, and Archive Instant, the same data lands closer to $4,000/month. The gap is pure waste that recurs every month the bucket sits untiered.
The hidden cost is the manual-rule trap that keeps teams in Standard in the first place. Engineers avoid lifecycle transitions on unpredictable buckets precisely because a wrong guess is expensive: move an object to Standard-IA and read it before 30 days and you pay an early-deletion penalty plus a per-GB retrieval fee. So the safe-feeling choice becomes 'leave everything in Standard,' which is the most expensive choice of all. Intelligent-Tiering's no-retrieval-fee, no-penalty design removes the reason to stall.
There's a real downside case worth naming so the optimization isn't misapplied: buckets of millions of tiny objects. The monitoring fee is per-object, not per-GB, so a bucket holding 50 million 4 KB thumbnails pays a monitoring fee out of all proportion to its trivial storage footprint — and objects under 128 KB never auto-tier anyway, so there's no offsetting saving. On those buckets Intelligent-Tiering can cost more than plain Standard. The fix is to recognize them and leave them alone, or repack tiny objects before tiering.
Finally, leaving unpredictable data at full rate is a missed-default problem, not a one-time miss. New buckets get created, new uploads land in Standard, and the untiered footprint grows with the business. The impact compounds: every month the org doesn't make auto-tiering the default for unknown-access data, it's paying a premium on a base that's getting larger. The cleanup is easy; the discipline of defaulting correctly is what keeps the saving.
How do you enable Intelligent-Tiering safely?
Rolling out auto-tiering is a four-step loop: confirm the bucket is a good fit, set the storage class for new objects, migrate the existing data, and enable the opt-in Archive tiers only where async retrieval is acceptable.
1. Confirm the bucket is a fit — and isn't a tiny-object trap
Intelligent-Tiering wins on buckets with unpredictable, mixed, or unknown access patterns: user uploads, data lakes, staging areas, mixed hot/cold archives. Before enabling it, check the object count against the total size — pull it from S3 Storage Lens or S3 Inventory. If the bucket holds millions of objects averaging well under 128 KB, the per-object monitoring fee can exceed the storage saving and those small objects won't auto-tier anyway; leave it in Standard or repack first. If you already know the data is predictably cold on a fixed schedule (logs, backups), a direct Glacier lifecycle transition is cheaper than auto-tiering.
2. Set new objects to land in Intelligent-Tiering on PUT
Stop the bucket from accumulating fresh data in Standard. Set --storage-class INTELLIGENT_TIERING on uploads (in the CLI, SDK, or your upload service config). New objects start in Frequent Access and auto-demote as they go cold, so the untiered footprint stops growing from day one. This is the single most important step for a high-churn bucket, because on a fast-growing bucket the new data is most of the future bill.
3. Migrate existing objects with a day-0 lifecycle transition
Add a lifecycle rule transitioning current objects to INTELLIGENT_TIERING at Days: 0. S3 begins migrating eligible objects (>=128 KB) within about 24 hours; there's no transition charge for moving into Intelligent-Tiering and no retrieval risk because all three automatic tiers are instant-access. The migration is invisible to applications — the object keys, URLs, and access semantics don't change. Costs drop on the next billing cycle as objects settle into their tiers, not instantly.
4. Enable the opt-in Archive tiers only where async retrieval is fine
For genuinely dormant data, enable Archive Access and Deep Archive Access per bucket with put-bucket-intelligent-tiering-configuration, choosing the day thresholds (e.g. 90 and 180 days). These tiers are asynchronous — retrieval takes minutes to hours — so only turn them on for buckets where nothing needs instant access to old objects. If any consumer expects millisecond reads of arbitrary historical objects, stick to the automatic tiers (which include the instant Archive Instant Access tier) and skip the opt-in ones.
# Full rollout for a high-churn bucket.
BUCKET=acme-user-uploads
# (a) New uploads land in Intelligent-Tiering (set in your upload service /
# SDK; shown here for the CLI).
aws s3 cp ./incoming/ s3://$BUCKET/incoming/ --recursive \
--storage-class INTELLIGENT_TIERING
# (b) Migrate the existing footprint with a day-0 lifecycle transition.
cat > it-lifecycle.json <<'EOF'
{
"Rules": [
{
"ID": "migrate-existing-to-intelligent-tiering",
"Status": "Enabled",
"Filter": {},
"Transitions": [{ "Days": 0, "StorageClass": "INTELLIGENT_TIERING" }]
}
]
}
EOF
aws s3api put-bucket-lifecycle-configuration \
--bucket $BUCKET --lifecycle-configuration file://it-lifecycle.json
# (c) Enable the opt-in async Archive tiers (only where minutes-to-hours
# retrieval is acceptable).
aws s3api put-bucket-intelligent-tiering-configuration \
--bucket $BUCKET --id ArchiveDeep \
--intelligent-tiering-configuration \
'{"Id":"ArchiveDeep","Status":"Enabled","Tierings":[{"Days":90,"AccessTier":"ARCHIVE_ACCESS"},{"Days":180,"AccessTier":"DEEP_ARCHIVE_ACCESS"}]}' Quick quiz
Question 1 of 5A 320 TB bucket of user-uploaded images and video sits entirely in S3 Standard. Access is heavy for the first few days after upload, then unpredictable — most objects go cold but some resurface months later. What's the right move?
You scored
0 / 5
Keep learning
Dig deeper into Intelligent-Tiering mechanics, S3 storage-class economics, and cost-aware storage design.
- Amazon S3 Intelligent-Tiering Authoritative reference on the access tiers, automatic vs opt-in archive tiers, the 128 KB rule, and the monitoring fee.
- Amazon S3 pricing Current per-GB-month rates for every storage class plus the Intelligent-Tiering monitoring and automation fee — the numbers behind the break-even math.
- PutBucketIntelligentTieringConfiguration API reference The exact request shape for enabling the opt-in Archive Access and Deep Archive Access tiers per bucket.
- FinOps Foundation — Cloud Rate and Usage Optimization How storage-class optimization and efficient defaults fit the broader FinOps lifecycle and operating model.
You've completed Enable S3 Intelligent-Tiering on high-churn buckets. You now know why auto-tiering is the right default for unpredictable access, the monitoring-fee math that decides when it wins and when it loses, the 128 KB small-object rule, and the four-step rollout — confirm fit, set new PUTs to Intelligent-Tiering, migrate existing data with a day-0 transition, and enable the opt-in Archive tiers only where async retrieval is fine. The next time a high-churn bucket shows up sitting in Standard, you'll have a no-risk path from flagged to optimized.
Back to the library