First thing's first, my blog is now at a new location. I've decided to move it to a more narcissistic address: http://colintmiller.com/. It may later change to http://colintmiller.com/blog/ or something, and I'll make a note of it if that happens. The old address will still have my old posts, and I may cross post a few times, but mostly I'll be using the new location.
The other part of the title to this post actually deals with why the location of this blog is changing. I had always read about Amazon Web Services on the fringe, and noted the great popularity with which it has gained, but I never tried it out. I'm not starting a new company where I need a quick data center for rent. I also didn't have any map-reduce jobs that I couldn't perform on my own machines or at my job's 2k node research grid. So without great need, I didn't look into it too much.
Recently however Amazon sent out an email touting its new micro EC2 instances. The draw was that you could have a virtual server for about 2 cents an hour. You can make it cheaper by reserving it for a year or three, but even at the base rate it seemed like something I could try out for a little bit. I mean, what costs 2 cents an hour? A text message is 15 cents. Prepaid calling cards are around 10 cents a minute. Even my internet connection at home costs 9 cents an hour if you divide it out, and that doesn't include an actual server.
Granted it actually costs more than the 2 cents since you have to pay for storage and possibly traffic. Still, the cost is a lot lower than trying to get a dedicated net line with your own static IP address and dealing with maintaining a server. The price seemed reasonable so I decided to give it a shot. Here are my first impressions on the service.
When I first logged into my newly created account I brought up the AWS Management Console and started looking at the EC2 tab. You can click the misleadingly named "Launch Instance" to create a new instance. For some reason when I see Launch Instance I think of just starting one up, but Launching really means to create.
There are a bunch of pre-created instance types you can use to get started. I used a Getting Started Fedora Core 8 because it worked with a t1.micro instance which is what I wanted to start with. Beyond the quick start list there's a few thousand user created AMIs (Amazon Machine Image). You can apparently also roll your own and install your own OS, but I didn't bother.
After a few minor forms including one that gives you a private key to access the machine, amazon works on creating the instance and any associated EBS (Elastic Block Stores) or S3 volumes. Within a minute or two everything is set up and ready to turn on.
Booting the instance takes only a minute. Once the instance is up you can connect to it using ssh and the key file you created earlier. Connecting with ssh logs you in as root onto your very own virtual machine. It has a public DNS name, but no public IP address. You can create a public IP address to assign to it by going to the Elastic IP Address section of the AWS management console. One neat thing about the elastic IP addresses is that they don't cost anything as long as you're using it. If you don't have it assigned, you have to pay a maintenance fee (those addresses are limited, they should be used!). Another interesting thing about those elastic IP addresses are that you can switch which instance they point to very easily. This lets you work on 2 copies of whatever you're working on: a production and a development. When you have your development machine set up how you want and you're ready to launch it into production, you can just switch the IP address to the other instance. Then your development becomes your production and visa versa.
[caption id="" align="aligncenter" width="384" caption="This is an image of the Pope from Comic Con 2010. I'm not really sure what this has to do with virtual machines, EC2, or scalability, but he does have a large hat."][/caption]
Having full control of a fairly cheap virtual machine is quite nice. Being able to quickly bring up additional instances or migrate your work to larger or smaller instances as you grow (or shrink) is awesome. Being able to do all of that from a management console without having to talk to anyone or put in any requests that take time to perform is amazing.
The EC2 system is something that I would like to have at my job. To create an virtual machine quickly for use in testing or development and have its usage billed to a department would be the ideal flexible setup for programming systems. We could easily create test buckets for various versions of a program. Scaling would be easier as we wouldn't need to go through the large and drawn out procedure of requesting hardware, having it installed, and setting up the OS and ofter software. We could just create a base image and launch it on new instances very quickly.
The potential for a system like this is huge. If I were to try creating a startup, I would be running it on AWS because the cost to start is so low and the flexibility so great. Yahoo!, Google, and Microsoft really need to create similar systems. Amazon is going to subtly take over the web with this service. They can capture a large chunk of the small to medium business market, and others would be fools to not emulate them.