Sdílet prostřednictvím


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 firstVNeta 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 .

Původní a aktualizovaná podsíť

Pak se vraťte do skupiny prostředků, klikněte na nic1a pak klikněte na IP configurations. V oddílu IP configurations je vlastnost nastavená subnet na firstSubnet (10.0.0.0/24).

nic1 Nastavení konfigurace IP

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