Managing Infrastructure As Code

This post may contain affiliate links and I may receive a small commission if you make a purchase using these links – at no extra cost for you. Please read my disclaimer here.

Today there is no need to prove to anyone that companies that build business processes with the correct use of blockchain tools have excellent prospects not only for improving business performance, but also for strengthening their positions among competitors. However, such success often requires considerable capital investment, and most of it is in the blockchain infrastructure.

In such a situation, a company can solve the problem in several ways: create and use its own infrastructure, choose a service model such as SaaS, or order its infrastructure in the cloud from one of the recognized providers

Infrastructure in stages

At the dawn of the IT era, when any company began to use network tools, it, first of all, organized a separate server room with equipment, where it was necessary to supply electricity, cooling, network cables, etc. Besides, IT specialists have being involved or trained, workstations were equipped for them, manual configuration was carried out for setup and software and network support.

Infrastructure in stages

With the further development of the Internet and the advent of virtualization, the equipment became more powerful, it became possible to install hypervisors on it and run software on them, creating virtual machines, which began to facilitate more efficient work. Finally, web progress has led to the emergence of new tools - containers and clouds.

Containers, as a new step in the development of virtualization, made it possible to increase the density of applications without expanding computing power, i.e. led to the optimization of existing computing power. Cloud technologies have completely called into question the need to maintain our own computing power.

So, we can conclude that computing systems are growing rapidly, and, therefore, approaches to infrastructure must also develop. One of the modern approaches to infrastructure proposes to manage it by executing code (IaC approach). We already know that in IT area it is the application that is initially the code that developers write. Now it is possible to apply a similar process in infrastructure. 

The main prerequisites for the implementation of this process are as follows:

  • Acceleration of setup due to crypts,
  • Interaction with APIs of hypervisors, clouds and other infrastructure configuration systems,
  • Use of programming languages to interact with the API.

Based on this, it can be argued that manual intervention in configuration management is becoming a thing of the past, and the process of setting up infrastructure is as close as possible to the software development process.

In other words, the line between writing applications and creating environments for these applications to function is gradually blurring.

Advantages, challenges and benefits of the IaC approach

It is obvious that this approach to infrastructure management has undoubted advantages. First of all, it allows you to reduce the time spent on deploying and maintaining infrastructure. In addition, this approach significantly reduces probability of errors caused by human factors. 

The next advantage is the fact that with the IaC approach, repeatability and consistency of the process appears, and its scalability improves. Speaking about infrastructure versioning, it should be noted that with the IaC approach they can be managed in a similar way to code versioning. 

That is, to manage your own infrastructure, it is justified to use configuration version control systems to make changes safely and reliably. The IaC approach contributes to a significant convergence of interests and responsibilities of various teams of specialists. 

At the same time, the information storage base is unified, including, among other things, data on all infrastructure changes, which increases the mutual exchange of experience and knowledge. Developers, programmers and administrators and other IT specialists use the same tools in their work. 

Advantages, challenges and benefits of the IaC approach

The IaC approach ensures the security of infrastructure management, since all changes in it become transparent and accessible for verification by relevant specialists and audits. Speaking about the search for errors, the time to eliminate them and further recovery, we can confidently say that this process occurs much faster and more efficiently. 

And, of course, very important is the fact that infrastructure users can order resources themselves. All of the above advantages of the IaC approach in some cases can become a direct or indirect cause of the problems associated with it. For example, due to the automation inherent in IaC, any erroneous settings very quickly spread throughout the entire infrastructure, which can lead to unpredictable behavior of the entire system.

Such an undoubted advantage of IaC as the use of special knowledge and technologies can create a certain dependence on some management tools and not make the process easier, but complicate it. In addition, managing infrastructure only through IaC tools can become a limiting factor in some debugging or emergency situations. 

We also can`t forget, that in cases where the systems are quite extensive or complex, when applying the IaC approach, this complexity may increase even more. And also, if the transition to IaC is just beginning to be implemented, then it is possible that certain barriers will appear along the way. 

However, the benefits of using the IaC approach significantly outweigh the problems that may arise during its implementation. We need to start with the fact that IaC not only changes the approach to infrastructure management, but also the very thinking of IT engineers in this direction. 

The benefits also come from the high degree of automation of this process, high speed of operation and fairly low cost of infrastructure. Taking into account the fact that in the modern IT world more and more new concepts, technologies and tools for software development are appearing, such as Agile, DevOps, etc., the IaC approach fits perfectly into this set of web innovations.

Options and methods of the IaC approach

There are several variants of the IaC approach: the declarative (or functional) approach, the imperative (or procedural) approach and the intellectual approach. With a declarative approach, the problem statement involves a description of the state of resources and the ultimate goal when managing the infrastructure. 

In other words, the code describes what needs to be created, and the tool independently breaks this task into appropriate steps and then implements it. With the imperative approach, the task is posed in a different way: what changes need to be made to the infrastructure in order to realize the ultimate goal of managing it.

In other words, the code describes the sequence of necessary commands. The most difficult to describe in code is the intelligent approach, since it involves specifying a certain order directly in configuring the infrastructure. In practice, in most cases specialists tend to use a declarative approach.

Within the framework of the intelligent approach, two IaC methods are used: "push" and "pull". When using the push method, changes are “pushed” into some information system, and "pull" is a method in which changes are taken from some centralized server.

Interaction of modern technologies and tools in IaC

We said above that despite the fact that today new technologies and tools are constantly appearing in software development, the IaC approach successfully cooperates with them. This statement is also true for such a development philosophy as DevOps.

Interaction of modern technologies and tools in IaC

Let's remember that the DevOps philosophy includes a whole range of techniques, processes, tools, etc., which together are aimed at implementing a fast and high-quality software development life cycle. To achieve this goal, multifunctional teams are created, which include both developers and operators.

DevOps teams use various innovative tools in their work, including the IaC approach in order to automate certain stages of product development. In modern developments, especially within DevOps, the CA(L)MS (culture, automation, lean, measurement, sharing) principle is often used. 

In practice, this means that when developing software, engineers use certain cultural values, share knowledge, automate everything that can be automated, periodically measure the development process, and, at the same time, adhere to the principles of the “lean process”. Speaking about the IaC approach, one cannot fail to mention the documentation within this approach.

It should be noted that documentation can also be written and organized in the form of code. At the same time, one can consider two options for managing documentation as code. The first option provides for a situation in which, in order to generate documentation, it is necessary to use certain software products. This option is used most often by DevOps teams. 

However, in some cases, teams do not generate documentation per se, but rather assume that the infrastructure written in code is the best documentation option for the project.

The IaC approach, like any approach in software development, has a certain set of tools.

This toolkit includes:

  • Specialized scripts: bash, etc.,
  • Configuration management tools: Puppet, Ansible, etc.,
  • Server templating tools: Packer, Vagrant,
  • Orchestration tools: Kubernetes, etc.,
  • Resources initialization tools: Terraform, Cloud Formation, etc.

In addition to the listed tools, the IaC approach uses certain programming languages to write code. It should be noted that different programming languages can be used for different IaC tools. These can be either standard languages using SDK, or special, so-called Domain Specific Language.

When using standard programming languages, you can use any libraries that allow you to connect, for example, to a hypervisor and create a virtual machine or network. Special programming languages are used to solve certain specific problems or for certain product developments.

About the author 

Peter Keszegh

Most people write this part in the third person but I won't. You're at the right place if you want to start or grow your online business. When I'm not busy scaling up my own or other people' businesses, you'll find me trying out new things and discovering new places. Connect with me on Facebook, just let me know how I can help.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}