Infrastructure as Code

One of the biggest change driven by DevOps was the introduction of Infrastructure as Code. The concept often mixes two different types of products: Configuration Orchestration vs Configuration Management. Let us clarify those, but to do that we need to go back and see how the Infrastructure approach has changed.

How IT infrastructure is provisioned in traditional businesses

The IT Infrastructure in traditional on-premise setup is a physical box and cables that have to be racked, stacked and configured by a team. Those tasks usually require a lot of manual workloads, with limited opportunities for automation.

There are many drawbacks to that approach:

  1. It takes a long time to acquire and install the hardware.
  2. You need to go through multiple layers of approvals usually.
  3. You need to wait for the hardware to be in stock
  4. You have to schedule your team to install and configure the hardware before anything can be done. Not to mention that you need to have your network engineers to configure network correctly, storage engineers to configure correct storage, and systems engineers to install an appropriate operating system on the hardware. Sometimes if you “lucky” it’s the same person doing all those jobs, and you can get him in the room quickly, but other times those might be external partners doing specific items.
  5. You might find out that the hardware that you purchased might not meet all the new requirements meaning that you have to go through the whole process again
  6. The list continues…

This is just a shortlist, there is a lot more that can be added but it’s clear that before you can provision your application and make it available to your developers or clients you have a lot of time that gets wasted.

The arrival of cloud computing addressed a lot of those issues. You no longer have to worry about purchasing physical hardware, rack and stack it, or if you run out of capacity you don’t have to go back and start all again. You can press a button and spin up a new instance in no time.

However, you still have to manage the configuration and possible inconsistency issues in what is being setup. This is what Infrastructure as Code addresses.

“Infrastructure as code is an approach to managing IT infrastructure for the age of cloud, microservices and continuous delivery.” – Kief Morris, ThoughtWorks Europe


What is Infrastructure as Code:

Let’s start with the clarification of two concepts that are part of IaC: Configuration Orchestration and Configuration Management.

Configuration Orchestration tools like Terraform and AWS CloudFormation, are tools that help automate the deployments of the infrastructure, that includes servers, network, microservices etc.

Configuration Management tools like Ansible, Puppet, Chef, Docker and others take care of configuration of the software and system that is already provisioned on the infrastructure.

There is some level of overlap between the two toolsets. However, an organisation will need to look at utilising both to provide full coverage.

What are the key benefits of using Infrastructure as Code?

Configuration Consistency – someone needs to execute a small configuration change, to check if the tool, application, or update will work. However what you often find is that those changes often get forgotten and not tracked. By using the IaC you can apply the config centrally, that then can be replicated to any environment. It’s especially critical for your Business Continuity Planning as it will allow you to make the sure that you can restore your entire environment to required state.

Minimise the risk – similar to what we mentioned above in regards to business continuity planning, and you no longer have a single point of failure within your team, you now have a central source of truth allowing you to easily confirm any configuration or changes. On top of that you have a benefit of ability to use version control on the code, allowing you to log and track any changes, and more importantly being able to revert any.

Cost-saving – there is a lot less time required to set up environments. Most companies require multiple environments (at bare minimum you need development and production) and amount of time required to set those up get minimised whenever you use IaC as you can push the changes across multiple environments with little changes.

Speed and efficiency – as mentioned above, you can run spin up multiple environments with very little effort. This allows the team to concentrate on other higher-value tasks, while your developers can be sure that their code will work when moved between the environments as all is in sync. More importantly you can deploy quickly the same environment in another region to improve your resiliency.

If you are struggling with the infrastructure in your environment, speak to us. Our engineers got years of experience of both on-premise and cloud systems and can help you to adopt best IaC solution to meet your requirements, allowing you to concentrate on the bringing value to your organisation.



Published on October 1, 2019