Long term future for Terraform for Azure? Feature implementation lag & the rise of Bicep

Terraform has always had a big lead over ARM for Azure, in that it’s actually a pleasure to use vs ARM’s human-unfriendly cumbersome JSON format. It does have a big downside in that new Azure features can be slow to make it into the AzureRM provider, but that was less of a problem when the rate of change was lower.

Now Microsoft are really getting behind Project Bicep - an intermediate Domain Specific Language that seeks to take the verbosity and drudgery out of ARM template generation. An MS Ignite presentation indicated that you don’t have to transpile into ARM before deployment now. I would rather they put the time and effort into Terraform instead (they use and support Terraform, but clearly wanted their own thing), but I don’t run Microsoft.

As well as receiving a lot of development and marketing love, plus the improved ease of use above, Bicep also gets the “all Azure features are supported from day 1” bonus of ARM. This is increasingly relevant, as the rate of change just keeps climbing.

Terraform adoption in Azure houses just got harder to justify & will continue to get harder as Bicep develops.

To what extent is HashiCorp concerned about this?

Are the 2 products in competition, or friendly rivalry? (ignoring the much wider applicability of Terraform, as I’m just talking about Azure here)

Can developments in each product be used to level up both, as MS and HashiCorp are already working together?

What can HashiCorp do to keep up and exceed Bicep? (e.g. address the API & feature lag experienced by 3rd party Infrastructure as Code providers; integrate Terraform Cloud auditing and management with Azure; …)

I’ve been using Terraform for a while and love it, but for colleagues new to Infrastructure as Code on Azure, it’s no longer a cookie-cutter “use Terraform, as ARM is horrible”.




undesrtanding totally your point of view, and sharing it.
And like you said, the day 1 option with Bicep, will give an extra bonus instead waiting an update of provider for get new ressources/capabilities/attributes in Terraform.

But I’m wondering if we will be able to inject some bicep code inside Terraform, a bit like azurerm_template_deployment for permit to still have main ressources in TF and got 3rd party deployment for ressources not yet available.

By the way, to get a state for detect drift is today the point that I will not move to Bicep as it tommorow. I’m not sure that Bicep will offer a feature like this for detect drift, plan change, etc… fro drive securely infrastructure change on Azure.

At conclusion, driving Bicep inside Terraform could be a serious option I think.