Použití objektů jako parametrů ve smyčce kopírování v Azure Resource Manager šablony
Při použití objektů jako parametru v Azure Resource Manager šablony je můžete zahrnout do smyčky kopírování, takže tady je příklad, který je tímto způsobem používá:
Tento přístup je velmi užitečný v kombinaci se smyčkou sériového kopírování,zejména při nasazování podřízených prostředků.
Předvedeme si to tak, že se podíváme na šablonu, která nasadí skupinu zabezpečení sítě (NSG) se dvěma pravidly zabezpečení.
Nejprve se podívejme na naše parametry. Když se podíváme na naši šablonu, uvidíme, že jsme definovali jeden parametr s názvem , který networkSecurityGroupsSettings obsahuje pole s názvem securityRules . Toto pole obsahuje dva objekty JSON, které určují počet nastavení pravidla zabezpečení.
{
"$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"
}
]
}
}
}
}
Teď se podívejme na naši šablonu. Máme prostředek s názvem deploys the NSG ,využívá také integrovanou funkci iterace vlastností ARM. Přidáním smyčky kopírování do oddílu properties prostředku v šabloně můžete dynamicky nastavit počet položek pro vlastnost během NSG1 nasazení. Také se vyhnete opakování syntaxe šablony.
{
"$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]"
}
}
]
}
}
]
}
Podívejme se blíže na to, jak v podřízeném prostředku zadáte hodnoty securityRules vlastností. Na všechny naše vlastnosti se odkazuje pomocí funkce a pak použijeme operátor tečky k odkazování na naše pole indexované aktuální parameters() securityRules hodnotou iterace. Nakonec použijeme další tečkový operátor, který odkazuje na název objektu.
Vyzkoušejte šablonu
Příklad šablony je k dispozici na GitHub. Pokud chcete šablonu nasadit, naklonujete úložiště a spustíte následující příkazy Azure CLI:
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
Další kroky
- Zjistěte, jak vytvořit šablonu, která iteruje polem objektů a transformuje ji na schéma JSON. Viz Implementace transformátoru vlastností a kolektoru v šabloně Azure Resource Manager dat.