An Idiot's Guide to Amazon Web Services
This page is dedicated to a guide I developed for helping new developers learn about Amazon Web Services.
So what is Amazon Web Services, and why do you need it?
Amazon Web Services (AWS) is one of the leaders of Cloud Computing in the industry today. It is a platform that provides various types of virtual servers that offer different solutions for hosting applications with unique services.
A common theme that many people (including myself) have encountered during a college education, is that the class teaches a language and concept, but does not thoroughly demonstrate how to utilize the learning in an external application. For example, at Cornell University, I took CS/INFO 1300 and CS/INFO 2300 and made a lot of great PHP applications. Once I completed my app, the school had set up a service for dragging and dropping our projects to the local server so that the professor could grade the project.
While this is great for a simple class and helps to facilitate teaching high-level programming concepts, this created a huge issue for when I wanted to build PHP apps outside of class, because the reality is, standard servers are not neat little drag-and-drop services.
If you take the time to do some research, you will find that one of the easiest solutions for deploying an application in the real world is a platform called Heroku. Heroku has built a fantastic service that is a robust option for apps built in well-known frameworks such as Ruby on Rails, Node.js, Play, and Django to name a few. Heroku is also great because it removes a lot of the complicated configuration out of Ops and lets someone boot an application by simply using Git to push to a Heroku repository. This service is great for someone who is learning to build web applications and does not want to have to deal with the complications of DevOps; however, when it comes time to scale an application in an efficient and cost effective manner, Heroku lacks in its ability to provide deeper customization, and it is fairly expensive.
Ok, let's get to the point...
Overall, there are many intricate parts to DevOps and it is a massive undertaking. I personally like learning new languages by following a step-by-step tutorial where I build a neat app, and the tutorial has great explanations for why it does this and not that etc (such as Michael Hartl's Rails Tutorial). I searched far and wide, but I could not find a great tutorial for learning DevOps. I spent 2 months of my summer vacation pulling my hair out trying to learn how to harness the power of AWS after long days at my summer internship. My struggles (and the great documentation of Hartl's tutorial) inspired me to give back to the open source community with a tutorial of my own for learning DevOps on AWS.
This tutorial would not have been possible without some of the great advice I received from Parker Moore at VSCO and Greg Scallan at Flipboard. With their help and many late nights, I finally figured out how to build a multilayer application hosted on AWS. All of this learning put together comes in the form of the tutorial below. This tutorial strives to explain what each piece of the puzzle is, provide additional links for more information, and then provide step-by-step how to utilize the AWS service.
Notes:
- This tutorial is optimized for someone building a Rails Application with PostgreSQL, but its concepts can be transferred to any other framework/language.
- This tutorial surrounds using Amazon's OpsWorks service for automation. Opsworks is based on Chef's technology, so one could conceivably exchange out Opsworks for Chef. Puppet is also another automation tool that is widely used with AWS and other Cloud Computing platforms.
- Find the cookbooks needed for this tutorial here.