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
- Aby zapoznać się z modułem Learn obejmującym wdrażanie warunkowe, zobacz Manage complex cloud deployments by using advanced ARM template features (Zarządzanie złożonymi wdrożeniami w chmurze przy użyciu zaawansowanych funkcji szablonu usługi ARM).
- Aby uzyskać zalecenia dotyczące tworzenia szablonów, zobacz Najlepsze rozwiązania dotyczące szablonów usługi ARM.
- Aby utworzyć wiele wystąpień zasobu, zobacz Iteracja zasobów w szablonach usługi ARM.