All cheat sheets
Storagecheat sheet

S3 Intelligent-Tiering

Let AWS move S3 objects between storage tiers automatically based on real access patterns — no retrieval fees, no lifecycle rules to maintain, typically 30–50% off buckets with mixed or unpredictable access.

Last reviewed: July 11, 2026

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

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

  2. Enable it for new objects by uploading with the class directly: --storage-class INTELLIGENT_TIERING on aws s3 cp / SDK PUTs.

  3. 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"}]}]}'
    
  4. 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.

Run this audit with your AI assistant

Paste this into Claude, ChatGPT, or any agent that can run the AWS CLI with read-only credentials. It audits your account for exactly the waste this sheet describes — and changes nothing.

You are auditing an AWS account for S3 Intelligent-Tiering savings.
Use the AWS CLI with READ-ONLY credentials. Do not create, modify, or
delete anything — report findings and recommended (unapplied) fixes only.

1. List buckets: aws s3api list-buckets
2. For each bucket (or the 15 largest), collect:
   - Size and object count per storage class (CloudWatch BucketSizeBytes /
     NumberOfObjects, per StorageType dimension).
   - Average object size = size / count. Flag buckets under 128 KB average
     (Intelligent-Tiering monitoring fees can exceed savings there).
   - Whether any Intelligent-Tiering configuration exists:
     aws s3api list-bucket-intelligent-tiering-configurations
   - Existing lifecycle rules: aws s3api get-bucket-lifecycle-configuration
3. Estimate for each candidate bucket, using us-east-1 prices: Standard
   $0.023/GB-mo vs IT Infrequent tier $0.0125/GB-mo, monitoring fee
   $0.0025 per 1,000 objects/mo. Assume 50–70% of data goes infrequent
   after 30 days unless access data suggests otherwise.

Report a table: bucket | size | avg object size | current classes |
IT enabled? | est. $/month saved. Recommend: which buckets to switch to
INTELLIGENT_TIERING (via lifecycle transition), which to leave on
Standard, and which are better served by a fixed lifecycle policy
(predictable aging). Do NOT apply any changes.
Works with any assistant that can run shell commands.

Want the guided version?

The S3 Intelligent-Tiering walkthrough covers this topic interactively — it asks about your setup, branches to what’s relevant, and quizzes you on the tricky parts. Free and anonymous.

Start the walkthrough