Amazon Web Services: EC2 Pricing and Deployment Options
In addition to the different types and sizes of Amazon's Elastic Compute Cloud (EC2) offerings, EC2 offers three deployment options. To say it another way, you can pay a different hourly rate for the same type and size instance, depending on how you choose to deploy it. Each deployment option affects pricing:
The on-demand instance is the most straightforward deployment option: You choose when you want the instance to run, and Amazon Web Services (AWS) guarantees to run it at a standard, documented rate per hour.
It's important to understand what on-demand instances represent. As a cloud service provider, Amazon asserts that it's ready to offer computing resources whenever a customer requests them; in effect, the store is always open for business. The default limitation is 20 instances per account, but the company provides an easy way to request additional instances and, to my knowledge, has never failed to offer more, if requested.
The implications of this offer are quite important: Amazon must have capacity available in every region whenever customers may request instances.
As you look at the more exotic (larger or more hardware-dependent) instance types, you see restrictions on region availability. Amazon commonly rolls out new services in the US East region first, and then, over the course of a few months, makes them available in other regions.
Keep this point in mind as you make your AWS plans, because using a service that's bound to a single region (or only a few regions) will impose data-transfer and network-latency costs on your application.
As with many of its services, Amazon has steadily reduced the prices of its on-demand instances. A couple years ago, an M1.Small (US East region) was $.085 per hour; today, it's $.065 per hour, a drop of 23 percent.
Another instance-pricing option that Amazon provides is reserved instances. In essence, in exchange for a customer making an upfront financial payment, Amazon offers a lower hourly rate for instances. The term for reserved instance pricing can run either one or three years, with, as you may expect, a larger up-front payment for the three-year term.
To see how this strategy works in practice, consider the M1.Small instance type. On-demand instances cost (using US East region pricing) $.065 per hour. For M1.Small reserved instances with a 1-year term, you pay $69 up front, and the hourly rate is $.039, a 39-percent savings.
For a 3-year term, you pay $106.30 up front, and the hourly rate is $.031 per hour, a 53-percent discount. AWS clearly isn't a marketing-driven company, because an upfront payment of $106.30 is strange — why tack on 30 cents?
The overall discount you receive depends on how many hours you run the instance, because you have to amortize the upfront payment across all the hours that you run the reserved instance at the lower price.
When reserved instances were first announced, the general wisdom was that the tipping point at which using a reserved instance was less expensive than using an on-demand instance was around 30 percent. In other words, if you ran an instance more than eight hours a day, it was worthwhile to use a reserved instance.
Choosing an instance type has become more complicated since then, as Amazon has further refined its reserved instance pricing and introduced two additional reserved instance-pricing levels. In addition to the original reserved instance pricing (now called light utilization reserved instances), Amazon now offers medium utilization and heavy utilization reserved instances.
For larger upfront payments, these reserved instance types offer even deeper discounts. So if you expect to run your instance 24 (rather than 8) hours per day, you're better off using heavy utilization reserved instances, where you pay $195 up front and then pay $.016 per instance-hour (rather than $69 for a 1-year discount to $.039 per hour).
These new reserved instance options give you more flexibility in trading off your likely level of instance use versus the total cost of operation (TCO) for your instances.
Amazon also offers a deployment option called spot-priced instances, which allows AWS users to bid on unused AWS capacity to run their applications.
An AWS user interested in using spot-pricing places a bid that represents the amount the user is willing to pay to have the application run. For example, though the on-demand price for an M1.small may be $.065 per hour, you may bid $.02 per hour to run the application.
If the current price for spot-priced instances of the type and size you want is at or below the current spot-price, AWS launches the instance you want to run and runs it as long as you request it or until the spot-price increases beyond your bid.
If the spot-price is below the amount you've bid, don't worry: You pay only the current spot-price. If the current spot-price for M1.Small is only $.01 per hour, for example, you pay that rate, not your $.02 bid.