Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Verminder de herhaling van gedeelde waarden in uw Bicep-bestanden. Laad in plaats daarvan deze waarden uit een gedeeld JSON-bestand in uw Bicep-bestand. Wanneer u matrices gebruikt, voegt u de gedeelde waarden samen met implementatiespecifieke waarden in uw Bicep-code.
Context en probleem
Wanneer u uw Bicep-code schrijft, hebt u mogelijk algemene variabelen die u opnieuw gebruikt in een set Bicep-bestanden. U kunt de waarden dupliceren telkens wanneer u de resource declareert, bijvoorbeeld door de waarden tussen uw Bicep-bestanden te kopiëren en te plakken. Deze benadering is echter foutgevoelig en wanneer u wijzigingen moet aanbrengen, moet u elke resourcedefinitie bijwerken om deze gesynchroniseerd te houden met de andere.
Als u werkt met variabelen die zijn gedefinieerd als matrices, hebt u mogelijk een set algemene waarden voor meerdere Bicep-bestanden en moet u ook specifieke waarden toevoegen voor de resource die u implementeert. Wanneer u de gedeelde variabelen combineert met de resourcespecifieke variabelen, is het moeilijker voor iemand om het onderscheid tussen de twee categorieën variabelen te begrijpen.
Oplossing
Maak een JSON-bestand met de variabelen die u wilt delen. Gebruik de loadJsonContent()
functie om het bestand te laden en toegang te krijgen tot de variabelen. Voor matrixvariabelen gebruikt u de concat()
functie om de gedeelde waarden te combineren met eventuele aangepaste waarden voor de specifieke resource.
Voorbeeld 1: Naamgevingsvoorvoegsels
Stel dat u meerdere Bicep-bestanden hebt die resources definiëren. U moet een consistent naamgevingsvoorvoegsel gebruiken voor al uw resources.
Definieer een JSON-bestand dat de algemene naamgevingsvoorvoegsels bevat die van toepassing zijn in uw bedrijf:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
Declareer in uw Bicep-bestand een variabele waarmee de gedeelde naamgevingsvoorvoegsels worden geïmporteerd:
var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')
Wanneer u de resourcenamen definieert, gebruikt u tekenreeksinterpolatie om de gedeelde naamvoorvoegsels samen te voegen met unieke naamachtervoegsels:
var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'
Voorbeeld 2: Regels voor netwerkbeveiligingsgroepen
Stel dat u meerdere Bicep-bestanden hebt die hun eigen netwerkbeveiligingsgroepen (NSG) definiëren. U hebt een algemene set beveiligingsregels die moeten worden toegepast op elke NSG en vervolgens hebt u toepassingsspecifieke regels die moeten worden toegevoegd.
Definieer een JSON-bestand dat de algemene beveiligingsregels bevat die van toepassing zijn in uw bedrijf:
{
"securityRules": [
{
"name": "Allow_RDP_from_company_IP_address",
"properties": {
"description": "Allow inbound RDP from the company's IP address range.",
"protocol": "Tcp",
"sourceAddressPrefix": "203.0.113.0/24",
"sourcePortRange": "*",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "3389",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
},
{
"name": "Allow_VirtualNetwork_to_Storage",
"properties": {
"description": "Allow outbound connections to the Azure Storage service tag.",
"protocol": "Tcp",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*",
"destinationAddressPrefix": "Storage",
"destinationPortRange": "*",
"access": "Allow",
"priority": 100,
"direction": "Outbound"
}
}
// other rules here
]
}
Declareer in uw Bicep-bestand een variabele waarmee de gedeelde beveiligingsregels worden geïmporteerd:
var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')
Maak een variabelematrix die de aangepaste regels voor deze specifieke NSG vertegenwoordigt:
var customRules = [
{
name: 'Allow_Internet_HTTPS_Inbound'
properties: {
description: 'Allow inbound internet connectivity for HTTPS only.'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '443'
sourceAddressPrefix: 'Internet'
destinationAddressPrefix: 'VirtualNetwork'
access: 'Allow'
priority: 400
direction: 'Inbound'
}
}
]
Definieer de NSG-resource. Gebruik de concat()
functie om de twee matrices te combineren en de securityRules
eigenschap in te stellen:
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Overwegingen
- Wanneer u deze methode gebruikt, wordt het JSON-bestand opgenomen in de ARM-sjabloon die door Bicep wordt gegenereerd. De JSON ARM-sjablonen die door Bicep worden gegenereerd, hebben een bestandslimiet van 4 MB, dus het is belangrijk om te voorkomen dat grote gedeelde variabelebestanden worden gebruikt.
- Zorg ervoor dat uw gedeelde variabelematrices niet conflicteren met de matrixwaarden die zijn opgegeven in elk Bicep-bestand. Als u bijvoorbeeld het patroon voor de configuratieset gebruikt om netwerkbeveiligingsgroepen te definiëren, moet u ervoor zorgen dat u niet meerdere regels hebt die dezelfde prioriteit en richting definiëren.