Recently I had to work with some gear which had been set up to use Infrastructure as code for building Azure. The team behind it had done a great job, but while working with it through some of my own inexperience I found that ARM templates aren’t all that good. Some of this has to do with Powershell and it’s poor ways of handling some constructs, but putting the two together shows the inadequacies of both.
Using Azure DevOps adds another dimension of challenge, the debug adds a lot of info and I’m not sure that the issue, in this case, came from Azure DevOps or is really a byproduct of the failings of the other two.
Issues encountered include string handling in Powershell, when a password passed in which had certain characters in it, like {} would break the template.
ARM templates are not usable as-is when downloaded from the portal. Often you need to hack and change due to linking embeded into the template which should be passed as a parameter. Or as in this case you have a parameter which should be a variable and the values I’ve redacted should be the parameters.
The documentation is woefully inadequate to help someone write ARM from scratch. You will jump through hours of reading and trial and error when starting out. Do learn long before you ever need to use it. If you are working in Azure and don’t have a DevoOps person to do this for you you’re going to need to do a lot of ramp up
Now Microsoft wants us to all learn a new language for writing ARM!! Here’s a tip Microsoft how about an excellent library for an already existing and widely used language by DevOps called Python