Amazon Web Services

Now that we’ve discussed why I chose to go with a WordPress driven site, let’s look at how one would go about hosting it on the web. If your goal is simply to host a blog then you can do so by just setting up an account on worpress.com and have it running on their servers. If however you are planning on launching a portfolio website and having full control over its content, pages, code, etc. then you’ll have to host it yourself. While there are a literally hundreds of solutions for hosting a WordPress site, I chose to go with Amazon Web Services (AWS) for several reasons:

  1. I use it every day for hosting large scale web applications and have become familiar with it and found it to be reliable
  2. There is a ton of documentation on every one of their services and they have a well developed API (application programming environment) with lots of 3rd party tools
  3. It’s easy to use even if you have little experience in setting up web servers (that’s what this post is for)
  4. It offers you limitless options to scale up should your site become incredibly popular (which is what we all want of course)
  5. It’s inexpensive for what you get

While the second part of this post will deal with the actual mechanics of deploying your site, here we’ll take a high level view of the technologies that you’ll need to be aware of when deploying the application.

First let’s discuss the cost of hosting on AWS. With AWS you select the size and type of each service that will best suit the expected demands of your application. These range from small servers (often called Micro instances by AWS) to massive clustered environments which I don’t expect that you’ll have to worry about. Generally your WordPress deployment will have three components: a web server, a database and a file storage repository. Each of these components can be a separate Amazon service, or you can combine them together onto one server (we’ll discuss the merits of each approach shortly). If you choose to put all these services onto one Linux server the cost will be around $15 per month on a flexible basis. If you choose to separate each of them into a dedicated server the cost will be at least $32/month on a flexible basis. The reason I say flexible basis is that Amazon offers the ability to buy what is called “Reserved Instances”. In this case you pre-pay for a period of 1 or 3 years and in turn receive a lower hourly cost. For example if we wanted to prepay for a Micro instance (which should be fine for your WordPress site) for a 3 year period, the cost will be $100 up front and our monthly cost will drop to only $4/month for 3 years. We can do the same thing for the database server which will cost us only $6/month with a $100 pre-payment. Thus the cost of our individual service deployment will drop to around $10/month. If you chose a 1 year pre-payment period instead of three years, the rate would be slightly higher but with a lower up front cost. Do keep in mind that AWS offers a free usage tier in which your Micro web server is basically free for one year so there is no need to purchase the reserved instance for your web server until after 1 year. Also note that the above rates are for a Linux based web server and Windows servers are on average 30% more expensive. For a full overview of costs visit the AWS website and look up EC2 Servers (your web server), Amazon RDS (your database), and Amazon S3 (your file storage). Also note that I’ve purposely left out calculation of storage space costs and bandwidth usage because for the most part the cost is very¬†negligible (unless you start uploading 60mp raw files to your web server or your blog is more popular than Scott Kelby’s).

Now that we’ve briefly covered the cost, let’s talk about our two deployment options: single server vs. multi-service. As I’ve mentioned, your WordPress site will need a web server to host its pages, it will need a database to store data, and it will need disk space to store any images and files that you upload to it. You can combine all these onto one machine to reduce overall costs but then you are asking your small Micro instance to handle a lot of work, thus lowering the speed of your website. You could step up the size of your server from a Micro instance to a Small one but then the cost becomes higher than a separate server deployment which is somewhat pointless. The added downside of a single server deployment is also a single point of failure. By using Amazon RDS (Relational Database Service) as your database, you can take automatic snapshots of your database to ensure that data is never lost. Furthermore, on a single instance deployment your files are stored on what is known as Amazon EBS (Elastic Block Store) which is well regarded for its lack of reliability. Once again, by moving your file storage to Amazon S3 (Simple Storage Service), you get a reliable file storage solution that is automatically replicated across multiple physical drives at very little cost (again assuming you’re not storing Gigabytes of data). With a separate service deployment, if my web server crashes, I just ask Amazon to build me a new one and within a few minutes I’m up and running again. If everything was on one server I could potentially loose my database and my files and even with backups it would take me longer to get up and running again. Hopefully I’ve convinced you that a separate service deployment is the way to go, but don’t fret if you want to go with a single server approach, I will describe each deployment scenario in the next post.

Now that we’ve covered a lot of the details of AWS, I encourage you to visit the above links and get an understanding of what Amazon offers and most importantly, create an AWS account. The account will cost you nothing so there is no risk in doing this. The three services we will be dealing with are AWS, RDS, and S3 and in the next post we’ll introduce a fourth service called CloudFormation which will make your job of setting up the website an absolute breeze. See you next time.