Objektumok használata paraméterként egy másolási hurokban egy Azure Resource Manager sablonban

Ha objektumokat használ paraméterként a Azure Resource Manager sablonokban, akkor ezeket egy másolási hurokba is bele kell foglalnia, ezért az alábbi példa a következő módon használja őket:

Ez a megközelítés nagyon hasznos a soros másolási ciklussal kombinálva,különösen a gyermekerőforrások üzembe helyezéséhez.

Ennek szemléltetéhez nézzünk meg egy sablont, amely egy hálózati biztonsági csoportot (NSG- t) helyez üzembe két biztonsági sszabályokkal.

Először is vessünk egy pillantást a paraméterekre. A sablonban látni fogjuk, hogy definiáltunk egy nevű paramétert, amely tartalmaz networkSecurityGroupsSettings egy nevű securityRules tömböt. Ez a tömb két JSON-objektumot tartalmaz, amelyek számos beállítást határoznak meg egy biztonsági szabályhoz.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters":{
        "networkSecurityGroupsSettings": {
            "value": {
                "securityRules": [
                    {
                        "name": "RDPAllow",
                        "description": "allow RDP connections",
                        "direction": "Inbound",
                        "priority": 100,
                        "sourceAddressPrefix": "*",
                        "destinationAddressPrefix": "10.0.0.0/24",
                        "sourcePortRange": "*",
                        "destinationPortRange": "3389",
                        "access": "Allow",
                        "protocol": "Tcp"
                    },
                    {
                        "name": "HTTPAllow",
                        "description": "allow HTTP connections",
                        "direction": "Inbound",
                        "priority": 200,
                        "sourceAddressPrefix": "*",
                        "destinationAddressPrefix": "10.0.1.0/24",
                        "sourcePortRange": "*",
                        "destinationPortRange": "80",
                        "access": "Allow",
                        "protocol": "Tcp"
                    }
                ]
            }
        }
    }
}

Most vessünk egy pillantást a sablonra. Van egy nevű erőforrásunk, amely telepíti az NSG-t, és az ARM beépített tulajdonság-iterációs funkcióját is kihasználja. Ha a sablonban található erőforrás tulajdonságok szakaszát másolási hurokkal bővíti, dinamikusan beállíthatja egy tulajdonság elemeinek számát az üzembe helyezés NSG1 során. NSG1 A sablonszintaxis megismétlését is elkerülheti.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "VNetSettings": {
            "type": "object"
        },
        "networkSecurityGroupsSettings": {
            "type": "object"
        }
    },
    "resources": [
        {
            "apiVersion": "2020-05-01",
            "type": "Microsoft.Network/virtualNetworks",
            "name": "[parameters('VNetSettings').name]",
            "location": "[resourceGroup().location]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "[parameters('VNetSettings').addressPrefixes[0].addressPrefix]"
                    ]
                },
                "subnets": [
                    {
                        "name": "[parameters('VNetSettings').subnets[0].name]",
                        "properties": {
                            "addressPrefix": "[parameters('VNetSettings').subnets[0].addressPrefix]"
                        }
                    },
                    {
                        "name": "[parameters('VNetSettings').subnets[1].name]",
                        "properties": {
                            "addressPrefix": "[parameters('VNetSettings').subnets[1].addressPrefix]"
                        }
                    }
                ]
            }
        },
        {
            "apiVersion": "2020-05-01",
            "type": "Microsoft.Network/networkSecurityGroups",
            "name": "NSG1",
            "location": "[resourceGroup().location]",
            "properties": {
                "copy": [
                    {
                        "name": "securityRules",
                        "count": "[length(parameters('networkSecurityGroupsSettings').securityRules)]",
                        "input": {
                            "description": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].description]",
                            "priority": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].priority]",
                            "protocol": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].protocol]",
                            "sourcePortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].sourcePortRange]",
                            "destinationPortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].destinationPortRange]",
                            "sourceAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].sourceAddressPrefix]",
                            "destinationAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].destinationAddressPrefix]",
                            "access": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].access]",
                            "direction": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex()].direction]"
                        }
                    }
                ]
            }
        }
    ]
}

Nézzük meg közelebbről, hogyan adhatja meg a tulajdonságértékeket a securityRules gyermekerőforrásban. Az összes tulajdonságra a függvénnyel hivatkozunk, majd a pont operátorral hivatkozunk a tömbre, amelyet az iteráció aktuális parameters()securityRules értéke indexel. Végül egy másik pont operátorral hivatkozunk az objektum nevére.

A sablon kipróbálva

Egy példasablon érhető el a következő GitHub. A sablon üzembe helyezéséhez klónozza az erőforrástárat, és futtassa a következő Azure CLI-parancsokat:

git clone https://github.com/mspnp/template-examples.git
cd template-examples/example3-object-param
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/example3-object-param/deploy.json \
    --parameters deploy.parameters.json

Következő lépések