Sdílet prostřednictvím


Podmíněné nasazení v šablonách ARM

Někdy potřebujete volitelně nasadit prostředek v šabloně Azure Resource Manageru (šablona ARM). Pomocí elementu condition určete, jestli je prostředek nasazený. Hodnota podmínky se vyhodnotí jako true nebo false. Pokud je hodnota true, prostředek se vytvoří. Pokud je hodnota false, prostředek se nevytvoří. Hodnotu lze použít pouze pro celý prostředek.

Poznámka:

Podmíněné nasazení se nekaskáduje na podřízené prostředky. Pokud chcete podmíněně nasadit prostředek a jeho podřízené prostředky, musíte u každého typu prostředku použít stejnou podmínku.

Návod

Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu podmíněné nasazení.

Podmínka nasazení

Můžete předat hodnotu parametru, která označuje, jestli je prostředek nasazený. Následující příklad podmíněně nasadí zónu 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"
      }
    }
  ]
}

Složitější příklad najdete na logickém serveru Azure SQL.

Nový nebo existující prostředek

Pomocí podmíněného nasazení můžete vytvořit nový prostředek nebo použít existující. Následující příklad ukazuje, jak nasadit nový účet úložiště nebo použít existující účet úložiště.

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

Pokud je parametr newOrExisting nastaven na nový, podmínka se vyhodnotí jako true. Účet úložiště je nasazen. V opačném případě se použije existující účet úložiště.

Kompletní ukázkovou šablonu, která používá element, najdete v condition tématu Virtuální počítač s novou nebo existující virtuální sítí, úložištěm a veřejnou IP adresou.

Funkce modulu runtime

Pokud použijete odkaz nebo funkci seznamu s prostředkem, který je podmíněně nasazený, funkce se vyhodnotí i v případě, že prostředek není nasazený. Pokud funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba.

Pomocí funkce If se ujistěte, že je funkce vyhodnocena pouze pro podmínky při nasazení prostředku. Podívejte se na funkci if pro ukázkovou šablonu, která používá if a reference s podmíněně nasazeným prostředkem.

Prostředek nastavíte tak, aby byl závislý na podmíněném prostředku přesně tak, jak byste to chtěli u jakéhokoli jiného prostředku. Pokud není podmíněný prostředek nasazený, Azure Resource Manager ho automaticky odebere z požadovaných závislostí.

Režim dokončení

Pokud nasadíte šablonu s úplným režimem a prostředek se nenasadí, protože condition se vyhodnotí jako nepravda, výsledek závisí na tom, jakou verzi rozhraní REST API použijete k nasazení šablony. Pokud používáte verzi starší než 10. 5. 2019, prostředek se neodstraní. Po 10. 5. 2019 nebo novějším se prostředek odstraní. Nejnovější verze Azure PowerShellu a Azure CLI odstraní prostředek, když je podmínka nepravdivá.

Další kroky