Megosztott változó fájlmintája
Csökkentse a Megosztott értékek ismétlődését a Bicep-fájlokban. Ehelyett töltse be ezeket az értékeket egy megosztott JSON-fájlból a Bicep-fájlba. Tömbök használatakor összefűzheti a megosztott értékeket a Bicep-kódban az üzembe helyezésre vonatkozó értékekkel.
Kontextus és probléma
A Bicep-kód írásakor előfordulhat, hogy olyan gyakori változók vannak, amelyeket több Bicep-fájlban újra felhasználhat. Az értékeket minden alkalommal duplikálhatja, amikor deklarálja az erőforrást, például másolhatja és beillesztheti az értékeket a Bicep-fájlok között. Ez a megközelítés azonban hibalehetőséget rejt, és ha módosításokat kell végeznie, frissítenie kell az egyes erőforrásdefiníciót, hogy szinkronban maradjon a többiekkel.
Emellett ha tömbökként definiált változókkal dolgozik, előfordulhat, hogy több Bicep-fájlban is közös értékeket használ, és konkrét értékeket is hozzá kell adnia az üzembe helyezni kívánt erőforráshoz. Ha a megosztott változókat az erőforrás-specifikus változókkal keveri, nehezebb megérteni a két változókat tartalmazó kategória különbségét.
Megoldás
Hozzon létre egy JSON-fájlt, amely tartalmazza a megosztani kívánt változókat. A függvény használatával loadJsonContent()
töltse be a fájlt, és férjen hozzá a változókhoz. Tömbváltozók esetén a függvénnyel kombinálhatja aconcat()
megosztott értékeket az adott erőforrás egyéni értékeivel.
1. példa: Előtagok elnevezése
Tegyük fel, hogy több Bicep-fájllal rendelkezik, amelyek erőforrásokat határoznak meg. Az összes erőforráshoz konzisztens elnevezési előtagot kell használnia.
Definiáljon egy JSON-fájlt, amely tartalmazza a vállalatra vonatkozó általános elnevezési előtagokat:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
A Bicep-fájlban deklaráljon egy változót, amely importálja a megosztott elnevezési előtagokat:
var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')
Az erőforrásnevek meghatározásakor sztringinterpolációval fűzze össze a megosztott névelőtagokat egyedi névelőtagokkal:
var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'
2. példa: Hálózati biztonsági csoport szabályai
Tegyük fel, hogy több Bicep-fájllal rendelkezik, amelyek saját hálózati biztonsági csoportokat (NSG-ket) definiálnak. Van egy közös biztonsági szabálykészlete, amelyet minden NSG-re alkalmazni kell, majd alkalmazásspecifikus szabályokat kell hozzáadnia.
Definiáljon egy JSON-fájlt, amely tartalmazza a vállalatra vonatkozó általános biztonsági szabályokat:
{
"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
]
}
A Bicep-fájlban deklaráljon egy változót, amely importálja a megosztott biztonsági szabályokat:
var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')
Hozzon létre egy változótömböt, amely az adott NSG egyéni szabályait jelöli:
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'
}
}
]
Határozza meg az NSG-erőforrást.
concat()
A függvénnyel kombinálhatja a két tömböt, és beállíthatja a tulajdonságotsecurityRules
:
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Megfontolandó szempontok
- Ha ezt a módszert használja, a JSON-fájl a Bicep által létrehozott ARM-sablonba kerül. A Bicep által létrehozott JSON ARM-sablonok fájlkorlátja 4 MB, ezért fontos elkerülni a nagy megosztott változófájlok használatát.
- Győződjön meg arról, hogy a megosztott változótömbök nem ütköznek az egyes Bicep-fájlokban megadott tömbértékekkel. Ha például a konfigurációkészlet-mintát használja a hálózati biztonsági csoportok meghatározására, győződjön meg arról, hogy nincs több olyan szabály, amely ugyanazt a prioritást és irányt határozza meg.