What truly matters when working with Azure is deciding whether Terraform or Bicep is the right choice for your needs.

For the past few years, my professional focus has been on developing Infrastructure-as-Code and CI/CD pipelines for various Azure customers. Through this, I've gained hands-on experience with both Terraform and Bicep. I'd like to share my perspective on the topic.

🟢 Green highlights positive points. 🔴 Red indicates negative points. 🟠 Orange represents neutral or mixed points.

FeatureTerraformBicep
Language🟠 HCL🟢 JSON-like
Multi provider🟢 Yes🔴 No
Editor/owner🟢 HashiCorp🟢 Microsoft
Age🟢 2014🟠 2020
State management🔴 Required🟢 Stateless
Native to Azure🔴 No🟢 Yes
Learning curve🟠 Moderate🟢 Easy
Modules🟢 Yes🟢 Yes
Logging🟠 Moderate🟢 Portal
Advanced features🟢 Yes🟠 Moderate
Support outside changes🔴 No🟢 Yes
VS Code integration🟢 Yes🟢 Yes
CI/CD🟢 Yes🟢 Yes
Adoption🟢 High🟠 Moderate
Cost🟠 Free / licence🟢 Free

Language

Multi provider

Editors

State management

Learning curve

Modularity

Maturity

Cost

To conclude

In conclusion, there is no "IaC war" — both tools have their strengths. For many use cases, I prefer Bicep over Terraform, particularly in scenarios where no one else will manage the IaC, or to sidestep chicken-and-egg challenges such as provisioning the storage account used for Terraform's own state.

For other use cases, I'll stick with Terraform, as it keeps people aligned with a consistent, multi-cloud approach and provides robust state management, making it ideal for more complex or diverse infrastructure scenarios. The Terraform community is also currently more established and active than the Bicep community, largely due to the longer maturity of the product.

Enjoy!