For an introduction to infrastructure-as-code, we recommend the first part of our blog series.
When dealing with modern IT infrastructure, cloud, DevOps and infrastructure-as-code, it can be confusing to differentiate between the different tools and use cases like Terraform and Pulumi and configuration management tools like Ansible, Chef or Puppet. Therefore, it is important to understand the difference between infrastructure as code, infrastructure provisioning, and configuration management.
First, some conceptual basics considered from an infrastructure point of view:
IT-Infrastructure consists of a combination of hardware and software components. (servers, storage, network, firewall devices, routers, etc.)
provisioning is the process of creating infrastructure and making it available to end users.
configuration is the process of assembling and hiring the provided IT infrastructure resources. For example installing and configuring a database on a server or configuring a firewall device.
automation refers to the process of implementing recurring tasks, processes or procedures. For example, the automated installation of Nginx on a server using code.
orchestration is the process of coordinating multiple automations. The output of one automation can be used as input for another automation. For example, to deploy a server you need a network. So one automation will provision network resources and another will use its output to provision servers.
With the advent of cloud computing, infrastructure deployment has become easy as most complex configurations are abstracted by cloud providers using virtualization and software-defined networking. You can deploy networks, servers and storage API-driven in minutes. All cloud providers provide APIs so you can use programming languages to manage your IT infrastructure and configure the resources provided using code.