Aktualizace prostředku v Azure Resource Manager šablony
Existuje několik scénářů, ve kterých potřebujete během nasazování aktualizovat prostředek. S tímto scénářem se můžete setkat, pokud nemůžete zadat všechny vlastnosti prostředku, dokud se nevytvoří jiné, závislé prostředky. Pokud například vytvoříte back-endový fond pro nástroj pro vyrovnávání zatížení, můžete síťová rozhraní na virtuálních počítačích aktualizovat tak, aby je zahrnovala do back-endového fondu. A přestože Resource Manager během nasazování podporuje aktualizaci prostředků, musíte šablonu správně navrhnout, abyste se vyhnuli chybám a zajistili, že se nasazení zpracovává jako aktualizace.
Nejprve musíte na prostředek odkazovat jednou v šabloně, abyste ho vytvořili, a pak na prostředek odkazovat stejným názvem, abyste ho mohli později aktualizovat. 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 ve druhé šabloně, která je buď propojená, nebo zahrnutá jako dílčí šablona, pomocí Microsoft.Resources/deployments typu prostředku.
Za druhé musíte zadat název existující vlastnosti, kterou chcete změnit, nebo nový název vlastnosti, která se má přidat do vnořené šablony. Musíte také zadat původní vlastnosti a jejich původní hodnoty. Pokud se vám nepodaří zadat původní vlastnosti a hodnoty, Resource Manager předpokládá, že chcete vytvořit nový prostředek a odstranit původní prostředek.
Příklad šablony
Podívejme se na příklad šablony, která to demonstruje. Naše š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 a nic1 přidruží ho k podsíti. Potom prostředek nasazení s názvem updateVNet obsahuje vnořenou šablonu, která aktualizuje náš prostředek 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": {}
}
Pojďme se nejprve podívat na objekt prostředku firstVNet pro náš prostředek. Všimněte si, že nastavení pro naši šablonu ve vnořené šabloně zadejme znovu, protože Resource Manager nepovoluje stejný název nasazení v rámci stejné šablony a vnořené šablony se považují za firstVNet — jinou šablonu. Tím, že znovu zadáte hodnoty našeho prostředku, Resource Manager aktualizovat existující prostředek místo jeho odstranění a firstSubnet opětovného nasazení. Nakonec se během této aktualizace secondSubnet vyzvedne naše nová nastavení pro .
Vyzkoušejte šablonu
Příklad šablony je k dispozici na GitHub. 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 firstVNet na a pak na subnets . Zobrazí se objekt , který byl původně vytvořen, a uvidíte objekt firstSubnet , který byl přidán do secondSubnet updateVNet prostředku.

Pak se vraťte do skupiny prostředků a klikněte nic1 na IP configurations . V IP configurations části je subnet nastavená na firstSubnet (10.0.0.0/24) .

Původní soubor firstVNet se aktualizoval místo opětovného vytvoření. Pokud firstVNet by byl objekt znovu vytvořen, nebyl by přidružený k nic1 firstVNet .
Další kroky
- Naučte se používat objekt jako parametr v Azure Resource Manager šabloně.