Villkorsstyrd distribution i ARM-mallar

Ibland kan du behöva distribuera en resurs i en Azure Resource Manager-mall (ARM-mall). Använd -elementet condition för att ange om resursen har distribuerats. Värdet för villkoret matchas till sant eller falskt. När värdet är sant skapas resursen. När värdet är falskt skapas inte resursen. Värdet kan bara tillämpas på hela resursen.

Anteckning

Villkorsstyrd distribution överlappar inte underordnade resurser. Om du vill distribuera en resurs och dess underordnade resurser villkorligt måste du använda samma villkor för varje resurstyp.

Tips

Vi rekommenderar Bicep eftersom det har samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i villkorsstyrda distributioner.

Distribuera villkor

Du kan skicka in ett parametervärde som anger om en resurs har distribuerats. I följande exempel distribueras en DNS-zon villkorligt.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "deployZone": {
      "type": "bool"
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2018-05-01",
      "name": "myZone",
      "location": "global"
    }
  ]
}

Ett mer komplext exempel finns i Azure SQL logiska servern.

Ny eller befintlig resurs

Du kan använda villkorsstyrd distribution för att skapa en ny resurs eller använda en befintlig. I följande exempel visas hur du antingen distribuerar ett nytt lagringskonto eller använder ett befintligt lagringskonto.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "newOrExisting": {
      "type": "string",
      "defaultValue": "new",
      "allowedValues": [
        "new",
        "existing"
      ]
    }
  },
  "resources": [
    {
      "condition": "[equals(parameters('newOrExisting'), 'new')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]"
    }
  ],
  "outputs": {
    "storageAccountId": {
      "type": "string",
      "value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
    }
  }
}

När parametern newOrExisting har angetts till ny utvärderas villkoret till true. Lagringskontot distribueras. Annars används det befintliga lagringskontot.

En fullständig exempelmall som använder -elementet condition finns i VM med en ny eller befintlig Virtual Network, Storage och offentlig IP.

Körningsfunktioner

Om du använder en referens - eller listfunktion med en resurs som är villkorligt distribuerad utvärderas funktionen även om resursen inte distribueras. Du får ett felmeddelande om funktionen refererar till en resurs som inte finns.

Använd funktionen if för att se till att funktionen endast utvärderas för villkor när resursen distribueras. Se if-funktionen för en exempelmall som använder if och reference med en villkorligt distribuerad resurs.

Du anger en resurs som beroende av en villkorsstyrd resurs precis som vilken annan resurs som helst. När en villkorsstyrd resurs inte distribueras tar Azure Resource Manager automatiskt bort den från de beroenden som krävs.

Fullständigt läge

Om du distribuerar en mall i fullständigt läge och en resurs inte distribueras eftersom condition utvärderas till false beror resultatet på vilken REST API-version du använder för att distribuera mallen. Om du använder en tidigare version än 2019-05-10 tas inte resursen bort. Med 2019-05-10 eller senare tas resursen bort. De senaste versionerna av Azure PowerShell och Azure CLI tar bort resursen när villkoret är falskt.

Nästa steg