Files
2026-01-27 17:35:45 -05:00

2.3 KiB

ARM Template Syntax Reference

Template Structure

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environment": {
      "type": "string",
      "allowedValues": ["dev", "staging", "prod"]
    }
  },
  "variables": {
    "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]"
  },
  "resources": [],
  "outputs": {}
}

Functions

// Concatenation
"[concat('prefix-', parameters('name'), '-suffix')]"

// Unique string
"[uniqueString(resourceGroup().id)]"

// Resource ID
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"

// Reference (runtime)
"[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))).primaryEndpoints.blob]"

// Conditions
"[if(equals(parameters('environment'), 'prod'), 'Standard_GRS', 'Standard_LRS')]"

Resource Example

{
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2021-09-01",
  "name": "[variables('storageAccountName')]",
  "location": "[resourceGroup().location]",
  "sku": {
    "name": "[variables('storageSku')]"
  },
  "kind": "StorageV2",
  "properties": {
    "supportsHttpsTrafficOnly": true,
    "minimumTlsVersion": "TLS1_2"
  }
}

Dependencies

{
  "type": "Microsoft.Web/sites",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
  ]
}

Deployment

# Create resource group
az group create --name myRG --location eastus

# Deploy template
az deployment group create \
  --resource-group myRG \
  --template-file template.json \
  --parameters @parameters.json

# What-if (preview changes)
az deployment group what-if \
  --resource-group myRG \
  --template-file template.json
param location string = resourceGroup().location
param environment string

var storageAccountName = 'st${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: environment == 'prod' ? 'Standard_GRS' : 'Standard_LRS'
  }
  kind: 'StorageV2'
}

output storageEndpoint string = storageAccount.properties.primaryEndpoints.blob