Aktualizace prostředku v šabloně Azure Resource Manager
Může se stát, že budete potřebovat aktualizovat prostředek během nasazení, například když nemůžete zadat všechny vlastnosti prostředku, dokud se nevytvorí další závislé prostředky. Pokud například vytvoříte back-endový fond pro nástroj pro vyrovnávání zatížení, můžete aktualizovat síťová rozhraní na virtuálních počítačích tak, aby byla zahrnuta do back-endového fondu. Resource Manager podporuje aktualizaci prostředků během nasazení, ale musíte šablonu navrhnout správně, abyste se vyhnuli chybám a zajistili, že nasazení bude zpracováno jako aktualizace.
Když vytvoříte prostředek a později ho aktualizujete, budete na něj dvakrát odkazovat. Nejprve na něj odkažte v šabloně, která ho vytvoří. Když později prostředek aktualizujete, budete na něj odkazovat se stejným názvem. Pokud však dva prostředky mají v šabloně stejný název, Resource Manager vyvolá výjimku. Pokud se chcete této chybě vyhnout, zadejte aktualizovaný prostředek v druhé šabloně, která je propojená nebo zahrnutá jako dílčí šablona, která používá daný Microsoft.Resources/deployments
typ prostředku.
Ve druhé šabloně musíte buď zadat název vlastnosti, kterou chcete změnit, nebo nový název vlastnosti, kterou chcete přidat. Musíte také zadat názvy a původní hodnoty vlastností, které se nemění. Pokud se vám nepodaří zadat jednu nebo více původních vlastností, Resource Manager předpokládá, že chcete vytvořit nový prostředek, a odstraní původní.
Příklad šablony
Podívejme se na ukázkovou šablonu, která demonstruje techniku. Šablona nasadí virtuální síť s názvem firstVNet
, která má jednu podsíť s názvem firstSubnet
. Pak nasadí virtuální síťové rozhraní s názvem nic1
a přidruží ho k podsíti. Prostředek nasazení s názvem updateVNet
obsahuje vnořenou šablonu, která se aktualizuje firstVNet
přidáním druhé podsítě s názvem 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": {}
}
Zvažte objekt prostředku pro náš firstVNet
prostředek. Všimněte si, že ve vnořené šabloně znovu zadáváme nastavení pro naše firstVNet
– je to proto, že Resource Manager neumožňuje ve stejné šabloně stejný název nasazení a vnořené šablony se považují za jinou šablonu. Opětovným zadáním hodnot pro prostředek firstSubnet
sdělíme Resource Manager, aby stávající prostředek aktualizovali, místo aby ho odstranili a znovu nasadili. Během této aktualizace se nakonec převezmou naše nová nastavení pro secondSubnet
.
Vyzkoušení šablony
Ukázková šablona je k dispozici na GitHubu. Pokud chcete šablonu nasadit, spusťte následující příkazy Azure CLI :
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
Po dokončení nasazení otevřete skupinu prostředků, kterou jste zadali na portálu. Zobrazí se virtuální síť s názvem firstVNet
a síťová karta s názvem nic1
. Klikněte na firstVNet
a pak na subnets
. Zobrazí se hodnota firstSubnet
, která byla původně vytvořena, a v prostředku se zobrazí secondSubnet
hodnota, která byla přidána updateVNet
.
Pak se vraťte do skupiny prostředků, klikněte na nic1
a pak klikněte na IP configurations
. V oddílu IP configurations
je vlastnost nastavená subnet
na firstSubnet (10.0.0.0/24)
.
Původní firstVNet
se místo opětovného vytvoření aktualizoval. Pokud firstVNet
by se vytvořilo znovu, nic1
nepřidružilo by se k firstVNet
.
Další kroky
- Azure Resource Manager
- Co je šablona ARM?
- Kurz: Vytvoření a nasazení první šablony ARM
- Kurz: Přidání prostředku do šablony ARM
- Osvědčené postupy pro šablony ARM
- Dokumentace ke službě Azure Resource Manager
- Dokumentace k šablonám ARM