A mostly-read API peaks at 3,000 requests/sec. Right now every request hits the database directly, it runs in a single AZ, and backups are off. It misses the availability and durability targets and the database is saturated.
Targets: p99 ≤ 150 ms, 99.9% availability, standard durability, under $900/mo.
The fixes are exactly what you'd reach for on a read-heavy service: put an ElastiCache tier in front of the database to shed read load, run the app across two AZs, make the database Multi-AZ (a single instance can't hit 99.9%), and turn on backups. Then right-size so you're not overpaying.