title: Template resource location description: Describes how to set resource location in an Azure Resource Manager template (ARM template). ms.topic: article ms.custom: devx-track-arm-template ms.date: 04/28/2025
When deploying an Azure Resource Manager template (ARM template), you must provide a location for each resource. The location doesn't need to be the same location as the resource group location.
Different resource types are supported in different locations. To get the supported locations for a resource type, use Azure PowerShell or Azure CLI.
((Get-AzResourceProvider -ProviderNamespace Microsoft.Batch).ResourceTypes `
| Where-Object ResourceTypeName -eq batchAccounts).Locations
az provider show \
--namespace Microsoft.Batch \
--query "resourceTypes[?resourceType=='batchAccounts'].locations | [0]" \
--out table
To allow for flexibility when deploying your template, use a parameter to specify the location for resources. Set the default value of the parameter to resourceGroup().location.
The following example shows a storage account that is deployed to a location specified as a parameter:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"storageAccountName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}- For the full list of template functions, see ARM template functions.
- For more information about template files, see Understand the structure and syntax of ARM templates.