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!