There’s a couple of things to understand:
Reserved Instances are just a billing construct. AWS will try to match the purchased reserved instances against your running instances at the billing time. I.e. you don’t assign RIs to your actual EC2 instances, you get the discount automatically.
Reserved Instances capacity doesn’t have to match the running instances. The price for
t2.mediumis the same as for 2x
t2.nano. So if you purchase 32x t2.nano it would fully cover the price of 1x t2.xlarge. From the billing perspective it’s the same.
On the other hand t2.anything won’t be applied against m5.anything – they are a different instance class. You can buy 2x m5.large instead of 1x m5.xlarge reserved instance – same thing from a billing perspective.
Now why does it recommend 54x t2.nano? Probably it found out that your actual needs are somewhere between
t2.2xlarge– and it’s best expressed as 54x t2.nano.
Depending on your application you may or may not be able to spread the load over a number of smaller instances. I wouldn’t go to 54x t2.nano but perhaps 3x t2.large could be a good option? You can then set up auto-scaling to remove some of the nodes during quiet times and save. And even use Spot Instances and save even more. However for both ASG and Spot you’ll need some automation in place.
For a much greater flexibility look at AWS Saving Plans – with that you’ll be able to migrate your application to newer instance types, mix and match instance types, etc. With Reserved Instances you’re locked to a particular instance class in a particular region. With Saving Plans you only commit to a certain spend per month and it’s up to you how you use it.
Hope that helps 🙂