DEMO: Virtual Machine Template
Start course

The Azure cloud is a collection of resources that work in unison to deliver a product or a service. Hardware is virtual and services can be created and destroyed at the stroke of a key. In the context of DevOps, resources can be "spun up" as part of a pipeline. It is crucial that when resources are deployed multiple times, those deployments are consistent, repeatable, and can be automated. Doing it manually through the Azure portal isn’t practical. Azure Resource Manager (ARM) has an interface for processing resource templates that specify resource deployments.

In this course, we look at how those templates can be built and deployed. We start with a simple template and move on to more complex examples to illustrate many of the useful features available when deploying resources with templates. This course contains plenty of demonstrations from the Azure platform so you can see exactly how to use Azure Resource Manager in practice.

If you have any feedback on this course, please reach out to us at

Learning Objectives

  • Understand what Azure Resource Manager (ARM) is and its use cases
  • Learn about the different ARM templates available and how they can be used
  • Deploy databases using an ARM template
  • Export a template and create templates using QuickStart templates
  • Deploy resources using a script

Intended Audience

This is a beginner-level course aimed at anyone who wants to learn more about managing and configuring their Azure environment, and fast-tracking their deployments.


To get the most out of this course, you should have a basic understanding of the Azure platform.


GitHub Repo



Let’s look at how the template structure relates to the virtual machine template we previously downloaded. I’m using Visual Studio Code to view the JSON files. Here we have those 22 parameters, followed by the three variables, and then the 6 resources. A virtual machine deployment involves more than just the machine. There is all the supporting network and security infrastructure that allows you to safely connect to and use the VM.  Here we have a resource name which is one of the parameters that we input to this template. That’s the parameter definition specifying its data type. If I go over to parameters.json I can see the value that is being inserted for network interface name. Going back to template.json we can see each resource has a type, that is what resource is created. This is a network interface which is defined in the region specified by the location parameter. We have a security group name, virtual network resource, a public IP address resource, the actual virtual machine itself with the various nested properties that define that machine like its size, which is also retrieved from the machine size parameter. Here we have the virtual machine’s dependsOn section specifying that the VM requires the network interface and storage resources.

About the Author
Learning Paths

Hallam is a software architect with over 20 years experience across a wide range of industries. He began his software career as a  Delphi/Interbase disciple but changed his allegiance to Microsoft with its deep and broad ecosystem. While Hallam has designed and crafted custom software utilizing web, mobile and desktop technologies, good quality reliable data is the key to a successful solution. The challenge of quickly turning data into useful information for digestion by humans and machines has led Hallam to specialize in database design and process automation. Showing customers how leverage new technology to change and improve their business processes is one of the key drivers keeping Hallam coming back to the keyboard.