Reverse Engineering Arm Templates to use with Bicep
When working with Bicep there are times when the documentation isn’t there, and the examples aren’t there yet either.
Recently I needed to deploy Azure Database for PostgreSQL Flexible server using Bicep, the docs for doing this are ok, examples would make the Bicep docs so much better, but anyway, if you have been using Bicep then you manage to get it working.
I tend to go to the following website https://github.com/Azure/ResourceModules/ when I am working with Bicep and use these modules as much as I can – note that they are constantly being worked/changed so bare that in mind.
I figure out the Bicep for my postgreSQL server and now I need too add in a couple of extensions – I’m new to postGreSQL and never touched it and google for the article and it turns out its super simple to manually add in any extension – this article show you how – https://docs.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-extensions
So I decided to download the arm template for my postgreSQL server before the extensions were added and then compare this to the arm template after I have added the extensions into postGreSQL by hand. Then I compare the files and see whats been added.
Comparing both files I see the following:-

I then use a website which is available to use to generate Bicep code from existing arm templates. The website for this is https://bicepdemo.z22.web.core.windows.net/ – using this I click on the decompile button top right and point it at the ARM template I downloaded from the Azure portal after I had added in the extension manually. This then generates the Bicep code for me and I can see the section I needed to add in the extension.
resource flexibleServers_psql_dev_weu_name_azure_extensions 'Microsoft.DBforPostgreSQL/flexibleServers/configurations@2022-01-20-preview' = {
parent: flexibleServers_psql_dev_weu_name_resource
name: 'azure.extensions'
properties: {
value: 'LTREE,UUID-OSSP'
source: 'user-override'
}
}
So now I have the missing extension code I need for my Bicep code and we can remove the manually added extensions – redeploy the code and we are all good.
Summary
If you don’t know the Bicep code for what you need and you cant find any samples, try manually deploying your service, download the arm template and use the https://bicepdemo.z22.web.core.windows.net/ to decompile the ARM templae back into Bicep.
If you have questions reach out to me here in the comments below or on twitter.
Don’t forget to subscribe to myYouTube Channel.
This was a valuable technique in the early days of ARM with raw json and documentation wasn’t keeping up to date. Quickest method is to deploy as quickly as possible, get the syntax and then apply naming and structural conventions as per your team standards.
[…] Reverse Engineering Arm Templates to use with Bicep (Gregor Suttie) […]