Objecten gebruiken als parameters in een kopieerlus in een Azure Resource Manager-sjabloon
Wanneer u objecten gebruikt als parameters in Azure Resource Manager-sjablonen (ARM-sjablonen), kunt u deze opnemen in een kopieerlus. Deze techniek is erg handig wanneer deze wordt gecombineerd met een seriële kopieerlus, met name voor het implementeren van onderliggende resources.
Laten we deze aanpak demonstreren door een sjabloon te bekijken waarmee een netwerkbeveiligingsgroep (NSG) met twee beveiligingsregels wordt geïmplementeerd.
Laten we eerst onze parameters bekijken. Wanneer we naar onze sjabloon kijken, zien we dat we één parameter met de naam networkSecurityGroupsSettings
hebben gedefinieerd die een matrix met de naam securityRules
bevat. Deze matrix bevat twee JSON-objecten, die elk instellingen specificeren waarmee een beveiligingsregel wordt gedefinieerd.
{
"$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 NSG1
die de NSG implementeert. Het maakt ook gebruik van de ingebouwde eigenschap iteratiefunctie 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 tijdens de implementatie dynamisch instellen. U voorkomt ook dat u de syntaxis van de sjabloon 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": {
"name": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].name]",
"properties": {
"description": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].description]",
"priority": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].priority]",
"protocol": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].protocol]",
"sourcePortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourcePortRange]",
"destinationPortRange": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationPortRange]",
"sourceAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].sourceAddressPrefix]",
"destinationAddressPrefix": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].destinationAddressPrefix]",
"access": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].access]",
"direction": "[parameters('networkSecurityGroupsSettings').securityRules[copyIndex('securityRules')].direction]"
}
}
}
]
}
}
]
}
Laten we eens kijken hoe we onze eigenschapswaarden opgeven in de securityRules
onderliggende resource. Naar al onze eigenschappen wordt verwezen met behulp van de parameters()
functie. Vervolgens gebruiken we de puntoperator om te verwijzen naar onze securityRules
matrix en indexeren we deze op basis van de huidige waarde van de iteratie. Ten slotte gebruiken we een andere puntoperator om te verwijzen naar de naam van het object.
Probeer de sjabloon
Er is een voorbeeldsjabloon beschikbaar op GitHub. Als u de sjabloon wilt implementeren, kloont u de opslagplaats 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
- Azure Resource Manager
- Wat zijn ARM-sjablonen?
- Zelfstudie: uw eerste ARM-sjabloon maken en implementeren
- Zelfstudie: Een resource aan uw ARM-sjabloon toevoegen
- Best practices voor ARM-sjablonen
- Documentatie voor Azure Resource Manager
- Documentatie voor ARM-sjablonen