Cloud Billing Horror Stories: When Idle Resources and NAT Gateways Destroy Your Budget
Stay tuned for the latest product updates, deep dives, and lessons from helping teams ship faster with InMotion Cloud.
Updated August 3, 2026 by Sean Perryman
16 Minutes to Read

The cloud was supposed to make infrastructure costs predictable and manageable. Instead, it has become a minefield where a single misconfiguration, forgotten resource, or overlooked service can transform a manageable monthly budget into a financial catastrophe overnight.
This is not hypothetical. Engineering teams across the industry are learning this lesson the hard way, waking up to bills that exceed their annual infrastructure budgets after a single weekend. The worst part is that most of these disasters are entirely preventable, caused not by sophisticated attacks or complex architectural failures, but by simple oversights in how cloud services are configured, monitored, and cleaned up.
Here are the real horror stories, the hidden cost traps nobody warns you about, and the battle-tested prevention strategies that separate teams who control their cloud costs from those who get controlled by them.
The Horror Stories: Real Bills, Real Pain

The CloudTrail Infinite Loop: From Normal to Nightmare in Minutes
One startup configured a Lambda function to trigger from CloudWatch Events using S3 and CloudTrail. The fatal mistake was configuring CloudTrail to log S3 events for all buckets, including the bucket where CloudTrail writes its own logs.
The result was an infinite loop. CloudTrail writes a log to S3, which triggers Lambda, which writes to S3, which triggers Lambda again. The founder frantically disabled the triggers but the bill kept climbing because AWS had queued all those throttled Lambda invocations and was replaying them.
They finally had to set concurrent execution limits to zero on every Lambda function before the bleeding stopped. According to AWS billing horror story documentation, these recursive loops are described as "the flash flood of cloud disasters" where you can go to bed with a $5 monthly bill and wake up with a $50,000 bill, all before budget alerts have a chance to fire.
The $10,000 Rogue Lambda Function
Another team experienced an incident with a rogue AWS Lambda function that cost them $10,000. The function was caught in a recursive loop that AWS's throttling mechanisms couldn't stop fast enough. By the time the team discovered the issue, thousands of dollars in charges had already accumulated.
AWS has since introduced recursive loop detection that stops invocations when a function is invoked with the same triggering event more than 16 times, but for teams who experienced this before the safeguard existed, the damage was already done.
The SageMaker That Wouldn't Die: $779 for Doing Nothing
One user attempted to create a SageMaker instance, decided against it, and deleted it immediately. The billing statement arrived weeks later showing $779.58 in charges for SageMaker Canvas usage that was supposedly not running.
The problem, as documented in AWS re:Post discussions, is that deleting a notebook instance in SageMaker does not automatically terminate all associated resources. When you use the SageMaker console to delete a Domain, the Amazon EFS volume is detached but not deleted. The same behavior occurs by default when using AWS CLI or SageMaker Python SDK.
Storage continues charging. Endpoint configurations remain. IAM roles persist. Canvas Workspace instances ignore log off commands. The bill keeps climbing even though the console shows nothing running.
The $45,000 Cryptomining Hack That Generated $800 of Cryptocurrency
In early November 2025, Amazon GuardDuty engineers detected an attack campaign where cybercriminals used compromised AWS IAM credentials to gain access to customer accounts. The attacker started cryptomining within 10 minutes of initial access, targeting high-performance GPU instances through multiple launch templates and auto scaling groups.
One victim was billed $45,000 for AWS resources that generated only $800 worth of Monero cryptocurrency. According to Tom's Hardware reporting, the attacker used a Docker Hub image that accumulated over 100,000 pulls by the time the breach was discovered. The attack used valid credentials in customer accounts, not a vulnerability in AWS itself.
Another user reported being billed $15,000 USD for an unused AWS account that was hacked. AWS typically offers partial refunds for these incidents, but only after extensive documentation and appeals.
The $800 Forgotten EC2 Instance: Three Weeks of Idle Compute
One developer left an EC2 instance running for three weeks after finishing a proof of concept. The instance was doing nothing, sitting idle at less than 5 percent CPU utilization. The bill arrived for $800.
This story, documented on DEV Community, illustrates the most common type of cloud billing horror: not catastrophic failures or sophisticated attacks, but simple human forgetfulness combined with default cloud behavior that never stops charging.
The $3,000 EKS Cluster: Testing That Never Stopped
One team spun up an Amazon EKS cluster for testing and forgot to shut it down. Two weeks later, the bill crossed $3,000. The cluster was not serving traffic, not running applications, not storing data. It was simply existing, consuming compute resources, and generating charges every hour of every day.
According to cloud cost optimization analysis, idle resources like forgotten EKS clusters, stopped but still billing RDS instances, and unattached EBS volumes are the second most common cause of unexpected AWS bills in 2026.
The Hidden Cost Multiplier: NAT Gateway's Triple Charge
While horror stories about forgotten instances grab headlines, one of the most insidious cost traps in AWS infrastructure is the Network Address Translation (NAT) Gateway. It appears innocuous in the pricing documentation but has destroyed more cloud budgets through hidden complexity than almost any other service.
The Advertised Price vs. The Real Price
AWS advertises NAT Gateway pricing as $0.045 per hour (roughly $33 per month) plus $0.045 per GB of data processing. Most engineers see these numbers and think they understand the cost model.
They are wrong.
The real cost of sending data through a NAT Gateway is $0.135 per GB, not $0.045 per GB. Here is why, according to detailed NAT Gateway cost analysis:
- $0.045/hour base charge (roughly $33/month per gateway)
- $0.045/GB data processing fee
- $0.09/GB egress charges for internet-bound traffic
That egress charge is the killer. It is not mentioned in the NAT Gateway pricing page's primary documentation. It is buried in data transfer pricing. Most engineers discover it only after their first full billing cycle, when they realize their NAT Gateway traffic costs three times what they calculated.
The Multi-AZ Multiplication Factor
AWS best practice requires one NAT Gateway per Availability Zone for high availability. If you follow AWS architecture recommendations and deploy across three AZs, you are now paying:
- 3x base charges = $99/month minimum
- 3x data processing fees
- 3x egress charges
Before you process a single gigabyte of actual application traffic, you are paying $99 per month just for the infrastructure to exist. Process 1TB of data per month across all three gateways and you add another $405 in processing and egress fees, bringing your total NAT Gateway cost to roughly $500/month.
The Empty Sandbox Account That Costs $300/Month
AWS Control Tower and AWS Organizations encourage creating sandbox accounts for testing and experimentation. AWS's default VPC creation wizard recommends NAT Gateways for internet access from private subnets.
Follow these recommendations and you can easily end up with sandbox accounts that have no workloads, no traffic, no purpose, but still cost $300 per month in NAT Gateway charges across multiple regions and availability zones.
As documented in AWS NAT Gateway cost optimization strategies, the base hourly charge continues regardless of whether any data passes through the gateway. An empty account with recommended VPC architecture can easily rack up hundreds of dollars per month in NAT Gateway fees alone.
The S3 and DynamoDB Tax You Don't Need to Pay
Every API call from a private subnet to S3 or DynamoDB goes through your NAT Gateway by default and gets charged $0.045/GB in processing fees plus $0.09/GB in egress charges.
This is completely unnecessary. VPC Gateway Endpoints for S3 and DynamoDB cost $0 and eliminate NAT Gateway charges entirely for traffic to those services. According to NAT Gateway hidden costs analysis, S3 and DynamoDB typically account for 35 to 45 percent of NAT Gateway traffic in production AWS accounts.
Installing VPC Gateway Endpoints can cut NAT Gateway costs nearly in half with zero application changes, zero downtime, and zero risk. Yet most teams don't discover this until they have already paid thousands of dollars in unnecessary charges.
The Container Image Pull Nightmare
ECS and EKS tasks running in private subnets pull container images through the NAT Gateway. A 500MB image pulled 100 times per month equals 50GB of NAT Gateway traffic.
At $0.135/GB all-in cost, that single container image costs $6.75 per month just in network charges. Multiply that across dozens of container images, hundreds of deployments, and multiple environments, and container image pulls alone can add hundreds of dollars per month to your NAT Gateway bill.
The solution is to use VPC Endpoints for ECR or to host container images in a repository accessible via VPC Endpoints. But most teams learn this only after several months of paying the container image tax.
The Scale of Cloud Waste: Industry Statistics
These horror stories are not outliers. They represent a systemic problem across the entire cloud industry.
Cloud Waste Hit 29 Percent in 2026
According to the Flexera 2026 State of the Cloud Report, cloud waste stands at 29 percent in 2026, representing the first increase in five years. At an estimated $1 trillion in total global cloud spend, that represents approximately $290 billion in wasted spending.
Of that waste, $100 to $150 billion is considered actionable waste: idle resources, orphaned workloads, and overprovisioned infrastructure that could be eliminated or rightsized without impacting any production workload.
Idle Compute and Overprovisioned Instances Drive the Waste
The two biggest contributors to cloud waste are:
- Idle compute (35 percent): Resources that are running but doing nothing, consuming electricity and generating charges without producing any value
- Overprovisioned instances (25 percent): Resources configured with far more CPU, memory, or storage than the workload actually requires
According to cloud waste benchmark data, idle or stopped resources account for 10 to 15 percent of monthly invoices, while overprovisioned compute contributes another 10 to 12 percent to total waste.
The average EC2 instance runs at 6 to 8 percent CPU utilization, demonstrating significant overprovisioning in practice.
The FinOps-Developer Gap
Only 33 percent of developers can see if their workloads are overprovisioned or underprovisioned, according to cloud cost optimization research. Meanwhile, 52 percent of engineering leaders say the gap between FinOps teams and developers drives waste.
Developers deploy infrastructure without visibility into costs. FinOps teams identify waste without authority to shut down workloads. The result is that waste gets identified but not eliminated, reports get generated but not acted on, and the bills keep climbing.
AI Workloads Make the Problem Worse
Dynamic AI usage, harder rightsizing decisions for GPU instances, and new pricing metrics for AI services are making cost visibility harder in 2026. According to FinOps best practices for 2026, 98 percent of FinOps practitioners now manage AI spend, up from 31 percent just two years ago.
GPU instances left idle after model training jobs complete are now the fastest-growing surprise on enterprise AWS bills. A single p3.2xlarge GPU instance left running costs roughly $3 per hour or $2,160 per month. Forget to shut down a training cluster with 10 GPU instances and you burn through $21,600 per month doing nothing.
Prevention Strategies That Actually Work

The good news is that these disasters are preventable. Teams that implement the following strategies consistently avoid billing surprises and maintain predictable cloud costs.
Multi-Layered Budget Alerts (Not Just One Threshold)
Setting a single budget alert at 100 percent of your monthly budget is not sufficient. By the time that alert fires, you have already exceeded your budget and the damage is done.
According to AWS budget alert best practices, effective budget monitoring requires multiple alert thresholds:
- 50 percent of monthly budget (early warning)
- 80 percent of monthly budget (urgent review required)
- 100 percent of monthly budget (immediate action)
- 120 percent of monthly budget (emergency shutdown procedures)
Configure alerts to send to entire teams, not just one person. Integrate with PagerDuty or Opsgenie so alerts cannot be ignored. Set alerts well below your actual monthly budget so you have time to investigate and respond before costs spiral out of control.
Anomaly Detection Catches What Budget Alerts Miss
Static budget alerts catch threshold breaches. Anomaly detection catches unusual patterns that stay below the threshold but indicate problems.
A GPU instance that normally costs $100 per month suddenly costs $500 per month but stays below your $10,000 monthly budget. Budget alerts will not fire, but anomaly detection will.
According to AWS cost management best practices for 2026, ML-based anomaly detection with proactive Slack or email alerts catches issues early, while forecasting tied to actual usage trends improves budget accuracy.
Enable account-level monitors with configured sensitivity thresholds to avoid alert fatigue while catching meaningful anomalies.
Multi-Factor Authentication on All Accounts
The $45,000 cryptomining hack, the $15,000 compromised account, and countless other security-driven billing disasters share one common element: compromised credentials.
Enabling multi-factor authentication (MFA) on all AWS accounts, especially root accounts and accounts with IAM permissions to launch compute resources, prevents the vast majority of credential-based attacks.
According to AWS security best practices, MFA should be mandatory for any account with the ability to launch EC2 instances, Lambda functions, or other compute resources. No exceptions, no temporary exemptions, no "I'll enable it next week." If an account can launch compute, it must have MFA.
Infrastructure as Code for Everything
Manual console-driven infrastructure changes are the primary cause of forgotten resources. You spin up an EC2 instance for testing, forget about it, and discover it three months later when the bill arrives.
Infrastructure as Code (IaC) using Terraform, CloudFormation, or Pulumi creates a permanent record of every resource you deploy. If it is in the code, it is supposed to exist. If it is not in the code, it should not exist.
Teams that use IaC exclusively can run regular audits comparing deployed resources against code-defined resources, immediately identifying orphaned infrastructure that should be deleted. Manual console changes break this audit trail and create billing blindspots.
Regular Cost Explorer Audits
AWS Cost Explorer shows exactly where your money goes: which services, which regions, which accounts. According to FinOps framework best practices, teams should review Cost Explorer trends on a regular cadence, assigning owners to optimization actions and tracking savings realized over time.
The review should include:
- Top 10 services by cost
- Month-over-month cost changes exceeding 10 percent
- Regions with unexpected charges
- Linked accounts with unusual spending patterns
Regular reviews transform Cost Explorer from a reactive tool you check after getting a surprising bill into a proactive tool you use to prevent surprising bills.
VPC Endpoints Eliminate NAT Gateway Waste

As documented earlier, VPC Gateway Endpoints for S3 and DynamoDB cost $0 and eliminate NAT Gateway charges for traffic to those services. This single change can cut NAT Gateway costs by 35 to 45 percent with zero application changes.
For other AWS services, VPC Interface Endpoints cost $0.01 per hour per endpoint (roughly $7.20 per month) plus $0.01 per GB of data processed. This is dramatically cheaper than routing traffic through NAT Gateways at $0.135 per GB all-in cost.
According to NAT Gateway cost optimization strategies, teams should deploy VPC Gateway Endpoints for S3 and DynamoDB immediately, then evaluate VPC Interface Endpoints for high-traffic services like ECR, Secrets Manager, and STS.
For very low-traffic environments, consider NAT instances instead of NAT Gateways. A t4g.nano NAT instance costs roughly $3.80 per month (compared to $33+ per month for NAT Gateway) and eliminates the per-GB data processing fee entirely. The tradeoff is that NAT instances require management, patching, and monitoring, but for sandbox and development environments the cost savings often justify the operational overhead.
Set Concurrent Execution Limits on Lambda Functions
Lambda recursive loops can generate $50,000 in charges before you wake up in the morning. The single most effective prevention strategy is setting reserved concurrent executions on Lambda functions to limit how many invocations can run simultaneously.
A Lambda function with reserved concurrent executions set to 10 can generate at most 10 invocations at the same time. If a recursive loop occurs, it will hit the limit immediately and stop, capping your potential damage at a manageable level.
AWS now provides recursive loop detection that stops invocations after 16 identical triggering events, but this protection only works for specific patterns. Setting concurrent execution limits provides defense in depth against recursive loops, runaway automation, and misconfigured triggers.
Automatic Resource Tagging and Termination Policies
Every resource should have tags that identify:
- Owner (which team or individual is responsible)
- Environment (production, staging, development, testing)
- Expiration date (when the resource should be deleted if not explicitly renewed)
According to AWS cost optimization guides, automated tools like AWS Nuke or custom Lambda functions can scan for resources with expired termination dates and shut them down automatically, preventing forgotten test environments from generating months of charges.
The key is making termination policies opt-out rather than opt-in. Resources should be deleted by default unless someone explicitly marks them as permanent. This approach prevents the most common horror story scenario: spinning up infrastructure for temporary testing and forgetting it exists.
The InMotion Cloud Alternative: Transparent, Predictable Pricing
The fundamental problem with hyperscaler cloud billing is complexity. You are not billed for what you use. You are billed for what you deploy, what you forget, what you misconfigure, and what you do not understand.
NAT Gateways charge three different fees that multiply together. Lambda functions charge for invocations, duration, and memory. SageMaker charges for notebooks, endpoints, storage, and attached EFS volumes separately. Every service has its own pricing model, its own hidden fees, its own gotchas that you learn about only after the bill arrives.
InMotion Cloud takes a different approach. Transparent pricing based on actual resource consumption. No hidden egress fees, no surprise data processing charges, no multi-layered cost multipliers that require a PhD in cloud economics to understand.
When you deploy infrastructure on InMotion Cloud, you know exactly what it costs before you deploy it. When you use resources, you are billed for what you use, not for what you forget to delete. When you need to optimize costs, you have direct access to cloud architects who help you design efficient infrastructure, not chatbots that recommend buying more reserved instances.
The hyperscalers built their pricing models to maximize revenue extraction from customers who do not have time to understand the complexity. InMotion Cloud built our pricing model to be fair, transparent, and predictable, because we believe cloud infrastructure should empower your business, not drain your budget.
Conclusion: Vigilance or Bankruptcy
Cloud billing horror stories will continue as long as cloud pricing models remain complex, opaque, and designed to maximize provider revenue rather than customer value. Every month, more teams will discover that the "flexible" and "pay-as-you-go" cloud they were promised is actually a minefield of hidden charges, recursive loops, and idle resources.
The teams that survive are those that treat cloud cost management not as an afterthought or a quarterly review, but as a continuous discipline integrated into every deployment, every architectural decision, and every line of infrastructure code.
Implement multi-layered budget alerts before you deploy production workloads. Enable anomaly detection before you get your first surprise bill. Set concurrent execution limits on Lambda functions before you experience a recursive loop. Deploy VPC Endpoints before you waste thousands of dollars routing S3 traffic through NAT Gateways.
The horror stories documented here are real. The bills are real. The bankrupted startups and fired CTOs are real. Learn from their mistakes before you repeat them.
Or choose a cloud provider that believes billing should be transparent, predictable, and fair by design.
Sources:
- AWS Billing Nightmares: Real Stories
- Recursive AWS Lambda Horror Stories
- Unexpected SageMaker Charges After Deletion
- $45,000 AWS Crypto-Mining Hack
- Why Your AWS Bill Just Jumped: 8 Root Causes (2026)
- AWS NAT Gateway Pricing: Cut Costs 50-90%
- AWS NAT Gateway Cost Optimization Strategies in 2026
- AWS NAT Gateway Pricing Guide (2026)
- The State of Cloud Waste 2026
- The Cloud Waste Problem: How to Stop Overprovisioning
- Cloud Cost Optimization 2026: Visibility to Automation
- AWS Cost Management in 2026: Tools, KPIs, Pitfalls
- How to Use AWS Billing Alerts and Budgets
- FinOps Best Practices: 12 Battle-Tested Tips for 2026
- How to Identify Idle & Underutilized AWS Resources (2026)
Sean Perryman
Technical Account Engineer
Sean Perryman is a Technical Account Engineer at InMotion Cloud, where he helps organizations design, deploy, migrate, and support mission-critical workloads in the cloud. Working closely with customers throughout the entire lifecycle of their environments, he specializes in solving complex infrastructure challenges while ensuring platforms remain secure, reliable, and scalable.