Uppdatera en resurs i en Azure Resource Manager-mall
Det kan finnas tillfällen när du behöver uppdatera en resurs under en distribution, till exempel när du inte kan ange alla egenskaper för en resurs förrän andra beroende resurser har skapats. Om du till exempel skapar en serverdelspool för en lastbalanserare kan du uppdatera nätverksgränssnitten (NIC) på dina virtuella datorer så att de inkluderas i serverdelspoolen. Resource Manager stöder uppdatering av resurser under distributionen, men du måste utforma mallen korrekt för att undvika fel och för att säkerställa att distributionen hanteras som en uppdatering.
När du skapar en resurs och uppdaterar den senare refererar du till den två gånger. Du refererar först till den i mallen som skapar den. Senare, när du uppdaterar resursen, refererar du till den med samma namn. Men om två resurser har samma namn i en mall utlöser Resource Manager ett undantag. Undvik det här felet genom att ange den uppdaterade resursen i en andra mall som antingen är länkad eller ingår som ett undermall som använder Microsoft.Resources/deployments
resurstypen.
I den andra mallen måste du antingen ange namnet på egenskapen som ska ändras eller ett nytt namn för en egenskap som ska läggas till. Du måste också ange namn och ursprungliga värden för de egenskaper som inte ändras. Om du inte kan ange en eller flera av de ursprungliga egenskaperna förutsätter Resource Manager att du vill skapa en ny resurs och tar bort den ursprungliga.
Exempelmall
Nu ska vi titta på en exempelmall som demonstrerar tekniken. Mallen distribuerar ett virtuellt nätverk med namnet firstVNet
som har ett undernät med namnet firstSubnet
. Därefter distribueras ett virtuellt nätverksgränssnitt (NIC) med namnet nic1
och nätverkskortet associeras med undernätet. En distributionsresurs med namnet updateVNet
innehåller en kapslad mall som uppdateras firstVNet
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": {}
}
Överväg resursobjektet för vår firstVNet
resurs. Observera att vi återigen anger inställningarna för vår firstVNet
i en kapslad mall – det beror på att Resource Manager inte tillåter samma distributionsnamn i samma mall, och kapslade mallar anses vara en annan mall. Genom att ange våra värden för resursen firstSubnet
igen uppmanar vi Resource Manager att uppdatera den befintliga resursen i stället för att ta bort den och distribuera om den. Slutligen hämtas våra nya inställningar för secondSubnet
under den här uppdateringen.
Prova mallen
Det finns en exempelmall 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 namnet firstVNet
och ett nätverkskort med namnet nic1
. Klicka på firstVNet
och klicka sedan på subnets
. Du ser firstSubnet
som ursprungligen skapades och du ser secondSubnet
som lades till i resursen updateVNet
.
Gå sedan tillbaka till resursgruppen och klicka på nic1
och klicka sedan på IP configurations
. I avsnittet IP configurations
är inställt firstSubnet (10.0.0.0/24)
på subnet
.
Originalet firstVNet
uppdaterades i stället för att återskapas. Om firstVNet
hade återskapats skulle nic1
inte associeras med firstVNet
.
Nästa steg
- Azure Resource Manager
- Vad är ARM-mallar?
- Självstudie: Skapa och distribuera din första ARM-mall
- Självstudie: Lägga till en resurs i ARM-mallen
- Metodtips för ARM-mallar
- Dokumentation om Azure Resource Manager
- Dokumentation om ARM-mallar