Configuration management (CM); It's origin, equivalence and contrast to IaC.
Published: 2023-10-23 13:04:43

Configuration management is a technique used to support high velocity development workflow by identifying and tracking individual configuration items.

Automation really is the heart of configuration management, but CM revolves around treating the underlying infrastructure with exactly as much rigor and automation as we would treat the underlying application/service.

Traditionally CM was implemented to oversee physical enterprise compute and storage and network hardware, today CM is typically implemented in the form of software tools that the organization uses to enforce a desired configuration state for each item and provide timely alerts of any configuration problems. 

However the approach should be broadened further to systems engineering and governance to embrace ever-advancing practices such as software-driven infrastructure and it can be codified in standardized frameworks for e.g ITIL.

#### What is the ITIL Framework?

If you've studied/worked in tech, then this must bring some _deja-vu_ ;
if not, it's totally okay.

ITIL v3 framework is a set of best practices, processes and procedures that organizations can use for digital service management by leveraging its adaptable models and procedures for continuous improvement to end-user services. It's recognized internationally for setting the standard for IT service delivery. 

The dimensions, pillars and gemstones of this framework I will leave unto you dear reader, but that may extend a bit outof this post. My intention was to showcase where Configuration Management evolved from.


There are multiple ways how using the configuration management practice would benefit the organization. A few are:
1. Quick provisioning of new compute hosts
2. Centrally modify base configurations
3. Version control for the compute host environments.

While this may sound in an essence like Infrastructure as code, its slightly different. Most times, the two could be used inter-changibly depending on the complexity of your infrastructure. But let's take a look at them abit more closely to see when you may need to use either.

#### Infrastructure-as-Code
Infrastructure-as-Code is used to automatically create any service or system in the cloud or on-prem with code. Infrastructure-as-Software; which is somewhat similar to IaC in a way, is defining your infrastructure (either on cloud or on-prem) with a general-purpose programming language like Python or Go or with tools such as [SST](https://sst.dev/)

The key differentiator with Infrastructure-as-Code and the manual way of creating systems and services is that it's done by writing code.


#### Comparison
Infrastructure as Code (IaC) and Configuration Management are two related but distinct techniques used to manage IT infrastructure. Below are some similarities and differences between them:

##### Similarities:

1. Both approaches aim to automate infrastructure management and reduce the manual effort required to provision, configure, and manage infrastructure resources.
2. Both approaches rely on defining infrastructure resources and configurations as code, which can be version-controlled, tested, and deployed using automation tools.
3. Both approaches help ensure consistency and reduce the risk of configuration drift, which can lead to performance and security issues.

##### Differences:

1. IaC primarily focuses on automating the creation and management of infrastructure resources, such as virtual machines, storage, and networking. Configuration Management, on the other hand, focuses on enforcing consistent configurations across multiple servers and applications.
2. IaC tools are typically used for cloud infrastructure, while Configuration Management tools can be used for managing both cloud and on-premises infrastructure.
3. IaC is often used for defining infrastructure as part of the application development process, while Configuration Management is typically used for ongoing maintenance of the infrastructure.

In summary, while both techniques differ in focus and scope. IaC is primarily used for automating infrastructure creation and management, while Configuration Management is focused on enforcing consistent configurations across infrastructure resources. 

But keep in mind that both approaches are uniquely important for managing stable, scalable, reliable, and secure infrastructure.