Objecten gebruiken als parameters in een kopieerlus in een Azure Resource Manager sjabloon
Wanneer u objecten als parameter in Azure Resource Manager sjablonen wilt opnemen in een kopieerlus. Dit is dus een voorbeeld waarin ze op die manier worden gebruikt:
Deze aanpak wordt zeer nuttig in combinatie met de seriële kopieerlus,met name voor het implementeren van onderliggende resources.
Om dit te demonstreren, bekijken we een sjabloon die een netwerkbeveiligingsgroep (NSG) met twee beveiligingsregels implementeert.
Laten we eerst onze parameters eens bekijken. Wanneer we onze sjabloon bekijken, zien we dat we één parameter met de naam hebben gedefinieerd die een matrix met networkSecurityGroupsSettings de naam securityRules bevat. Deze matrix bevat twee JSON-objecten die een aantal instellingen voor een beveiligingsregel opgeven.
{
"$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"
}
]
}
}
}
}
Laten we nu onze sjabloon eens bekijken. We hebben een resource met de naam die de NSG implementeert. Deze maakt ook gebruik van de ingebouwde functie voor iteratie van eigenschappen van ARM. Door een kopieerlus toe te voegen aan de sectie Eigenschappen van een resource in uw sjabloon, kunt u het aantal items voor een eigenschap dynamisch instellen tijdens de NSG1 implementatie. U voorkomt ook dat u sjabloonsyntaxis moet herhalen.
{
"$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]"
}
}
]
}
}
]
}
Laten we eens kijken hoe we de eigenschapswaarden in de onderliggende securityRules resource opgeven. Naar al onze eigenschappen wordt verwezen met behulp van de functie en vervolgens gebruiken we de puntoperator om te verwijzen naar onze matrix, geïndexeerd door de huidige waarde van parameters() securityRules de iteratie. Ten slotte gebruiken we een andere puntoperator om te verwijzen naar de naam van het object.
De sjabloon uitproberen
Er is een voorbeeldsjabloon beschikbaar op GitHub. Als u de sjabloon wilt implementeren, kloont u de repo en voert u de volgende Azure CLI-opdrachten uit:
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
Volgende stappen
- Meer informatie over het maken van een sjabloon die een objectmatrix doormaakt en deze transformeert in een JSON-schema. Zie Implement a property transformer and collector in an Azure Resource Manager template (Een eigenschappentransformator en -collector implementeren in Azure Resource Manager sjabloon)