Voorwaardelijke implementatie in ARM-sjablonen

Soms moet u desgewenst een resource implementeren in een Azure Resource Manager-sjabloon (ARM-sjabloon). Gebruik het condition element om op te geven of de resource is geïmplementeerd. De waarde voor de voorwaarde wordt omgezet in waar of onwaar. Wanneer de waarde waar is, wordt de resource gemaakt. Wanneer de waarde onwaar is, wordt de resource niet gemaakt. De waarde kan alleen worden toegepast op de hele resource.

Notitie

Voorwaardelijke implementatie wordt niet trapsgewijs geïmplementeerd naar onderliggende resources. Als u een resource en de onderliggende resources voorwaarde voorwaardelijk wilt implementeren, moet u dezelfde voorwaarde toepassen op elk resourcetype.

Tip

We raden Bicep aan omdat deze dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie voorwaardelijke implementaties voor meer informatie.

Voorwaarde implementeren

U kunt een parameterwaarde doorgeven die aangeeft of een resource is geïmplementeerd. In het volgende voorbeeld wordt een DNS-zone voorwaardelijk geïmplementeerd.

{
  "$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"
    }
  ]
}

Zie Azure SQL logische server voor een complexer voorbeeld.

Nieuwe of bestaande resource

U kunt voorwaardelijke implementatie gebruiken om een nieuwe resource te maken of een bestaande resource te gebruiken. In het volgende voorbeeld ziet u hoe u een nieuw opslagaccount implementeert of een bestaand opslagaccount gebruikt.

{
  "$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"
      ]
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[equals(parameters('newOrExisting'), 'new')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Wanneer de parameter is ingesteld op nieuw, resulteert de voorwaarde newOrExisting in waar. Het opslagaccount wordt geïmplementeerd. Wanneer newOrExisting deze is ingesteld op bestaande, wordt de voorwaarde echter geëvalueerd op onwaar en wordt het opslagaccount niet geïmplementeerd.

Zie VM met een nieuw of bestaand Virtual Network, Opslag en openbaar IP-adres voor een volledig voorbeeldsjabloon dat gebruikmaakt van het condition element.

Runtimefuncties

Als u een verwijzings- of lijstfunctie gebruikt met een resource die voorwaardelijk is geïmplementeerd, wordt de functie geëvalueerd, zelfs als de resource niet is geïmplementeerd. Er wordt een fout weergegeven als de functie verwijst naar een resource die niet bestaat.

Gebruik de functie if om ervoor te zorgen dat de functie alleen wordt geëvalueerd op voorwaarden wanneer de resource wordt geïmplementeerd. Bekijk de functie voor een voorbeeldsjabloon die gebruikmaakt if van en reference met een voorwaardelijk geïmplementeerde resource.

U stelt een resource in als afhankelijk van een voorwaardelijke resource, precies zoals elke andere resource. Wanneer een voorwaardelijke resource niet wordt geïmplementeerd, verwijdert Azure Resource Manager deze automatisch uit de vereiste afhankelijkheden.

Volledige modus

Als u een sjabloon implementeert met de volledige modus en een resource niet wordt geïmplementeerd omdat condition deze onwaar wordt geëvalueerd, is het resultaat afhankelijk van de REST API-versie die u gebruikt om de sjabloon te implementeren. Als u een versie gebruikt die ouder is dan 2019-05-10, wordt de resource niet verwijderd. Met 2019-05-10 of hoger wordt de resource verwijderd. De meest recente versies van Azure PowerShell en Azure CLI verwijderen de resource wanneer de voorwaarde onwaar is.

Volgende stappen