How to cut AWS cost waste
Most AWS overspend is not a big architectural mistake — it is a long tail of resources that bill by the hour whether or not anything uses them. This guide walks the practical passes that reclaim the most: find idle NAT gateways, unattached Elastic IPs and EBS, and idle load balancers; modernise gp2 to gp3; right-size EC2 and RDS from real utilisation; commit steady usage with Savings Plans; tag for cost ownership; and set an AWS Budgets alarm so new waste pages someone. Real AWS CLI, console, and Terraform steps throughout.
Updated 2026-07-20 · ~9 minute read
Why the waste is invisible until you look for it
None of this waste throws an error. An idle NAT gateway still routes; an unattached EBS volume still exists; a half-used RDS instance still answers. They simply keep accruing hourly charges no one is watching, and the Cost Explorer top line only tells you the total went up, not which resource did it. The reliable way to find it is a per-resource inventory joined to CloudWatch utilisation: enumerate what exists, ask what each thing actually did over the last one-to-four weeks, and act on the resources that did nothing. That is exactly the pass the steps below walk, and the same pass an automated cost audit runs for you.
The newer waste: idle AI and inference spend
AI workloads add a fresh category of always-on spend that the classic cost tools miss. A SageMaker endpoint bills 24/7 whether or not anyone invokes it; a Bedrock provisioned- throughput commitment bills hourly with no usage floor; a retrieval-augmented-generation knowledge base on a serverless vector store carries a minimum-capacity charge. CloudArq's AI-workload lens checks for exactly these — idle_sagemaker_endpoint, bedrock_provisioned_throughput_burn, and rag_vector_store_cost — from control-plane metadata only. See the AI-workload lens for the full picture.
The CloudArq cost checks that catch this
CloudArq runs the inventory-plus-utilisation pass for you and flags each waste pattern automatically — read-only, with an impact estimate computed per resource from live AWS metadata and the exact remediation steps attached to every finding. These are 12 of the 192 checks CloudArq runs against an AWS account; there is no precomputed "total saved" — the estimate is always your account's real numbers.
Each finding ships the copy-paste CLI / Terraform fix and a per-resource impact estimate — CloudArq is read-only and never changes anything itself.
Frequently asked
- 01Where does most AWS cost waste actually hide?
- In resources that bill by the hour whether or not anything uses them: idle NAT gateways, unattached Elastic IPs, unattached or oversized EBS volumes, stopped EC2 instances still paying for their disks, idle load balancers, and RDS or ElastiCache clusters with no traffic. None of these throw an error — they just quietly accrue on the bill — which is why an inventory-and-metrics pass finds more than staring at the Cost Explorer top line.
- 02Is switching gp2 volumes to gp3 safe, and worth it?
- gp3 is the newer general-purpose SSD family that decouples IOPS and throughput from capacity, and AWS documents it as lower cost per GB than gp2 at the same baseline performance. The change is an in-place modify-volume with no downtime and no snapshot. Verify your workload does not depend on gp2 burst behaviour, set an explicit IOPS/throughput baseline, and modify during a low-traffic window.
- 03How do I right-size without guessing?
- Use real utilisation, not intuition. AWS Compute Optimizer analyses CloudWatch history and recommends EC2, EBS, Lambda, and RDS resize targets; enable it and read the recommendations before you touch anything. For a quick manual check, pull 14 days of CPUUtilization from CloudWatch — sustained low CPU and memory is the signal to step down an instance family or size.
- 04Savings Plans or Reserved Instances — which should I buy?
- Both trade a one- or three-year commitment for a lower rate on steady-state usage. Compute Savings Plans are the most flexible (they apply across instance family, size, region, and even Fargate/Lambda); Reserved Instances lock to more specific attributes. Buy commitments only for the baseline you are confident you will keep running for the term, and keep the rest on-demand. Check your existing commitments for underutilisation before buying more.
- 05How do I stop new waste from creeping back?
- Two guardrails. First, cost-allocation tags: tag every resource with an owner and a cost centre so waste has a name attached and untagged spend is visible. Second, AWS Budgets: set a monthly budget with alert thresholds so a cost spike pages someone the day it happens, not at month-end. Budgets is alerting, not a hard stop — it warns; it does not cap your account.
- 06Does CloudArq turn things off to save money?
- No. CloudArq is a read-only audit — it connects through a read-only IAM role with an ExternalId, never stores your credentials or data, and never auto-fixes anything. It detects idle, oversized, unattached, and uncommitted spend, estimates the impact per resource from live AWS metadata, and hands you the exact CLI or Terraform to remediate. You decide what to change and apply it yourself. There is no spend cap — detection plus the fix, never a hard stop.