My name is Ryan Conway, and I perform DevOps, which is an emerging set of principles for improving communication, collaboration, and agility of a team by blurring the traditional lines between a system administrator and a developer.
How have you incorporated Amazon Web Services as part of your architecture? What services are you using and how?
We are using Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Block Store (Amazon EBS) and Amazon Simple Storage Service (Amazon S3) exclusively for our worldwide services, excluding a small number of UK-based servers.
The reason for choosing Amazon Web Services (AWS) was to take advantage of the ability to rapidly provision new machines to cope with demand and changing requirements, and the ability to do this automatically through autoscaling. In addition, the ability to target new machines into specific regions means our users get the fastest response times to our services.
We use Amazon EC2 machines for our Web applications, databases, and internal tools; we perform database backups to Amazon EBS volumes; and we store snapshots of these EBS volumes on Amazon S3.
What programming languages and/or tools did you use to build this solution?
We use Puppet, an automation and configuration management system to describe our infrastructure in terms of reusable components, which are applied and enforced using the Puppet Agent.
We also use simple Bash scripts to bootstrap new instances, getting Puppet installed and registered with the master. Puppet then takes over and configures the machine according to its role.
We have custom Capistrano and Rake tasks which interface to AWS using the available Gem, allowing us to deploy new software releases to our cluster, regardless of its current size.
Why did you decide to use AWS?
We initially looked at AWS so we could meet the increasing demands of traffic from outside of the UK, where we have our own servers. AWS was the right fit due to the low learning curve, which allowed us to really hit the ground running, as well as its position as market leader of cloud services.
How has AWS helped your business?
[Prior to using AWS], the team did waste hours a week going back and forth between our internal IT department, and our datacenter, whenever they needed to provision new equipment. Now, this bottleneck has been eliminated, we are able to move really quickly with new features or try out ideas quickly with disposable instances on Amazon EC2. We have over 20 Amazon EC2 instances running 24/7. We process over 3 million requests per day.
AWS frees agile software teams from the shackles of traditional IT, allowing their infrastructure to change as quickly as their code does.
Have you learned any valuable lessons during this development process that you’d like to pass on to other developers?
The most important thing to grasp is that Amazon EC2 instances are disposable. This means you need to build your infrastructure to survive the loss of random Amazon EC2 instances, as after an autoscale event, instances will be terminated, with no guarantee as to which ones. It is important to ensure your instances have some sort of remote logging mechanism so that any important information is not lost when instances terminate.
Make sure you utilize the multiple availability zones and regions to ensure maximum uptime.
Do you have any future plans to incorporate other AWS solutions?
The next thing we want to look into is using Amazon Relational Database Service (Amazon RDS) to reduce the complication with running replicated databases.
To learn more, visit http://www.getinvisiblehand.com/ .
Added May 31, 2011