Uppdatera en resurs i en Azure Resource Manager mall
Det finns vissa scenarier där du behöver uppdatera en resurs under en distribution. Du kan påträffa det här scenariot när du inte kan ange alla egenskaper för en resurs förrän andra, beroende resurser skapas. Om du till exempel skapar en serverpool för en lastbalanserare kan du uppdatera nätverksgränssnitten (NIC) på dina virtuella datorer (VM) för att inkludera dem i serverpoolen. Och även Resource Manager har stöd för uppdatering av resurser under distributionen, måste du utforma mallen korrekt för att undvika fel och för att säkerställa att distributionen hanteras som en uppdatering.
Först måste du referera till resursen en gång i mallen för att skapa den och sedan referera till resursen med samma namn för att uppdatera den senare. Men om två resurser har samma namn i en mall Resource Manager ett undantag. För att undvika det här felet anger du den uppdaterade resursen i en andra mall som antingen är länkad eller inkluderad som en undermall med hjälp av Microsoft.Resources/deployments resurstypen.
För det andra måste du antingen ange namnet på den befintliga egenskapen som ska ändras eller ett nytt namn för en egenskap som ska läggas till i den kapslade mallen. Du måste också ange de ursprungliga egenskaperna och deras ursprungliga värden. Om du inte anger de ursprungliga egenskaperna och värdena Resource Manager du vill skapa en ny resurs och tar bort den ursprungliga resursen.
Exempelmall
Nu ska vi titta på en exempelmall som visar detta. Vår mall distribuerar ett virtuellt nätverk med firstVNet namnet som har ett undernät med namnet firstSubnet . Den distribuerar sedan ett virtuellt nätverksgränssnitt (NIC) med nic1 namnet och associerar det med vårt undernät. Sedan innehåller en distributionsresurs med updateVNet namnet en kapslad mall som uppdaterar vår firstVNet resurs genom att lägga till ett andra undernät med namnet secondSubnet .
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/22"
]
},
"subnets": [
{
"name": "firstSubnet",
"properties": {
"addressPrefix": "10.0.0.0/24"
}
}
]
}
},
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkInterfaces",
"name": "nic1",
"location": "[resourceGroup().location]",
"dependsOn": [
"firstVNet"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'firstVNet', 'firstSubnet')]"
}
}
}
]
}
},
{
"apiVersion": "2020-06-01",
"type": "Microsoft.Resources/deployments",
"name": "updateVNet",
"dependsOn": [
"nic1"
],
"properties": {
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": "[reference('firstVNet').addressSpace]",
"subnets": [
{
"name": "[reference('firstVNet').subnets[0].name]",
"properties": {
"addressPrefix": "[reference('firstVNet').subnets[0].properties.addressPrefix]"
}
},
{
"name": "secondSubnet",
"properties": {
"addressPrefix": "10.0.1.0/24"
}
}
]
}
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
Låt oss ta en titt på resursobjektet för vår firstVNet resurs först. Observera att vi återigen anger inställningarna för vår i en kapslad mall– det beror på att Resource Manager inte tillåter samma distributionsnamn i samma mall, och kapslade mallar anses vara en firstVNet annan mall. Genom att återigen ange våra värden för vår resurs Resource Manager att uppdatera den befintliga resursen i stället för att ta bort den firstSubnet och omdistribuera den. Slutligen hämtas våra nya inställningar för secondSubnet under den här uppdateringen.
Testa mallen
En exempelmall finns på GitHub. Distribuera mallen genom att köra följande Azure CLI-kommandon:
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example1-update/deploy.json
När distributionen är klar öppnar du den resursgrupp som du angav i portalen. Du ser ett virtuellt nätverk med firstVNet namnet och ett nätverkskort med namnet nic1 . Klicka firstVNet på och klicka sedan på subnets . Du ser firstSubnet den som ursprungligen skapades och du ser secondSubnet den som lades till i updateVNet resursen.

Gå sedan tillbaka till resursgruppen och klicka sedan nic1 på IP configurations . I IP configurations avsnittet är subnet inställt på firstSubnet (10.0.0.0/24) .

Originalet har firstVNet uppdaterats i stället för att skapas på nya sätt. Om firstVNet hade skapats på ett annat sätt skulle inte nic1 associeras med firstVNet .