Hostman Blog
Infrastructure

Introduction to Infrastructure as Code (IaC)

20 May 2025
Hostman Team
Hostman Team

Infrastructure as Code (IaC) is an approach for automating infrastructure configuration. There are no universal or one-size-fits-all solutions, but various tools are available to help implement this methodology.

Typically, IaC involves a Git repository written according to the rules and standards of a chosen tool.

Why Use Infrastructure as Code?
Copy link

What are the benefits of using Infrastructure as Code? Let’s look at a simple example.

Task: Deploy an Nginx reverse proxy server to route incoming external traffic to internal services.

Whether you use a virtualization system like VMware, Proxmox, or cloud-based virtual machines doesn’t significantly affect the concept.

Engineer’s steps:

  1. Create a virtual machine (allocate CPU, RAM, disk, network)
  2. Install an operating system
  3. Configure remote access
  4. Update packages
  5. Install and configure Nginx
  6. Install and configure diagnostic and monitoring tools
  7. Start the service

Everything works fine. A year later, the team decided that this server was a single point of failure, and if something happened to it, the whole system could go down. So, they asked a new engineer to deploy and configure an identical server as a backup and set up load balancing.

New engineer’s steps:

  1. Check the first server (gather info on resources, software, configuration)
  2. Create an identical virtual machine
  3. Install the operating system
  4. Set up remote access
  5. Update packages
  6. Install and configure Nginx
  7. Set up monitoring tools
  8. Launch the service

During this, it's decided that running Nginx as a standalone service isn't ideal, and it's moved into Docker for easier updates and maintenance.

Eventually, two servers will do the same task, but they will have different package versions and service launch methods. When a third server is needed, engineers must review the configurations of the first two, choose the most current version, and repeat all steps again. If the cloud provider changes, we must repeat the entire process.

This simplified example highlights the core problem.

Infrastructure as Code Advantages
Copy link

So, what do you gain by using Infrastructure as Code?

Avoiding Repetition: No need to manually repeat the same steps on every server — automation reduces manual work and human error.

Speed: Automated processes significantly speed up deployment compared to manual setup.

Visibility and Control:  You don’t need to log in and inspect infrastructure manually. IaC allows you to:

  • See all configurations in one place
  • Track all infrastructure changes
  • Ensure transparency
  • Simplify modification and management

Repeatability: No matter how many times the setup is run, the result will always be the same. This eliminates human error and omissions.

Scalability and Security: Easier to scale infrastructure since all changes are documented. In case of incidents, configurations can be rolled back or restored. Versioning also simplifies migration to a different cloud provider or physical hardware.

This approach is not limited to servers; we can apply it to any devices that support configuration via files

Tools for IaC
Copy link

Let’s look at some key tools used for Infrastructure as Code.

Ansible

One of the most versatile and popular tools. Ansible gained widespread adoption thanks to Jinja2 templates, SSH support, conditions, and loops. It has an active user and developer community offering extensive documentation, modules, and plugins, ensuring solid support and ongoing development.

Terraform

Developed by HashiCorp, Terraform allows you to manage VMs, networks, security groups, and other infrastructure components via configuration files. Terraform uses a declarative approach to bring the infrastructure to the desired state by specifying system parameters.

A standout feature is the Plan function, which compares the current and desired states before any action is taken and shows what will be created, deleted, or changed.

Terraform is mainly used with cloud providers. Integration is done via a component called a Provider (which interacts with the provider’s API). A full list is available at registry.terraform.io.

If the cloud vendor officially supports a provider, that's ideal. Sometimes community-developed providers are used, but if the provider's API changes, maintaining compatibility falls on the community or the developer.

Pulumi

A relatively new open-source tool. It allows infrastructure to be defined using general-purpose programming languages. You can use your favorite IDE with autocomplete, type checking, and documentation support.

Supported languages include:

  • TypeScript
  • Python
  • Go
  • C#
  • Java
  • YAML

Though not yet as popular, Pulumi's flexibility positions it as a strong contender.

SaltStack, Puppet, Chef

These tools are grouped separately because they rely on pre-installed agents on the hosts. Agents help maintain machine states and reduce the chance of errors.

Choosing IaC Tools

The choice of tool depends on the problems you're trying to solve. Combining tools is possible, though having a "zoo" of tools may be inefficient or hard to manage.

Evolving IaC Practices
Copy link

Regardless of the tool, it’s essential to separate deployment from configuration management. With IaC, all configuration changes are made through code.  Even the best tool can't prevent problems if you start making manual infrastructure changes.

As your codebase grows, you risk ending up with a complex and poorly maintainable system. Avoid that.

Knowledge about infrastructure should not be limited to a single person. Changes must be made in the code (in Git repositories). You can use linters to catch accidental mistakes, enforce code reviews, run tests before deployment, and follow a consistent code style.

IaC enables versioning and tracking of every infrastructure change. This ensures transparency and lets you quickly identify and fix issues that might cause downtime, security threats, or technical failures.

IaC is a rapidly evolving field in infrastructure management. Each year brings new tools, technologies, and standards that make infrastructure more flexible and efficient. There are even dedicated roles for IaC engineers as a specialized discipline.