I've been doing some AWS optimization recently. For my setup, which heavily uses a lot of short job based queue patterns, I've had a lot of success with the following:
1) Moving to spot instances where possible 2) Autoscaling rules 3) Reserved instances where possible 4) Moving everything to AWS Graviton based instances
I cut the bill by ~70%.