Paraméterek és kimenetek hozzáadása modulokhoz

Befejeződött

Minden létrehozott modulnak egyértelmű rendeltetéssel kell rendelkeznie. Gondoljon úgy egy modulra, mint egy szerződésre. Elfogadja a paraméterek egy készletét, létrehoz egy erőforráskészletet, és visszaadhat néhány kimenetet a szülősablonnak. Bárki is használja a modult, nem kell aggódnia amiatt, hogy hogyan működik, csak azért, hogy azt tegye, amit várnak.

Modul tervezésekor vegye figyelembe a következő szempontokat:

  • Amit tudnia kell ahhoz, hogy teljesíteni tudja a modul célját.
  • Amit mindenki, aki felhasználja a modult, elvárja, hogy megadja.
  • A modult használó összes felhasználó várhatóan kimenetként fog hozzáférni.

Modulparaméterek

Gondolja át, hogy a modul mely paramétereket fogadja el, és hogy az egyes paramétereknek kötelezőnek vagy kötelezőnek kell-e lenniük.

Amikor paramétereket hoz létre a sablonokhoz, célszerű olyan alapértelmezett paramétereket hozzáadni, ahol csak lehet. A modulokban nem mindig olyan fontos az alapértelmezett paraméterek hozzáadása, mert a modult egy szülősablon fogja használni, amely saját alapértelmezett paramétereket használhat. Ha mindkét fájlban hasonló paraméterekkel rendelkezik, mindkettő alapértelmezett értékkel rendelkezik, a sablon felhasználói nehezen tudják megállapítani, hogy melyik alapértelmezett érték lesz alkalmazva, és kikényszeríthető a konzisztencia. Gyakran jobb, ha hagyja meg az alapértelmezett értéket a szülősablonon, és távolítsa el a modulból.

Azt is át kell gondolnia, hogyan kezelheti az erőforrások termékváltozatait és más fontos konfigurációs beállításokat vezérlő paramétereket. Önálló Bicep-sablon létrehozásakor gyakori, hogy üzleti szabályokat ágyaz be a sablonba. Például: Éles környezet üzembe helyezésekor a tárfióknak a GRS-szintet kell használnia. A modulok azonban néha eltérő aggodalmakat vetnek fel.

Ha olyan modult készít, amelyet újrahasználhatónak és rugalmasnak kell lennie, ne feledje, hogy az egyes szülősablonokra vonatkozó üzleti szabályok eltérőek lehetnek, ezért nem feltétlenül érdemes az üzleti szabályokat általános modulokba ágyazni. Fontolja meg az üzleti szabályok meghatározását a szülősablonban, majd explicit módon adja át a modulkonfigurációt paramétereken keresztül.

Ha azonban olyan modult hoz létre, amelynek célja, hogy megkönnyítse a saját szervezete számára az ön igényeinek megfelelő erőforrások üzembe helyezését, érdemes üzleti szabályokat is befoglalni a szülősablonok egyszerűsítése érdekében.

Bármilyen paramétert is tartalmaz a modul, az attribútum használatával adjon hozzá egy értelmezhető leírást @description :

@description('The name of the storage account to deploy.')
param storageAccountName string

Feltételek használata

Az infrastruktúra a Bicep-hez hasonló kóddal történő üzembe helyezésének egyik célja, hogy elkerülje a duplikálást, vagy akár több sablont is létrehoz ugyanazon vagy hasonló célokra. A Bicep funkciói hatékony eszközkészletet biztosítanak a különböző helyzetekhez használható újrafelhasználható modulok létrehozásához. Az olyan funkciók, mint a modulok, kifejezések, alapértelmezett paraméterértékek és feltételek kombinálásával újrahasználható kódot hozhat létre, amely biztosítja a szükséges rugalmasságot.

Tegyük fel, hogy egy Azure Cosmos DB-fiókot üzembe helyező modult hoz létre. Amikor üzembe helyezi az éles környezetben, konfigurálnia kell a fiókot, hogy a naplóit egy Log Analytics-munkaterületre küldje. A Log Analyticsnek küldendő naplók konfigurálásához meg kell adnia egy diagnosztikai Gépház erőforrást.

A követelményt úgy érheti el, hogy hozzáad egy feltételt az erőforrás-definícióhoz, és opcionálissá teszi a munkaterület-azonosító paramétert egy alapértelmezett érték hozzáadásával:

param logAnalyticsWorkspaceId string = ''

resource cosmosDBAccount 'Microsoft.DocumentDB/databaseAccounts@2022-08-15' = {
  // ...
}

resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' =  if (logAnalyticsWorkspaceId != '') {
  scope: cosmosDBAccount
  name: 'route-logs-to-log-analytics'
  properties: {
    workspaceId: logAnalyticsWorkspaceId
    logs: [
      {
        category: 'DataPlaneRequests'
        enabled: true
      }
    ]
  }
}

Ha ezt a modult egy Bicep-sablonba is belefoglalja, egyszerűen konfigurálhatja úgy, hogy az Azure Cosmos DB-fióknaplókat elküldje a Log Analyticsnek egy munkaterület-azonosító beállításával. Vagy ha nincs szüksége naplókra az üzembe helyezendő környezethez, hagyja ki a paramétert. Alapértelmezett értéke van. A modul befoglalja a követelmények megfelelő végrehajtásához szükséges logikát.

Tipp.

Ne feledje tesztelni, hogy a sablon érvényes-e mindkét forgatókönyvre; ha az if utasítás kiértékelése vagy true false.

Modulkimenetek

A modulok meghatározhatnak kimeneteket. Érdemes létrehozni egy kimenetet a szülősablon által esetleg használni kívánt információkhoz. Ha például a modul egy tárfiókot határoz meg, érdemes lehet létrehozni egy kimenetet a tárfiók nevére, hogy a szülősablon hozzáférhessen.

Figyelmeztetés

Ne használjon kimeneteket titkos értékekhez. A kimenetek az üzembe helyezési előzmények részeként vannak naplózva, így nem megfelelőek a biztonságos értékekhez. Ehelyett fontolja meg az alábbi lehetőségek egyikét:

  • Adjon meg egy kimenetet az erőforrás nevének megadásához. Ezután a szülősablon létrehozhat egy ilyen nevű erőforrást existing , és dinamikusan megkeresheti a biztonságos értéket.
  • Írja be az értéket egy Azure Key Vault-titkos kódba. Ha szüksége van rá, olvassa el a szülősablont a tárolóból.

A szülősablonok modulkimeneteket használhatnak változókban, használhatnak tulajdonságokat más erőforrásdefiníciókhoz, vagy közzétehetik a változókat és tulajdonságokat kimenetként. A Bicep-fájlok kimeneteinek felfedésével és használatával újrahasználható Bicep-modulkészleteket hozhat létre, amelyek megoszthatók a csapatával, és több üzembe helyezés során újra felhasználhatók. Az attribútum használatával célszerű értelmes leírást is hozzáadni a @description kimenetekhez:

@description('The fully qualified Azure resource ID of the blob container within the storage account.')
output blobContainerResourceId string = storageAccount::blobService::container.id

Tipp.

Dedikált szolgáltatásokat is használhat a Bicep-sablon által létrehozott beállítások tárolására, kezelésére és elérésére. A Key Vault biztonságos értékek tárolására lett tervezve. Azure-alkalmazás Konfiguráció más (nem biztonságos) értékek tárolására szolgál.

Modulok összefűzése

Gyakori, hogy egy szülő Bicep-fájlt hoz létre, amely több modult foglal össze. Tegyük fel például, hogy egy új Bicep-sablont hoz létre a dedikált virtuális hálózatokat használó virtuális gépek üzembe helyezéséhez. Létrehozhat egy modult egy virtuális hálózat definiálásához. Ezután felveheti a virtuális hálózat alhálózati erőforrás-azonosítóját a modul kimeneteként, és használhatja a virtuálisgép-modul bemeneteként:

@description('Username for the virtual machine.')
param adminUsername string

@description('Password for the virtual machine.')
@minLength(12)
@secure()
param adminPassword string

module virtualNetwork 'modules/vnet.bicep' = {
  name: 'virtual-network'
}

module virtualMachine 'modules/vm.bicep' = {
  name: 'virtual-machine'
  params: {
    adminUsername: adminUsername
    adminPassword: adminPassword
    subnetResourceId: virtualNetwork.outputs.subnetResourceId
  }
}

Ebben a példában szimbolikus neveket használunk a modulok közötti hivatkozáshoz. Ez a hivatkozás segít a Bicepnek a modulok közötti kapcsolatok automatikus megértésében.

Mivel a Bicep megérti, hogy függőség van, a modulokat egymás után helyezi üzembe:

  1. A Bicep mindent üzembe helyez a virtualNetwork modulban.
  2. Ha az üzembe helyezés sikeres, a Bicep hozzáfér a subnetResourceId kimeneti értékhez, és paraméterként továbbítja azt a virtualMachine modulnak.
  3. A Bicep mindent üzembe helyez a virtualMachine modulban.

Megjegyzés:

Amikor egy modultól függ, a Bicep megvárja, amíg a teljes modul üzembe helyezése befejeződik. Ezt fontos megjegyezni a modulok tervezésekor. Ha olyan modult hoz létre, amely olyan erőforrást határoz meg, amely hosszú ideig tart az üzembe helyezésig, a modultól függő egyéb erőforrások megvárják, amíg a teljes modul üzembe helyezése befejeződik.