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.

Původní podsíť a aktualizovaná podsíť

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

nastavení konfigurace IP adresy nic1

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