Wdrażanie warunkowe w szablonach usługi ARM

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

Uwaga

Wdrożenie warunkowe nie jest kaskadowe dla 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.

Porada

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

Wdróż warunek

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"
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2018-05-01",
      "name": "myZone",
      "location": "global"
    }
  ]
}

Aby zapoznać się z bardziej złożonym przykładem, zobacz Azure SQL serwer logiczny.

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": "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')))]"
    }
  }
}

Gdy parametr newOrExisting jest ustawiony na nowy, warunek ma wartość true. Konto magazynu jest wdrażane. W przeciwnym razie jest używane istniejące konto magazynu.

Pełny przykładowy szablon używający condition elementu można znaleźć w temacie Maszyna wirtualna z nowym lub istniejącym Virtual Network, 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 , czy funkcja if przykładowego szablonu, który używa if elementu 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 pełny

Jeśli wdrożysz szablon z trybem pełnym , a 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 wersji 2019-05-10 lub nowszej zasób jest usuwany. Najnowsze wersje Azure PowerShell i interfejsu wiersza polecenia platformy Azure usuwają zasób, gdy warunek ma wartość false.

Następne kroki