1. Paste instances and CloudWatch numbers
Approximate us-east-1 on-demand $/hour per class (editable JSON)
Single-AZ, MySQL/PostgreSQL-style list prices, approximate and dated; Aurora, Oracle, SQL Server and your discounts differ. Edit a number, or add a class as {"price": 0.4, "vcpu": 2, "memGib": 16}.
2. What it found
Per instance
| Instance | Class | Multi-AZ | CPU p95 | Free mem (GiB) | Verdict | Recommended | $/month now | Saves/month |
|---|
Findings
| Rule | Level | Detail |
|---|
Commands
Downtime: changing the class restarts the instance. A single-AZ instance is unavailable for several minutes; a Multi-AZ instance fails over in about one to two minutes. Without --apply-immediately the change waits for the next maintenance window. Try it on a snapshot restore first.
Prefer a CLI, or want a CI check?
Same logic, zero dependencies, one command — reads files or stdin:
aws rds describe-db-instances --output json > rds.json node cli.mjs analyze rds.json metrics.csv --commands node cli.mjs analyze instances.csv --cpu-target 60 --mem-reserve 25 --prices my-prices.json node cli.mjs analyze instances.csv --fail-on warn # exit 1 when over-provisioned or under pressure node cli.mjs classes # print the embedded price table node cli.mjs analyze instances.csv --json
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: how to right-size an RDS instance.
What's recognised
| Input | Handling |
|---|
Covered classes: db.t3, t4g, m5, m6i, m6g, m7g, r5, r6i, r6g, r7g. Reserved instances, storage, I/O, backups and data transfer are not modelled.
Common questions
Does this connect to my AWS account?
No. It reads the text you paste and never contacts AWS or any server. It cannot see your real invoice, reserved instances, Savings Plans, storage or I/O charges, so every dollar figure is the instance list price you can edit, times 730 hours.
How long should the CloudWatch window be?
Long enough to include your busiest period: at least two weeks, and a month-end or batch cycle if you have one. Use the p95 of CPUUtilization, the minimum of FreeableMemory and the p95 of DatabaseConnections. A quiet week will recommend a class that falls over on payroll day.
Is low freeable memory always a problem?
No. MySQL and PostgreSQL use free memory as cache, so a low minimum is a prompt to check SwapUsage and read latency, not proof of trouble. The tool keeps a 20% freeable reserve on the new class at your observed peak, and you can change it.
Will changing the instance class cause downtime?
Yes. Modifying the class restarts the instance. A single-AZ instance is unavailable for several minutes and a Multi-AZ instance fails over, usually in one to two minutes. Without --apply-immediately the change waits for the next maintenance window; with it, the restart starts now.
Is my pasted text uploaded anywhere?
No. The browser page analyses the text in your own browser and never sends it anywhere. The CLI reads local files or stdin and makes no network call.