Schedule RDS upgrades/downgrades

I have a project that sends notifications to various services. Users manage their subscriptions 24 hours a day, but we need a stronger MySQL RDS instance during the week (t3.xlarge), specifically Tue-Thu because that's when most of our notifications end up going out.

To keep costs low (we already used reserved instances), my thinking is to operate a t3.medium from Fri-Mon and perform instance size changes on an automated schedule (downgrade on Fri and upgrade on Mon). This would bring us closer to the "pay what we need, when we need it". I see Amazon has an Instance Scheduler tool but it looks like it's mostly for stop/start commands, and less about upgrades.

Is a simple CLI script running on a schedule the best way to accomplish this, or are there more official/better ways to achieve this?

Further research has shown me that Aurora has serverless which has autoscaling built in. However my application runs on MySQL v8 and Aurora is only compatible with MySQL v5.7 atm.


This isn't an answer as such, but it's too long for a comment. If you can edit your question to address these questions I'll probably delete the answer later.

TLDR: The best option may be to optimize your queries to reduce database load and pay for the peak database size you need until Aurora versions catch up. Hopefully someone else has a better idea for you.

Longer version I've been using RDS Oracle recently, and it's really slow to stop and start. RDS MySQL and RDS Oracle may behave differently of course. Starting a stopped database can take 15 - 45 minutes - sometimes it does upgrades, reboots, etc. I generally don't think this is a great option and it is likely to result in downtime if you don't architect around having your database unavailable, such as by having two databases. Changing DB size also means you don't get the benefits of your reserved instance all the time.

I suspect instance scheduler is for EC2 only, not RDS. It's pretty trivial to achieve this though, a simple lambda function triggered by CloudWatch events / EventBridge. Still, not a great idea IMHO.

Could a read replica help? Obviously that only helps with read queries, and writes will be rejected or lost. Your application might be able to be modified to support this.

Maybe you could re-architect your application to use something more easily scalable, such as DynamoDB? That's a pretty huge change though.