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.

Következő lépések

Tudnivalók a konfigurációkészlet-mintáról.