Cloud Waste Hunter
AWS S3 Storage

S3 incomplete multipart uploads cleanup

S3 incomplete multipart uploads create storage cost when failed or abandoned uploads leave billable parts behind. This usually happens after artifact, export, or ingestion jobs stop before cleanup runs.

This detector sits inside the AWS Storage Cost Optimization category guide for broader cleanup planning.

Potential savings

$25 to $600 / month

$300 to $7,200 / year

Detector ID
aws-s3-incomplete-multipart-uploads
Full detector name
S3 incomplete multipart uploads without abort cleanup
Service
S3
Category
Storage
Published
Mar 18, 2026
Updated
Mar 27, 2026

The problem

Multipart uploads are common for large objects, but interrupted or abandoned uploads can leave partial data in S3 indefinitely. Those parts continue to incur storage charges until the upload is explicitly aborted or lifecycle rules clean them up.

Why it happens

  • Upload clients fail mid-transfer and never abort the original multipart session.
  • Build, export, or ingestion pipelines leave partial uploads behind after transient failures.
  • Buckets may have object lifecycle rules, but no abort cleanup for incomplete multipart state.

What this means for cost

Estimated monthly

$25 to $600/mo

Estimated annual

$300 to $7,200/yr

This waste pattern often shows up as $25 to $600/mo in recurring monthly cost, or roughly $300 to $7,200/yr if it sits untouched for a year.

How to detect S3 incomplete multipart uploads

The strongest signal is a bucket that still has open multipart upload sessions even though the related job, client, or pipeline already failed or disappeared.

Inspect the bucket for open multipart uploads:

aws s3api list-multipart-uploads --bucket my-bucket

If you see uploads that are days or weeks old, confirm that the bucket lifecycle configuration includes AbortIncompleteMultipartUpload.

aws s3api get-bucket-lifecycle-configuration --bucket my-bucket

This issue is especially common in buckets used for build artifacts, large exports, or ingestion pipelines.

What this detector actually checks

Cloud Waste Hunter only raises a finding when both of these conditions are true:

  • the bucket currently has incomplete multipart uploads
  • the bucket does not have an enabled AbortIncompleteMultipartUpload lifecycle rule

That boundary matters. This detector is intentionally narrower than general lifecycle cleanup checks. A bucket that merely lacks lifecycle policy is not enough by itself.

How to fix S3 incomplete multipart uploads

Add a lifecycle rule that aborts incomplete multipart uploads after a short window.

resource "aws_s3_bucket_lifecycle_configuration" "artifacts" {
  bucket = aws_s3_bucket.artifacts.id

  rule {
    id     = "abort-stale-multipart"
    status = "Enabled"

    abort_incomplete_multipart_upload {
      days_after_initiation = 7
    }
  }
}

If an application regularly leaves open uploads, also review its error handling. Lifecycle cleanup prevents indefinite storage charges, but it does not fix the underlying upload failure path.

Caveats and overlap boundaries

Fresh in-progress uploads are normal. The detector becomes most useful when older uploads accumulate and the bucket still lacks abort cleanup. It also biases toward under-detection rather than noise because any enabled abort rule is treated as sufficient in v1, even if filters may not cover every upload path.

If the broader issue is noncurrent object retention rather than abandoned upload state, that is a separate storage-policy problem. This detector is only about currently open multipart sessions and missing abort cleanup, not historical object versions or generic lifecycle coverage.

How Cloud Waste Hunter helps

Cloud Waste Hunter can flag buckets that currently expose incomplete multipart upload activity without an enabled abort cleanup rule, surface the affected bucket names and upload counts, and point operators to the lifecycle fix first. For adjacent storage cleanup patterns, review the AWS Storage Cost Optimization guide.

FAQ

Do incomplete multipart uploads show up as normal S3 objects?

No. They are stored parts tied to unfinished uploads, so they can be overlooked unless you explicitly inspect multipart upload state or bucket lifecycle rules.

Does any lifecycle rule suppress this detector?

No. v1 only suppresses findings when it sees an enabled `AbortIncompleteMultipartUpload` rule, and it currently treats any enabled abort rule as aligned even if the rule is prefix- or tag-scoped.

Related Detectors

Related detectors

These detectors cover similar resource families or cost behaviors and make good follow-on reviews during cleanup.