Azure Resource Manager şablonundaki bir kaynağı güncelleştirme

Dağıtım sırasında bir kaynağı güncelleştirmeniz gereken zamanlar olabilir. Örneğin, diğer bağımlı kaynaklar oluşturulana kadar kaynağın tüm özelliklerini belirtemezsiniz. Örneğin, yük dengeleyici için bir arka uç havuzu oluşturursanız, sanal makinelerinizdeki (VM'ler) ağ arabirimlerini (NIC) arka uç havuzuna dahil etmek üzere güncelleştirebilirsiniz. Resource Manager dağıtım sırasında kaynakların güncelleştirilmesini destekler, ancak hataları önlemek ve dağıtımın bir güncelleştirme olarak işlendiğinden emin olmak için şablonunuzu doğru tasarlamanız gerekir.

Bir kaynak oluşturup daha sonra güncelleştirdiğinizde iki kez başvurursunuz. İlk olarak şablonu oluşturan şablona başvurursunuz. Daha sonra, kaynağı güncelleştirdiğinizde, kaynağa aynı adla başvurursunuz. Ancak, bir şablonda iki kaynak aynı ada sahipse Resource Manager bir özel durum oluşturur. Bu hatayı önlemek için, güncelleştirilmiş kaynağı bağlı veya kaynak türünü kullanan bir alt şablon olarak eklenen ikinci bir şablonda Microsoft.Resources/deployments belirtin.

İkinci şablonda, değiştireceğiniz özelliğin adını veya eklenecek özellik için yeni bir ad belirtmeniz gerekir. Ayrıca, değişmeyen özelliklerin adlarını ve özgün değerlerini de belirtmelisiniz. Özgün özelliklerden birini veya daha fazlasını belirtemezseniz, Resource Manager yeni bir kaynak oluşturmak istediğinizi varsayar ve özgün kaynağı siler.

Örnek şablon

Şimdi tekniği gösteren örnek bir şablona bakalım. Şablon, adlı firstVNet bir alt firstSubnetağa sahip adlı bir sanal ağ dağıtır. Ardından adlı nic1 bir sanal ağ arabirimi (NIC) dağıtır ve NIC'yi alt ağ ile ilişkilendirir. adlı dağıtım kaynağı, adlı updateVNetsecondSubnetikinci bir alt ağ ekleyerek güncelleştirilen firstVNet iç içe bir şablon içerir.

{
    "$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": {}
}

Kaynağımız firstVNet için kaynak nesnesini göz önünde bulundurun. İç içe yerleştirilmiş bir şablondaki ayarları yeniden belirttiğimize firstVNet dikkat edin; bunun nedeni, Resource Manager aynı şablonda aynı dağıtım adına izin vermemesi ve iç içe yerleştirilmiş şablonların farklı bir şablon olarak kabul edilmesidir. Kaynağımız firstSubnet için değerlerimizi yeniden belirterek, Resource Manager mevcut kaynağı silip yeniden dağıtmak yerine güncelleştirmesini söyleriz. Son olarak, için yeni ayarlarımız secondSubnet bu güncelleştirme sırasında alınır.

Şablonu deneyin

GitHub'da örnek bir şablon mevcuttur. Şablonu dağıtmak için aşağıdaki Azure CLI komutlarını çalıştırın:

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

Dağıtım tamamlandıktan sonra portalda belirttiğiniz kaynak grubunu açın. adlı bir sanal ağ ve adlı firstVNetnic1bir NIC görürsünüz. öğesine ve firstVNetardından öğesine tıklayın subnets. Başlangıçta oluşturulan öğesini firstSubnet ve kaynağa eklenmiş olanını secondSubnetupdateVNet görürsünüz.

Özgün alt ağ ve güncelleştirilmiş alt ağ

Ardından, kaynak grubuna geri dönün ve öğesine tıklayın nic1ve ardından öğesine tıklayın IP configurations. IP configurations bölümünde, subnet olarak ayarlanırfirstSubnet (10.0.0.0/24).

nic1 IP yapılandırma ayarları

Özgün firstVNet dosya yeniden oluşturulmak yerine güncelleştirildi. Yeniden oluşturulmuş olsaydı firstVNet , nic1 ile firstVNetilişkilendirilmezdi.

Sonraki adımlar