Free AWS Cost Reduction: 8 Tools & 12 Commands
No paid software. No enterprise contracts. Just free tools and CLI commands you can run in the next 10 minutes to find and eliminate AWS waste.
Why free tools are enough for most teams
The AWS cost optimization industry wants you to believe you need a $45,000/year platform to reduce your bill. You do not.
The majority of AWS waste comes from a few predictable patterns: orphaned EBS volumes, oversized RDS instances, NAT Gateway data processing fees, and CloudWatch logs with no retention policy. You can find all of these with the AWS CLI, which is free, and fix them with commands you can copy from this page.
In real production scans, these patterns account for $284/mo to $6,496/mo in recoverable waste per account. That is money you can recover today without buying anything.
AWS also provides several free native tools that most teams underuse. Cost Explorer, Cost Anomaly Detection, and Compute Optimizer are all free and built into every account. The problem is not tool availability. It is knowing which commands to run and where to look.
This guide gives you both.
8 free AWS cost reduction tools
Five from AWS (built into every account) and three free third-party tools. All genuinely free, not "free trial" or "contact sales for pricing."
AWS Native (built in)
Free third-party tools
What each free tool actually covers
| Tool | Finds idle resources | Fix commands | Anomaly alerts | Slack delivery |
|---|---|---|---|---|
| Cost Explorer | No | No | No | No |
| Cost Anomaly Detection | No | No | Yes | No (SNS/email) |
| AWS Budgets | No | No | Threshold only | No |
| Compute Optimizer | EC2 only | No | No | No |
| Cost Optimization Hub | Partial | No | No | No |
| CostPatrol | 30+ services | Yes | Yes (6hr) | Yes |
| Infracost | No (pre-deploy) | No | No | No |
| Komiser | Inventory only | No | No | No |
Or skip the manual commands and scan your whole account in 2 minutes.
Get free scan12 CLI commands to cut your AWS bill right now
Copy-paste these into your terminal. Each one finds a specific type of waste. Ordered by typical dollar impact.
Find orphaned EBS volumes
Unattached volumes cost $0.08-0.10/GB/month and serve no purpose. Every AWS account has them.
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query "Volumes[].{ID:VolumeId,Size:Size,Type:VolumeType,Created:CreateTime}" \
--output tableFix: Snapshot anything you might need (aws ec2 create-snapshot), then delete (aws ec2 delete-volume).
Real result: $284/mo from one region. One volume was unattached for 1,790 days.
Find oversized RDS instances
Check average CPU over the past 14 days. Under 10% means you are paying for capacity you do not use.
aws rds describe-db-instances \
--query "DBInstances[].{ID:DBInstanceIdentifier,Class:DBInstanceClass,Engine:Engine,MultiAZ:MultiAZ}" \
--output tableThen check CPU for each instance:
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS --metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=YOUR_INSTANCE \
--start-time $(date -u -v-14d +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 86400 --statistics Average --output tableFix: Drop one or two instance size classes. Disable Multi-AZ for non-production workloads.
Real result: $6,496/mo saved by consolidating 17 Aurora clusters.
Check NAT Gateway data processing
NAT Gateway charges $0.045/GB for data processing. S3 and DynamoDB traffic can route through free VPC Gateway Endpoints instead.
aws ec2 describe-nat-gateways \
--query "NatGateways[?State=='available'].{ID:NatGatewayId,VPC:VpcId,Subnet:SubnetId}" \
--output tableFix: Add VPC Gateway Endpoints for S3 and DynamoDB in every VPC. They are free, unlimited bandwidth, and reduce latency.
Real result: Largest single finding in a 7-region scan.
Find gp2 volumes to migrate to gp3
gp3 is 20% cheaper than gp2 with better baseline performance. Migration is live, zero downtime.
aws ec2 describe-volumes \
--filters Name=volume-type,Values=gp2 \
--query "length(Volumes[])" --output textFix: aws ec2 modify-volume --volume-id vol-xxx --volume-type gp3. No detach required.
Find CloudWatch log groups with no retention
Default retention is "never expire." Every log group without a policy grows indefinitely.
aws logs describe-log-groups \
--query "logGroups[?!retentionInDays].{Name:logGroupName,StoredMB:to_string(storedBytes)}" \
--output tableFix: aws logs put-retention-policy --log-group-name NAME --retention-in-days 30
Find unused Elastic IPs
Since Feb 2024, all public IPv4 addresses cost $0.005/hour. Unassociated ones are pure waste.
aws ec2 describe-addresses \
--query "Addresses[?!InstanceId && !NetworkInterfaceId].{IP:PublicIp,AllocID:AllocationId}" \
--output tableFix: aws ec2 release-address --allocation-id eipalloc-xxx
Find stopped EC2 instances
Stopped instances still pay for their EBS volumes. Nobody notices because the instance is not running.
aws ec2 describe-instances \
--filters Name=instance-state-name,Values=stopped \
--query "Reservations[].Instances[].{ID:InstanceId,Type:InstanceType,LaunchTime:LaunchTime}" \
--output tableFix: Create AMI (aws ec2 create-image), then terminate. Relaunch from AMI if needed later.
Find idle load balancers
ALBs and NLBs cost $16.20/month minimum even with zero traffic.
aws elbv2 describe-load-balancers \
--query "LoadBalancers[].{Name:LoadBalancerName,ARN:LoadBalancerArn,Type:Type,Created:CreatedTime}" \
--output tableCheck: Query RequestCount (ALB) or ActiveFlowCount (NLB) in CloudWatch over 14 days. Zero means safe to delete.
Find old EBS snapshots
Automated backups create daily snapshots. Without retention policies, they accumulate for years.
aws ec2 describe-snapshots --owner-ids self \
--query "length(Snapshots[?StartTime<='2025-12-01'])" \
--output textFix: Cross-reference with active volumes. Delete snapshots where the source volume no longer exists.
Find S3 buckets without lifecycle rules
S3 Standard costs $0.023/GB. Infrequent Access is $0.0125/GB. Glacier is $0.004/GB. Without lifecycle rules, everything stays in Standard forever.
aws s3api list-buckets --query "Buckets[].Name" --output text | \
tr '\t' '\n' | while read b; do \
rules=$(aws s3api get-bucket-lifecycle-configuration \
--bucket "$b" 2>/dev/null | grep -c Rule); \
[ "$rules" = "0" ] && echo "No lifecycle: $b"; \
doneFix: Enable S3 Intelligent-Tiering for automatic tier transitions, or add lifecycle rules to move old objects to IA/Glacier.
Find Lambda functions with excess memory
Lambda pricing is per-ms times memory allocated. A function allocated 1024 MB but using 128 MB costs 8x more than necessary.
aws lambda list-functions \
--query "Functions[].{Name:FunctionName,Memory:MemorySize,Runtime:Runtime}" \
--output tableCheck: Compare MemorySize against MaxMemoryUsed in CloudWatch Logs. AWS Compute Optimizer also provides Lambda recommendations for free.
Find unused security groups
Does not save money directly, but unused security groups indicate decommissioned resources that may still have billable components (EBS, EIPs, snapshots).
aws ec2 describe-security-groups \
--query "SecurityGroups[?GroupName!='default'].GroupId" \
--output text | tr '\t' '\n' | while read sg; do \
enis=$(aws ec2 describe-network-interfaces \
--filters Name=group-id,Values="$sg" \
--query "length(NetworkInterfaces)" --output text); \
[ "$enis" = "0" ] && echo "Unused: $sg"; \
doneInvestigate: Each unused security group likely had resources attached. Check if those resources left behind EBS volumes, snapshots, or Elastic IPs.
When free tools are not enough
Free tools and manual commands work. But they have three gaps:
You have to remember to run them. Manual audits catch waste once. Next month, new waste accumulates and nobody runs the commands again. Automated daily scanning catches new waste within 24 hours.
You have to run them in every region. Most accounts have resources in 2-5 regions. Running 12 commands across 5 regions is 60 commands. Miss one region and you miss waste.
You have to interpret the results. The CLI tells you a volume is unattached. It does not tell you it has been unattached for 1,790 days and is costing $50/month. Context and dollar amounts change whether a finding gets fixed or ignored.
CostPatrol automates all of this: runs 111 rules daily across all regions, calculates dollar impact, generates fix commands, and delivers everything to Slack. Free for accounts under $5K/month. The commands on this page are exactly what CostPatrol runs internally, packaged with scheduling, multi-region coverage, and team-friendly delivery.
For a full breakdown of paid options, see our comparison of 12 AWS cost optimization tools or the complete optimization guide.
Frequently asked questions
Can I reduce my AWS bill without paying for any tools?
Yes. The AWS CLI is free and can identify most common waste: orphaned EBS volumes, unused Elastic IPs, stopped EC2 instances, gp2 volumes, and CloudWatch log groups with no retention. AWS Cost Explorer is also free. For automated scanning, CostPatrol is free for accounts under $5K/month and includes all optimization rules.
What free AWS tools help with cost reduction?
AWS provides: Cost Explorer (spending analysis), Budgets (1 free action budget, 2 free report budgets), Cost Anomaly Detection (ML-powered alerts), Compute Optimizer (EC2 right-sizing), and Cost Optimization Hub (aggregated recommendations). Third-party free options: CostPatrol (free under $5K/month), Infracost (free Terraform CLI), and Komiser (free open-source inventory).
How much waste does a typical AWS account have?
Gartner estimates 27% average cloud waste. In production scans, we find 20-35% recoverable waste. Common findings: $50-500/month in orphaned EBS volumes, $100-800/month in NAT Gateway fees, and $200-6,500/month in oversized or idle RDS instances.
What is the single fastest free way to reduce my AWS bill?
Run: aws ec2 describe-volumes --filters Name=status,Values=available --output table. This lists all unattached EBS volumes. Snapshot anything you might need, then delete. In one scan, a single volume was burning $50/month for 1,790 days ($2,950 total).
Is AWS Trusted Advisor free for cost optimization?
No. The free tier only covers service quotas and basic security. Cost optimization checks require Business Support at $29/month per account minimum. For 5 accounts, that is $145/month for generic recommendations without fix commands or Slack delivery.
How do I find idle resources without paying for a tool?
Use the AWS CLI. The 12 commands in this guide cover the most common waste patterns: orphaned EBS volumes, unused Elastic IPs, stopped EC2 instances, gp2 volumes, CloudWatch logs without retention, idle load balancers, NAT Gateways, old snapshots, S3 without lifecycle rules, over-allocated Lambda, and unused security groups.
Related
Automate everything on this page
CostPatrol runs these checks daily. 111 rules. Free under $5K/mo. Full findings and fix commands from $99/mo.