What is configuration management?
Every deployment comprises two stacks of resources:
- Environment or infrastructure resources
- Application deployment
Infrastructure resources refer to hardware, software, and platform resources that make an environment suitable for application deployment. For example: infrastructure resources might contain hardware resources, such as networks, load balancers, network interface cards, physical server, virtual machines, network connectivity, an operating system, as well as platform resources, such as container runtime, and framework deployments, such as .NET core. Each of these infrastructure resources should be configured in a way that ensures the application will work according to its design.
After infrastructure resource-provisioning, the application is deployed on top of them. These are related to resources such as application binaries, application dependencies, and package installations.
The configuration of these resources is needed across environments—from higher-level environments, such as the production environment, to lower-level environments, such as the dev and test environments. There can be multiple environments for a solution. The configuration for each of these environments is different. The configuration for a production environment for a solution is different than the configuration of a development environment for the same solution. The configuration differences could be in terms of number of virtual machines, the size of virtual machines, the DNS names, the IP address range, and more. The application configuration for each of these environments is also different. For example: the connection string to database, integration endpoints to other systems, and other configurations are different across these environments.
Active management of both the infrastructure- and application-level configuration information as well as data is known as configuration management in software life cycle management parlance.
There are many tools that can help manage configurations across environments. Some of these are open source while others are propriety.
Each cloud provider also has its own configuration-management tools.
Azure provides ARM templates for provisioning and configuring the infrastructure resources. Other cloud vendors provide their own native ways to configure the environments.
Tools such as Desired State Configuration, Chef, Puppet, and Ansible are suitable for application configuration.
ARM templates enable a concept known as Infrastructure as Code; let's understand it in the next section.