Skip to content
Praval Technologies

Blog

An overview of Bicep: automating Azure resource deployment

ARM templates are JSON files that are difficult to read, write and maintain. Bicep is a domain-specific language that compiles to ARM, with a syntax built for humans rather than parsers.

Praval Technologies2 min read

If you have worked with Azure Resource Manager templates, you know how complex they get. They are JSON files defining the infrastructure needed to deploy a resource, and they are difficult to read, write and maintain at any real size.

Bicep is an open-source domain-specific language from Microsoft that compiles into ARM templates. It uses a more human-readable syntax than JSON and provides built-in functions and types that simplify template authoring.

Why it helps

Readability. The syntax resembles other programming languages and uses indentation to define blocks. Large templates stay legible in a way JSON does not.

Reusability. Bicep code modularises. Common infrastructure becomes a module you call rather than a block you copy, which is where most ARM drift comes from.

Type safety and tooling. Resource types and properties are known to the editor, so mistakes surface while writing rather than during deployment.

No state file. Bicep deploys through ARM, which already knows the state of the resource group. There is no separate state to store, lock or corrupt.

Getting started

Install the Bicep CLI or the VS Code extension, write a .bicep file, and deploy with az deployment group create. Existing ARM templates decompile to Bicep with az bicep decompile, which is the fastest way to see the difference on infrastructure you already have.

Drawbacks worth knowing

Azure only. Unlike Terraform, there is no multi-cloud story. If you deploy across providers you will be running two toolchains.

It still compiles to ARM. Anything ARM cannot express, Bicep cannot express either, and some error messages surface at the ARM layer where they are less readable.

Newer ecosystem. Fewer community modules and examples than Terraform, though the gap has narrowed considerably.

Conclusion

For teams entirely on Azure, Bicep removes most of the pain of ARM without introducing state management. For teams spanning clouds, the calculation is different, and the honest answer is usually Terraform.

Recognise any of this in your own estate?

Start with the problem rather than the technology, and we will tell you honestly whether it is ours to solve.