Master Your Infrastructure Like You Master Your Code
Mar 19, 2014
With the growing interest in Cloud Computing, we need to find a way to keep control over the different components in our IT infrastructure. We’ve been managing versions of our application code for years now, and we can even deploy our applications automatically. Why shouldn’t we do the same for our infrastructure components? After all, our infrastructure components are nothing more than images and configuration.
For years, we’ve been focusing on making software development projects more efficient through the use of agile methodologies. Being agile means being able to deliver new features rapidly and with higher quality. Higher quality because the new features will better match the ever-changing requirements of modern organizations. With software development we are able to use agile methodologies because we can track the history of changes we make, and we can easily revert to previous versions of our code. We can even deploy our code automatically to any platform (Cloud or non-Cloud) we wish.
Infrastructure as Code
Infrastructure configuration can be automated; in doing so, the costs of maintaining the infrastructure will decrease, and human intervention, which is error-prone, is eliminated. When we start automating every change we make to our infrastructure components, we can store our changes in version control systems (VCS), just like we do with our application code. This enables us to easily revert to previous versions of our infrastructure component configurations.
Suddenly, we can roll out changes to our infrastructure at the same speed that we can roll out our applications, which will decrease our time-to-market. Lowering costs and gaining strategic advantage through flexibility and lower time-to-market just so happen to be the main business drivers for Cloud Computing.
Desired State
The key aspect of managing an IT infrastructure is maintaining a desired state. Now that we can configure our infrastructure components automatically, we need a way to keep them configured correctly. We can do this by making our configuration scripts idempotent and have them first verify whether the current state of an infrastructure component is still compliant with the desired state that’s stored in a VCS. If the component turns out to be not compliant to the desired state, our configuration scripts should be smart enough to bring the component back in the desired state.
Not just thoughts
Today, there are already some solutions being developed to implement Infrastructure as Code. Microsoft has announced PowerShell Desired State Configuration (DSC) last year, and two Open Source companies (Chef and Puppet) dominate the Linux space when it comes to Infrastructure as Code. All three can either push or pull desired state to a managed client no matter the platform (Cloud or non-Cloud) it is running on.