Udostępnij przez


Wdrażanie warunkowe w szablonach ARM

Czasami należy opcjonalnie wdrożyć zasób w szablonie usługi Azure Resource Manager (szablon usługi ARM). condition Użyj elementu , aby określić, czy zasób jest wdrożony. Wartość warunku jest rozpoznawana jako prawda lub fałsz. Gdy wartość jest true, zasób zostaje utworzony. Gdy wartość jest fałszywa, zasób nie jest tworzony. Wartość można zastosować tylko do całego zasobu.

Uwaga / Notatka

Wdrożenie warunkowe nie przenika do zasobów podrzędnych. Jeśli chcesz warunkowo wdrożyć zasób i jego zasoby podrzędne, musisz zastosować ten sam warunek do każdego typu zasobu.

Wskazówka

Zalecamy Bicep, ponieważ oferuje te same możliwości co szablony ARM, a składnia jest łatwiejsza do użycia. Aby dowiedzieć się więcej, zobacz wdrożenia warunkowe.

Warunek wdrożenia

Możesz przekazać wartość parametru, która wskazuje, czy zasób jest wdrożony. Poniższy przykład warunkowo wdraża strefę DNS.

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

Aby uzyskać bardziej złożony przykład, zobacz Serwer logiczny Usługi Azure SQL.

Nowy lub istniejący zasób

Za pomocą wdrożenia warunkowego można utworzyć nowy zasób lub użyć istniejącego. W poniższym przykładzie pokazano, jak wdrożyć nowe konto magazynu lub użyć istniejącego konta magazynu.

{
  "$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": "2025-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "condition": "[equals(parameters('newOrExisting'), 'existing')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-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')))]"
    }
  }
}

Gdy parametr newOrExisting jest ustawiony na nowy, warunek ma wartość true. Konto magazynu zostało wdrożone. W przeciwnym razie jest używane istniejące konto magazynu.

Dla pełnego przykładowego szablonu używającego elementu condition, zobacz Maszynę Wirtualną z nową lub istniejącą siecią wirtualną, magazynem i publicznym adresem IP.

Funkcje środowiska uruchomieniowego

Jeśli używasz funkcji odwołania lub listy z zasobem, który jest wdrażany warunkowo, funkcja jest oceniana nawet wtedy, gdy zasób nie jest wdrożony. Jeśli funkcja odwołuje się do zasobu, który nie istnieje, występuje błąd.

Użyj funkcji if , aby upewnić się, że funkcja jest oceniana tylko pod kątem warunków, gdy zasób jest wdrożony. Zobacz funkcję if dla przykładowego szablonu, który używa if i reference z warunkowo wdrożonym zasobem.

Zasób jest ustawiany jako zależny od zasobu warunkowego dokładnie tak, jak każdy inny zasób. Gdy zasób warunkowy nie zostanie wdrożony, usługa Azure Resource Manager automatycznie usunie go z wymaganych zależności.

Tryb ukończenia

Jeśli wdrożysz szablon z trybem pełnym i zasób nie zostanie wdrożony, ponieważ condition ma wartość false, wynik zależy od wersji interfejsu API REST używanej do wdrożenia szablonu. Jeśli używasz wersji starszej niż 2019-05-10, zasób nie zostanie usunięty. W przypadku wersji 2019-05-10 lub nowszej zasób jest usuwany. Najnowsze wersje programu Azure PowerShell i interfejsu wiersza polecenia platformy Azure usuwają zasób, gdy warunek jest fałszywy.

Dalsze kroki