Deploying Resources with ARM JSON Templates
There are many ways to deploy resources: using the portal, PowerShell, the CLI, the REST API, third-party tools, Azure application—the list goes on. The challenge with nearly all these tools is that they are imperative—that is, you have to explicitly say how to create the resources. If you were creating a number of resources and there was a failure, you often would not be able to just restart the script, as some resources would already exist, and it would fail. Instead, you would have to check at every stage if a resource exists, use a reference to that existing resource if it’s used elsewhere in the script, etc. What if you want to make a small change to the deployment that already exists or compare what is deployed to what you defined in the script? Using the portal or applications is prone to human error and unlikely to scale well. Yes, you can create one VM, but 100? Ouch.
Everything Is JSON
Behind the scenes, everything...