It may be obvious to some, but automation is a key concept when moving to the cloud from a data center or on-premises model. Imagine if you will that it is 1999. Data centers were the only real option for hosting large scale business applications. Often, system administrators would build and configure each server individually and manually. This was a time consuming and error prone process. The result was often “snowflakes”. Servers that are unique and fragile. The more savvy individuals and organizations would use scripts to accomplish as much as they could as reliably as possible. The result was a primitive version of DevOps.
In the cloud, where everything is software defined, scripting can be used to provision your servers and other infrastructure (e.g. load balancers, networking, etc.). Over time, several scripting technologies have developed to make automation easier, more reliable, and reusable. The more popular configuration management tools are Chef, Puppet, Ansible, SaltStack, Terraform, and AWS CloudFormation .
The benefits of configuration management tools include:
- When run more than once, in most circumstances, they produce the same result. The exceptions are usually well documented.
- They can be controlled with a version control system such as Git or Subversion. This allows you to easily rollback to previous version of your infrastructure and code if something goes wrong.
- They provide reproducible results and allow identical deployments for different build environments like dev, test, and production.
- The make scaling easier, since producing new servers is quick and reliable.
It’s true that some of these benefits can also be produced by shell scripts, but configuration management codifies and makes the process less error prone.
If you still aren’t convinced that automation is imperative for cloud computing, imagine a scenario where you have a 10 server web application. There are load balancers in front, web application servers in the middle, and a database on the back end. Without automation you would need to have a system administrator build each of these 10 servers at a cost of hours to days each. You would then have to do the same for you dev and test environments. On the other hand, if you had automated the infrastructure and application deployment, there would be a one time cost to develop the automation, then each environment could be provisioned in minutes. This allows you to move faster as a business, in the end, increasing your bottom line.