Azure Resource Manager şablonunda kaynak güncelleştirme

Dağıtım sırasında kaynağı güncelleştirmeniz gereken bazı senaryolar vardır. Diğer bağımlı kaynaklar oluşturulana kadar bir kaynağın tüm özelliklerini belirtemediğiniz durumlarda bu senaryoyla karşılaşabilirsiniz. Örneğin, bir yük dengeleyici için bir arka uç havuzu oluşturmanız, sanal makineleriniz (VM) üzerindeki ağ arabirimlerini (CS) arka uç havuzuna dahil etmek için güncelleştirebilirsiniz. Ayrıca Resource Manager kaynakları güncelleştirme desteği sunarken, hatalardan kaçınmak ve dağıtımın bir güncelleştirme olarak işleniyor olduğundan emin olmak için şablonlarınızı doğru tasarlamanız gerekir.

İlk olarak, şablonu oluşturmak için kaynağa bir kez başvurarak kaynağa daha sonra güncelleştirmek için aynı adla başvurabilirsiniz. Ancak, bir şablonda iki kaynak aynı ada sahipse Resource Manager özel durum oluşturur. Bu hatayı önlemek için güncelleştirilmiş kaynağı, kaynak türünü kullanarak bağlantılı veya alt platform olarak dahil edilen ikinci bir Microsoft.Resources/deployments şablonda belirtin.

İkincisi, değiştirmek için var olan özelliğin adını veya iç içe geçmiş şablona eklemek istediğiniz özellik için yeni bir ad belirtmeniz gerekir. Ayrıca özgün özellikleri ve bunların özgün değerlerini de belirtmeniz gerekir. Özgün özellikleri ve değerleri sağlayamasanız Resource Manager yeni bir kaynak oluşturmak istediğiniz kabul eder ve özgün kaynağı siler.

Örnek şablon

Şimdi bunu gösteren örnek bir şablona bakalım. Şablonumuz adlı bir alt ağa sahip firstVNet olan adlı bir sanal ağ firstSubnet dağıtır. Ardından adlı bir sanal ağ arabirimi (NIC) dağıtır nic1 ve bunu alt ağımız ile ilişkilendirer. Ardından adlı bir dağıtım updateVNet kaynağı, adlı ikinci bir alt ağ ekleyerek firstVNet kaynağımızı güncelleştirmeye devam ediyor olan iç içe bir şablon secondSubnet 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": {}
}

İlk olarak kaynağımızın kaynak nesnesine göz firstVNet atabilirsiniz. İç içe bir şablonda kendi ayarlarımızı yeniden belirttiğinize dikkat edin; bunun nedeni Resource Manager aynı şablon içinde aynı dağıtım adına izin vermeyerek iç içe geçmiş şablonların farklı bir şablon olarak kabul edilir firstVNet olmasıdır. Kaynağımız için değerlerimizi tekrar belirterek, Resource Manager silmek ve yeniden Resource Manager yerine mevcut kaynağı firstSubnet güncelleştirmesini söylüyoruz. Son olarak, için yeni secondSubnet ayarlarımız bu güncelleştirme sırasında kullanılır.

Şablonu deneyin

üzerinde örnek bir şablon GitHub. Ş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 tamam olduktan sonra portalda belirttiğiniz kaynak grubunu açın. adlı bir sanal ağ ve firstVNet adlı bir NIC nic1 görüyorsunuz. 'a firstVNet ve ardından 'a subnets tıklayın. İlk firstSubnet olarak oluşturulan'i ve secondSubnet kaynağa eklenmiş olan 'i updateVNet görüyorsunuz.

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

Ardından kaynak grubuna geri dönüp'e ve nic1 ardından 'a IP configurations tıklayın. bölümünde IP configurations olarak subnetfirstSubnet (10.0.0.0/24) ayarlanır.

nic1 IP yapılandırma ayarları

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

Sonraki adımlar