cloudcost-doctor
Find cloud waste before you deploy it. Reads your Terraform / CloudFormation / CDK files and flags cost anti-patterns. No AWS credentials, no dependencies, works offline in <1 second.
When to use
- Before running
terraform apply/aws cloudformation deploy - During code review of infrastructure PRs
- When asked "are we wasting money on AWS?"
- As a pre-commit / CI check for IaC
How to run
# Audit a directory of IaC files
python3 scripts/cli.py audit <path>
# Single file
python3 scripts/cli.py audit main.tf
# JSON output for CI/CD
python3 scripts/cli.py audit <path> --json
# List all rules
python3 scripts/cli.py describe
What it checks (50+ rules across 8 categories)
EC2 — Compute
EC2.01Old instance generation (t2→t3, m4→m6i, c4→c6i: ~20% cheaper)EC2.02Overprovisioned instance for likely dev/staging (8xlarge+ with no prod tag)EC2.03No shutdown schedule for non-prod (add schedule or use Spot)EC2.04On-demand for batch/stateless workloads (use Spot: 70-90% cheaper)EC2.05No hibernate/stop on termination for dev instancesEC2.06Burstable instance without CloudWatch CPU credit monitoringEC2.07EBS-optimized flag on instance types that include it free (dead config)EC2.08Multiple ENIs without need (adds cost on some types)EC2.09Placement group for non-HPC workloadEC2.10Dedicated host tenancy without licensing justificationEC2.11EIP attached to stopped instance ($3.60/mo)EC2.12No instance profile / IAM role (security + operational debt)
EBS — Block Storage
EBS.01gp2 volume — use gp3 (20% cheaper, better baseline IOPS)EBS.02io1/io2 Block Storage with no measured IOPS needEBS.03Overprovisioned volume size (>1TB without lifecycle)EBS.04Snapshot without delete-after-N-daysEBS.05EFS without lifecycle to Infrequent Access
S3 — Object Storage
S3.01Bucket with no lifecycle policy (logs grow forever in Standard)S3.02Standard storage for logs/backups (→ IA/Glacier)S3.03Versioning on without lifecycle (old versions accumulate)S3.04No Intelligent-Tiering consideration for unknown access patternsS3.05Cross-region replication without explicit DR requirementS3.06Requester-pays without metering
RDS — Databases
RDS.01Multi-AZ for dev/staging (doubles cost)RDS.02RDS gp2 storage — use gp3RDS.03Provisioned IOPS (io1) on RDS without measured needRDS.04Backup retention >7 days for non-prodRDS.05T2/T3 instance — check if T4g available (ARM, cheaper)RDS.06DynamoDB provisioned capacity without auto-scalingRDS.07DynamoDB without on-demand for low/unknown traffic
NAT — Networking
NAT.01NAT Gateway in non-prod (use VPC endpoints: saves $32/mo + data)NAT.02Multiple NAT Gateways in one AZNAT.03Classic Load Balancer (deprecated, switch to ALB/NLB)NAT.04Elastic IP not associated ($3.60/mo each)NAT.05VPC endpoint not used for S3/DynamoDB (paying NAT data fees)NAT.06Public IP on EC2 that doesn't need it
TAG — Governance
TAG.01MissingOwnertagTAG.02MissingEnvironmenttag (blocks cost allocation)TAG.03MissingCostCenter/ProjecttagTAG.04Inconsistent tag casing (envvsEnvironment)TAG.05No budget alert / cost anomaly detection configuredTAG.06Resources using deprecated tag keys
IAM — Security (cost-adjacent)
IAM.01Overly permissive*resource policyIAM.02IAM policy withAction: *andResource: *IAM.03Hardcoded credentials in IaC (security + rotation cost)IAM.04KMS key without rotation enabled
CW — CloudWatch / Logging
CW.01Log group with no retention (infinite growth)CW.02Detailed monitoring enabled for non-prodCW.03CloudWatch Logs Insights without savings planCW.04High-resolution custom metrics where standard suffices
Reading the report
Each finding shows:
- Severity: HIGH (clear waste, easy fix), MED (likely waste), LOW (governance hygiene)
- Rule ID: e.g.
EC2.01 - File:line: exact location in your IaC
- Estimated savings: monthly $ range where calculable
- Fix hint: one-line action to resolve
Pro tier
The free OSS scanner audits IaC files. The Pro tier (license-gated) adds:
- Live AWS account scan (audit running infra, not just code)
- Automated remediation (generates the fixing Terraform)
- Cost trend dashboards
- Slack/Teams alerting
Upgrade at https://takeaseatventure.com/pro
Limitations
- Reads IaC files as parsed text (regex-based) — fast and universal, but cannot resolve module references or dynamic expressions. For those, review the flagged resource manually.
- AWS-focused. GCP/Azure support is planned.
- Savings estimates are approximate (based on public AWS pricing, us-east-1).
Pro tips
- Run in CI to catch waste before merge:
python3 scripts/cli.py audit ./infra --json - The
describecommand lists every rule with its fix hint — useful for onboarding. - Tagging findings (TAG.*) are prerequisites for any FinOps program — fix these first.