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

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

Poznámka

Podmíněné nasazení neprovádí kaskádovitě na podřízené prostředky. Pokud chcete podmíněně nasadit prostředek a jeho podřízené prostředky, musíte použít stejnou podmínku pro každý typ prostředku.

Tip

Doporučujeme Bicep , protože nabízí stejné funkce 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"
    }
  },
  "functions": [],
  "resources": [
    {
      "condition": "[parameters('deployZone')]",
      "type": "Microsoft.Network/dnsZones",
      "apiVersion": "2018-05-01",
      "name": "myZone",
      "location": "global"
    }
  ]
}

Složitější příklad najdete v tématu Azure SQL logický server.

Nový nebo existující prostředek

Pomocí podmíněného nasazení můžete vytvořit nový prostředek nebo použít existující prostředek. Následující příklad ukazuje, jak buď 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": "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')))]"
    }
  }
}

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

Kompletní příklad šablony, která používá element, najdete v condition tématu Virtuální počítač s novou nebo existující Virtual Network, úložiště a veřejnou IP adresou.

Funkce modulu runtime

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

Pomocí funkce if se ujistěte, že se funkce vyhodnocuje jenom pro podmínky, když je prostředek nasazený. Projděte si funkci if pro ukázkovou šablonu, která používá if a reference s podmíněně nasazeným prostředkem.

Prostředek nastavíte jako závislý na podmíněném prostředku přesně jako jakýkoli jiný prostředek. Pokud podmíněný prostředek není 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 false, výsledek závisí na verzi rozhraní REST API, kterou použijete k nasazení šablony. Pokud používáte verzi starší než 2019-05-10, prostředek se neodstraní. V 10. 5. 2019 nebo novějším se prostředek odstraní. V nejnovějších verzích Azure PowerShell a Azure CLI se prostředek odstraní, pokud je podmínka nepravdivá.

Další kroky