All Articles
Deep Dive·5 min read

Why Your S3 Bucket Is Suddenly Costing a Fortune

S3 looks cheap until the bill arrives. The surprise is almost never storage — it is requests, transfer, and forgotten data. Here is how to find it.

Part of: AWS Cloud Engineer

Your S3 bill jumped and nobody uploaded anything huge. S3 storage is genuinely cheap; the costs that blindside teams come from how the data is accessed and what you forgot to delete. Here is how to track down the real culprit.

It Is Usually Not Storage

Break the bill into its parts before guessing. The line items that surprise people are:

  • ▸Request costs — millions of GET/PUT/LIST calls add up, especially chatty apps that list a bucket repeatedly.
  • ▸Data transfer out — bytes leaving AWS to the internet are billed per GB; a popular download or an un-cached asset does this constantly.
  • ▸Forgotten storage — old versions, incomplete multipart uploads, and stale logs quietly accumulate.

Turn on S3 Storage Lens or check Cost Explorer grouped by usage type to see which one it is.

Kill Chatty Requests

If an application lists or reads the same objects constantly, put CloudFront or a cache in front and store results instead of re-fetching. A single LIST in a tight loop can generate a staggering request count:

# Anti-pattern: listing on every request for _ in range(1_000_000): s3.list_objects_v2(Bucket="assets") # each call is billed

Cache the listing or restructure so you fetch by key.

Clean Up What You Forgot

Two silent cost sinks: old object versions and abandoned multipart uploads. Add lifecycle rules to expire both:

{ "Rules": [ { "Filter": {}, "Status": "Enabled", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } }, { "Filter": {}, "Status": "Enabled", "NoncurrentVersionExpiration": { "NoncurrentDays": 30 } } ] }

Move Cold Data to Cheaper Tiers

Data you rarely read does not belong in Standard storage. Enable S3 Intelligent-Tiering or add lifecycle rules to shift aging objects to Infrequent Access or Glacier automatically.

Summary

An S3 bill spike is almost never raw storage — it is requests, transfer, or forgotten data. Split the bill with Storage Lens or Cost Explorer, cache to cut chatty requests, add lifecycle rules to expire old versions and stalled uploads, and tier cold data down. Find the real line item and the fix is usually a one-time configuration change.

#AWS#S3#Cost#Storage

Want to go deeper?

AWS Cloud Engineer

View Course