Villkorsstyrd distribution i ARM-mallar
Ibland kan du behöva distribuera en resurs i en Azure Resource Manager-mall (ARM-mall). Använd -elementet condition
för att ange om resursen har distribuerats. Värdet för villkoret matchas till sant eller falskt. När värdet är sant skapas resursen. När värdet är falskt skapas inte resursen. Värdet kan bara tillämpas på hela resursen.
Anteckning
Villkorsstyrd distribution överlappar inte underordnade resurser. Om du vill distribuera en resurs och dess underordnade resurser villkorligt måste du använda samma villkor för varje resurstyp.
Tips
Vi rekommenderar Bicep eftersom det har samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i villkorsstyrda distributioner.
Distribuera villkor
Du kan skicka in ett parametervärde som anger om en resurs har distribuerats. I följande exempel distribueras en DNS-zon villkorligt.
{
"$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"
}
]
}
Ett mer komplext exempel finns i Azure SQL logiska servern.
Ny eller befintlig resurs
Du kan använda villkorsstyrd distribution för att skapa en ny resurs eller använda en befintlig. I följande exempel visas hur du antingen distribuerar ett nytt lagringskonto eller använder ett befintligt lagringskonto.
{
"$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')))]"
}
}
}
När parametern newOrExisting
har angetts till ny utvärderas villkoret till true. Lagringskontot distribueras. Annars används det befintliga lagringskontot.
En fullständig exempelmall som använder -elementet condition
finns i VM med en ny eller befintlig Virtual Network, Storage och offentlig IP.
Körningsfunktioner
Om du använder en referens - eller listfunktion med en resurs som är villkorligt distribuerad utvärderas funktionen även om resursen inte distribueras. Du får ett felmeddelande om funktionen refererar till en resurs som inte finns.
Använd funktionen if för att se till att funktionen endast utvärderas för villkor när resursen distribueras. Se if-funktionen för en exempelmall som använder if
och reference
med en villkorligt distribuerad resurs.
Du anger en resurs som beroende av en villkorsstyrd resurs precis som vilken annan resurs som helst. När en villkorsstyrd resurs inte distribueras tar Azure Resource Manager automatiskt bort den från de beroenden som krävs.
Fullständigt läge
Om du distribuerar en mall i fullständigt läge och en resurs inte distribueras eftersom condition
utvärderas till false beror resultatet på vilken REST API-version du använder för att distribuera mallen. Om du använder en tidigare version än 2019-05-10 tas inte resursen bort. Med 2019-05-10 eller senare tas resursen bort. De senaste versionerna av Azure PowerShell och Azure CLI tar bort resursen när villkoret är falskt.
Nästa steg
- En Learn-modul som omfattar villkorsstyrd distribution finns i Hantera komplexa molndistributioner med hjälp av avancerade ARM-mallfunktioner.
- Rekommendationer om hur du skapar mallar finns i Metodtips för ARM-mallar.
- Information om hur du skapar flera instanser av en resurs finns i Resursiteration i ARM-mallar.