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
- Modul Learn, který se zabývá podmíněným nasazením, najdete v tématu Správa složitých cloudových nasazení pomocí pokročilých funkcí šablon ARM.
- Doporučení k vytváření šablon najdete v tématu Osvědčené postupy pro šablony ARM.
- Pokud chcete vytvořit více instancí prostředku, přečtěte si téma Iterace prostředků v šablonách ARM.