Cloud Cost Analyzer evaluates DynamoDB tables for the on-demand versus provisioned decision, over-provisioned throughput, missing TTL, and unused indexes, and estimates what each change would save.
$ cca scan --provider awsRead-only, runs in about 5 minutes. Free tier, no credit card.
On-demand is cheaper for spiky or unpredictable traffic and for new tables where you cannot forecast load. For steady, predictable workloads, provisioned capacity with auto-scaling (or reserved capacity) is usually much cheaper per request. The right mode depends on the traffic shape.
A time-to-live attribute lets DynamoDB automatically delete expired items at no extra cost, keeping storage and index sizes in check instead of letting old data accumulate and grow the bill.
Yes. Every GSI stores a copy of the projected attributes and, in provisioned mode, carries its own throughput. An index that is never queried is pure cost, so drop indexes you do not use.
Idle gateways and avoidable data-processing charges, one per AZ.
Over-provisioned classes, non-Graviton, and Multi-AZ on non-prod.
Orphaned volumes, old snapshots, and gp2 you never moved to gp3.
ALBs and NLBs with no targets or near-zero traffic, still billing.
Cold data sitting in Standard with no lifecycle policy.
Idle and oversized instances, previous-gen types, 24/7 dev boxes.
Oversized instances, Serverless v1, and I/O-Optimized breakevens.
Idle cache clusters and oversized, non-Graviton nodes.
Idle distributions and price classes wider than your audience.
Over-provisioned memory and x86 functions that could be arm64.