How to create a Linux VM using an Azure Resource Manager template

This article shows you how to quickly deploy a Linux Virtual Machine on Azure using an Azure Template. The article requires:

  • an Azure account (get a free trial).
  • the Azure CLI logged in with azure login.
  • the Azure CLI must be in Azure Resource Manager mode azure config mode arm.

You can also quickly deploy a Linux VM template by using the Azure portal.

Quick Command Summary

azure group create \
    -n myResourceGroup \
    -l westus \

Detailed Walkthrough

Templates allow you to create VMs on Azure with settings that you want to customize during the launch, settings like usernames and hostnames. For this article, we are launching an Azure template utilizing an Ubuntu VM along with a network security group (NSG) with port 22 open for SSH.

Azure Resource Manager templates are JSON files that can be used for simple one-off tasks like launching an Ubuntu VM as done in this article. Azure Templates can also be used to construct complex Azure configurations of entire environments like a testing, dev, or production deployment stack.

Create the Linux VM

The following code example shows how to call azure group create to create a resource group and deploy an SSH-secured Linux VM at the same time using this Azure Resource Manager template. Remember that in your example you need to use names that are unique to your environment. This example uses myResourceGroup as the resource group name, and myVM as the VM name.

azure group create \
    --name myResourceGroup \
    --location westus \

The output should look like the following output block:

info:    Executing command group create
+ Getting resource group myResourceGroup
+ Creating resource group myResourceGroup
info:    Created resource group myResourceGroup
info:    Supply values for the following parameters
sshKeyData: ssh-rsa AAAAB3Nza<..ssh public key text..>VQgwjNjQ== myAdminUser@myVM
+ Initializing template configurations and parameters
+ Creating a deployment
info:    Created template deployment "azuredeploy"
data:    Id:                  /subscriptions/<..subid text..>/resourceGroups/myResourceGroup
data:    Name:                myResourceGroup
data:    Location:            westus
data:    Provisioning State:  Succeeded
data:    Tags: null
info:    group create command OK

That example deployed a VM using the --template-uri parameter. You can also download or create a template locally and pass the template using the --template-file parameter with a path to the template file as an argument. The Azure CLI prompts you for the parameters required by the template.

Next steps

Search the templates gallery to discover what app frameworks to deploy next.