Why Did My AWS Bill Spike? 8 Causes and Where to Look

Sudden AWS cost increases come from a short list of causes. Eight suspects — expired Savings Plans, NAT bytes, snapshot sprawl — and where each shows up.

A sharp jump appears on the invoice and nobody remembers changing anything. Something may have changed, expired, replicated, or kept accumulating. Many sudden AWS cost increases can be narrowed through Cost Explorer or the Cost and Usage Report (CUR). Here are eight places we'd check first and the signals each can leave.

First: find the day the line bent

Before hunting suspects, open Cost Explorer, set granularity to daily, set the range to the last three months, and group by Service. If the increase is a step change, the date it starts narrows the search; if it is a slope, look for accumulating usage or changing unit volume. Once you have the date and the service, regroup by Usage Type. Most of the checks below are one more group-by from there.

1. Resources left behind from a finished project

The migration ended. The proof of concept got approved. The resources stayed. Unattached EBS volumes bill per GB-month whether anything uses them. AWS currently charges for public IPv4 addresses whether attached or idle, with documented exceptions such as addresses brought through BYOIP. Load balancers can continue to incur hourly charges with zero targets. A stopped RDS instance still incurs storage charges, and RDS automatically restarts it after seven days.

2. Data transfer and NAT processing

A NAT Gateway adds hourly and data-processing charges for traffic routed through it. A workload that pulls S3 objects — including ECR image layers — through a NAT Gateway instead of an S3 gateway endpoint can turn a networking path into a material line item. Some cross-AZ paths also charge for data transfer; pricing varies by service and region, so verify the applicable AWS data-transfer terms.

3. Snapshot and log accumulation

Storage that grows forever doesn't spike — it compounds until someone notices. EBS snapshots without a lifecycle or deletion process can keep accumulating storage charges. CloudWatch Logs retains log events indefinitely by default unless a retention period is set; ingestion may be a larger line item than storage.

4. Commitment coverage expired

The workload didn't change at all. The one-year Savings Plan or Reserved Instances did — they lapsed, and the same usage started billing at on-demand rates. This is one possible "usage flat, cost up" pattern.

5. Someone raised the autoscaling floor

During an incident, minimum capacity gets bumped from 2 to 8. The incident ends; the minimum doesn't. Scheduled scaling set for a launch stays at launch levels. ECS desired counts creep up. The result is a permanent step up in running hours.

6. New-region duplication

A DR test, S3 Cross-Region Replication, DynamoDB global tables, or copied AMIs put a second copy of your data in another region. That can add storage and inter-region data-transfer charges; the exact mechanics depend on the service and replication pattern.

7. GPU and AI experiments left running

GPU instances from the p or g families can be materially more expensive than general-purpose instances. SageMaker real-time endpoints can incur instance-hour charges while deployed even with no invocations. Bedrock provisioned throughput uses time-based commitment pricing; verify the current service and region terms.

8. Storage class drift

Data that was supposed to move to Infrequent Access or Glacier is sitting in S3 Standard because the lifecycle rule was never applied — or filters on a prefix that no longer matches. Versioned buckets keep noncurrent versions billable according to their storage class until a lifecycle rule expires them. Incomplete multipart uploads can continue holding billable storage until a cleanup rule aborts them.

The pattern

Most suspects above can be narrowed with the same three moves: daily granularity to find the date, group by Service to find the neighborhood, and group by Usage Type to find the mechanism. When Cost Explorer runs out of resolution, CUR resource IDs can add detail when that feature is enabled and the line item carries one. The initial analysis can use billing and inventory data under read-only access; any remediation is separately scoped and client-approved.

If the spike is on this month's bill and you want it traced to specific resources, book the Free AWS Assessment to trace the likely cause and decide whether the remediation belongs in Consulting, Support and Advisory, or your own backlog.