Skip to content

Infrastructure as Code

Infrastructure as Code (IaC) is the practice of managing and provisioning infrastructure through machine-readable configuration files rather than manual or interactive processes.

Name Description Documentation Tutorial
Ansible Open-source automation tool commonly used for configuration management and infrastructure automation. Docs Getting Started
AWS CDK Open-source framework for defining cloud infrastructure using programming languages and provisioning it through AWS CloudFormation. Docs CDK Workshop
Chef Open-source platform for configuration management and infrastructure automation. Docs Chef Tutorials
Pulumi Infrastructure as Code platform that allows defining cloud resources using general-purpose programming languages. Docs Getting Started
Terraform Tool for provisioning and managing infrastructure resources across cloud providers and data centers. Docs Terraform Tutorials
OpenTofu Community-driven open-source fork of Terraform, compatible with existing Terraform configurations and providers. Docs
Azure ARM / Bicep Native Azure Infrastructure as Code tools for defining and deploying Azure resources using declarative templates. Docs Bicep Getting Started
Google Cloud Deployment Manager Native Google Cloud Infrastructure as Code service for defining and deploying resources using declarative templates. Docs Getting Started
AWS CloudFormation Native AWS Infrastructure as Code service for modeling and provisioning resources using declarative templates. Docs Getting Started

Tool Comparison

Declarative vs Imperative

  • Declarative - Define the desired end state (Terraform, Pulumi, AWS CDK, Azure ARM / Bicep, Google Cloud Deployment Manager)
  • Imperative - Define the steps required to reach a state (Ansible, Chef)

Language Support

  • HCL - Terraform, OpenTofu
  • YAML - Ansible
  • JSON / YAML - AWS CloudFormation
  • YAML (config) / Python, Jinja2 (templates) - Google Cloud Deployment Manager
  • Bicep / JSON - Azure ARM, Bicep
  • Programming Languages - Pulumi (Python, TypeScript, Go, C#), AWS CDK (TypeScript, Python, Java, C#)
  • Ruby - Chef

Cloud Provider Support

  • Multi-cloud - Terraform, Pulumi, Ansible
  • AWS-focused - AWS CDK, CloudFormation
  • Azure-focused - Azure ARM, Bicep
  • Google-focused - Google Cloud Deployment Manager
  • Provider-agnostic - Chef, Ansible

Have any suggestions, additions, best-practices or references? Please contribute to help others learn!

Tools & Software Multi-cloud Management