- Tools similar to Terraform (infrastructure-as-code, focused on provisioning).
- Tools with a different purpose but often complementary to Terraform (configuration management).
Infrastructure-as-Code (IaC) — Tools similar to Terraform
These tools are declarative and focused on provisioning infrastructure. Pick one based on whether you want cloud-native integration, multi-cloud portability, or developer-friendly languages.- AWS CloudFormation and Azure Bicep are cloud-native, declarative IaC solutions tightly integrated with their respective clouds. They provide first-class support for provider-specific features and are a strong fit when you are committed to a single cloud.
- AWS CloudFormation: https://learn.kodekloud.com/user/courses/aws-cloud-formation
- Azure Bicep: https://learn.microsoft.com/azure/azure-resource-manager/bicep/
- Pulumi is cloud-agnostic like Terraform but lets you write infrastructure code in general-purpose programming languages (JavaScript/TypeScript, Python, Go, C#). This appeals to developer teams that prefer using familiar languages and tooling.
- Terraform is declarative and cloud-agnostic. It uses HashiCorp Configuration Language (HCL) and a provider model to manage resources across many clouds and services.
Complementary Tools — Configuration Management
Configuration management tools operate inside provisioned machines (in-guest) and excel at installing packages, managing files and services, and configuring applications.- Ansible, Chef, Puppet, SaltStack are targeted at system configuration and application deployment on running instances rather than lifecycle management of cloud resources.
Common Workflows
A typical, effective pipeline blends both types of tools:- Use Terraform (or another cloud IaC tool) to provision and manage infrastructure: networks, instances, managed services, load balancers, and DNS entries.
- Use a configuration management tool (Ansible, Chef, Puppet, etc.) to finalize in-guest setup: install packages, configure services, deploy application code, and run migrations.
- Some configuration tools (Ansible modules, for example) can provision cloud resources, but their core strength remains configuring running systems and applications.
- Terraform stores state and plans changes based on a resource graph; treat state as a critical artifact and store it safely (remote/backed storage with locking).
Terraform maintains state and a resource dependency graph. Protect and manage state (use remote state backends and locking) and be careful when importing or modifying resources outside Terraform to avoid drift and state mismatches.
Quick Comparison Table
When to Choose Which
- Choose CloudFormation or Bicep when:
- You are committed to a single cloud and need the deepest, native platform integration.
- Choose Terraform when:
- You need consistent tooling across multiple clouds or a broad provider ecosystem.
- Choose Pulumi when:
- Your team prefers using general-purpose languages and standard developer tooling for infrastructure code.
- Choose Ansible/Chef/Puppet/SaltStack when:
- You need to manage packages, services, files, and application config inside running machines.
Consider team skills, target clouds, and integration needs: use cloud-native IaC for platform depth, Terraform or Pulumi for multi-cloud consistency, and configuration management tools for final in-guest setup and application deployment.
Summary
- CloudFormation and Azure Bicep: cloud-specific declarative IaC for deep platform integration.
- Pulumi: cloud-agnostic IaC using general-purpose programming languages.
- Terraform: cloud-agnostic declarative IaC with HCL, a provider model, and strong multi-cloud support.
- Ansible, Chef, Puppet, SaltStack: configuration management for installing and configuring software on provisioned machines.
Links and References
- AWS CloudFormation
- Azure Bicep
- Pulumi
- Terraform
- Learn Ansible Basics - Beginners Course
- Chef Documentation
- Puppet Documentation
- SaltStack Documentation