I’m working on a disaster-recovery strategy at my day job, and AWS is one of the platforms I’m considering: the thinking is to have some capacity available on AWS, perhaps just a database and a couple of EC2 instances, ready to take some traffic if our main provider has serious and continued availability issues.
Cost is, as always, a big factor in the equation: we’re essentially building ourselves some insurance that we’ll stay up despite major problems, and like with all insurances we want to pay the smallest possible premium. Looking at the AWS pricing model, reserved instances immediately look like a way to both ensure capacity and get cheaper prices with respect to on-demand instances.
AWS reserved instances come in 1-year and 3-year types: the difference is in how much you pay upfront vs. how much you pay each month.
The question that comes to mind is:
should we buy 3-yr or 1-yr reserved instances?
To put it differently, what’s the chance that buying a 3-yr reserved instance today will give us a better deal, price-wise, than a 1-yr reserved instance?
A simple prediction model
To answer this question I’ve tried to predict the date of the next AWS price reduction for EC2 reserved instances. My source data for the previous EC2 price reductions is the official AWS blog, from which I’ve extracted the following 12 dates:
To get an estimation of the next price reduction date, I converted the above values to unix epoch timestamps, and I then used Wolfram Alpha to find an equation which could give me the date of the 13th reduction. Here’s a couple of links if you want to try it for yourself:
The linear fit projects a straight line of the form y = 2.27002×10^7 x + 1.22852×10^9, which estimates the date of the next AWS price reduction on 2018-04-13 (that is 10 months from the time of this writing).
The quadratic fit projects a curve of the form y = 1.21418×10^9 + 2.8846×10^7 x – 472747×x^2, which estimates an even closer date of 2017-10-29 (only 5 months from the time of this writing).
I’m not pretending that this simple exercise gives an accurate prediction, but the dates above, and especially the intervals between 2 consecutive price reductions, are an important element in my decision of 1-yr vs. 3-yr purchase.
A real example
Let’s take as an example the purchase of one m4.4xlarge reserved instance in the US East region: we’re assuming that the purchase happens today, and we’re operating under the hypothesis that the next price reduction is in 10 months from now.
I’m choosing a m4.4xlarge because you should begin minimizing the prices of the most expensive instances; the price differentials on t2.nano instances might not be worth the time it takes you to make the decision.
Here’s a table summarizing the costs:
|On Demand||1yr No Upfront||1yr Partial Upfront||1yr All Upfront||3yr No Upfront||3yr Partial Upfront||3yr All Upfront|
|Cost for 10 months||6000.00||3617.90||3789.80||4052.00||2522.90||5373.00||7905.00|
|Against best case||1948.00||289.48||82.36||0.00||5030.44||4357.80||3853.00|
And here’s a link to play with the spreadsheet for your own instances.
You can see that, if you believe that a price reduction will come within 10-12 months from now, the best option is the 1-year no upfront RI: you don’t have to front up all of the capital, and there are “only” 2 months wasted.
You can also see that it makes absolutely no sense to purchase 3-years RI, with our without upfront payments: in a 3-years time span you can expect at least 2 price reductions, making your investment a much worse idea than it looked at the beginning.
Convertible instances are a poor mitigation to the problem: there’s no guarantee that you will find a more powerful instance type costing about the same as your convertible reservation, so you might get stuck with your convertible reservation until the end of the 3-years contract.
If you think that you could purchase a reservation and then sell it on the RI instance marketplace, then think twice: why would someone purchase your reservation after a price reduction, given that they can get the same from AWS for less money?
Does it make sense to purchase AWS reserved instances?
Reserved instances introduce one more complexity in the already much too complex AWS price model; regular price reductions make reserved instances a worse deal than it might look like, and negate the predictability you think you’re getting.
- there are a few good reasons to buy 1-year reservations, for example establishing a baseline capacity: the risk of price reductions is real, but you can mitigate it if you time your purchase just after a reduction
- there are no good reasons to buy 3-years reservations: you’re locking in pricing, and opting out of both newer instance classes and future price reductions during that time period.
Do you want to know how to perform this kind of analysis? Do you need to choose where to host your app and you’re overwhelmed with informations and choice? Check out my book where I teach you how to choose the best solution for your own unique needs.
I’m not quite sure I understand your argument. For a second, let’s put the guaranteed availability and flexibility arguments to the side; things like new instance types or changes in needs. I agree with those costs but putting a value on them is subjective. It looks like you are comparing the cost of 1yr of computing in the on demand and 1yr term pricing against the cost of 1yr of service and 2yrs of discounted service in the 3 yr term case.
I used your assumptions, a price reduction every 10 months, and the last price reduction for the m4.4xlarge (16%) to extrapolate out to total costs for 3 years. That is, a 16% reduction every 10 months. My math shows the following total cost for each of your scenarios above.
On Demand $17407.33
1yr No Upfront $10806.60
1yr No Upfront $10291.03
1yr No Upfront $10314.77
3yr No Upfront $9082.44
3yr Partial Upfront $8409.80
3yr All Upfront $7905.00
To your point, I can see the value of flexibility being greater than the difference between the no-upfront cost options but it becomes a higher bar in the ‘all upfront’ scenarios. I think you also need to account for the future cost of money but that is beyond the scope here. And as you say, the pricing options can become complex..and then you add spot instances.