1. Paste consumed capacity
2. What it found
Modelled monthly cost (730 hours)
| Capacity mode | Per month |
|---|
Findings
| Rule | Level | Detail |
|---|
Prefer a CLI, or want a CI check?
Same logic, zero dependencies, one command — reads a file or stdin:
node cli.mjs analyze metrics.csv cat metrics.csv | node cli.mjs analyze - --period 300 --current-rcu 400 --current-wcu 100 node cli.mjs analyze metrics.csv --fail-on warn # exit 1 when a switch would save 20% or more node cli.mjs analyze metrics.csv --json --prices my-prices.json
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: DynamoDB on-demand vs provisioned: which is cheaper.
What's recognised
| Input | Handling |
|---|
Prices are illustrative and dated; edit them with --prices in the CLI. Free tier, reserved capacity, Standard-IA, other regions, global tables and backups are not modelled.
Common questions
Does this connect to my AWS account?
No. It reads the metric rows you paste and never contacts AWS. It cannot see your real invoice, free tier, reserved capacity, table class, global tables or backups, so every dollar figure is the rows you pasted times list prices you can edit.
How do I get the numbers?
In CloudWatch, graph ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits for the table with statistic Sum and a one-hour period, or run aws cloudwatch get-metric-statistics for each and put the Sum values in three columns: timestamp, read, write. A week that includes your busiest day gives a far better answer than an hour.
Why is the break-even about 29%?
On-demand charges per request; provisioned charges per unit-hour whether you use it or not. At list prices one provisioned unit-hour costs 29% of what the same unit-hour of fully used traffic costs on-demand, so provisioned wins when you keep capacity busier than about 29% on average. Autoscaling targets 70%, which is why steady tables are usually cheaper provisioned.
What can this not see?
Anything shorter than the period. Traffic is treated as flat inside each hour, so a five-minute burst is invisible; DynamoDB burst capacity hides some of that and the rest throttles. Autoscaling reacts in minutes, so the tool flags periods where traffic rose faster than the previous capacity allowed for. Treat the result as a screen, then confirm on a non-critical table.
Is my data uploaded anywhere?
No. The browser page analyses the text in your own browser and never sends it anywhere. The CLI reads a local file or stdin and makes no network call.