Bicep modules

Bicep segítségével modulokba rendezheti az üzembe helyezéseket. A modul csak egy Bicep-fájl, amely egy másik Bicep-fájlból van telepítve. A modulokkal javíthatja a Bicep-fájlok olvashatóságát azáltal, hogy a központi telepítés összetett részleteit is beágyazi. A modulokat egyszerűen újra felhasználhatja a különböző környezetekbe.

Ha modulokat kell megosztania a szervezet más tagjaival, hozzon létre egy sablon specifikációját vagy privát beállításjegyzékét. A beállításjegyzékben található sablonokkal és modulokkal csak a megfelelő engedélyekkel rendelkező felhasználók érhetők el.

Tipp

A sablonokkal és a magánjellegű beállításokkal való választás főként preferencia kérdése. Ha más projekttervek nélkül telepít sablonokat vagy Bicep-fájlokat, a sablonokkal egyszerűbben tervezheti meg a fájlokat. Ha projekt-összetevőket telepít a sablonokkal vagy Bicep-fájlokkal, integrálhatja a privát beállításjegyzéket a fejlesztői munkával, majd könnyebben telepítheti őket a beállításjegyzékből.

Bicep modules are converted into a single Azure Resource Manager template with nested templates.

Microsoft Learn

Ha inkább részletes útmutatást szeretne megtudni a modulokról, olvassa el a Kompatibilitási Bicep-fájlok létrehozása modulokkal a Microsoft Learn szolgáltatásban.

Definíció szintaxisa

A modul meghatározásának alapszintaxisa a következő:

module <symbolic-name> '<path-to-file>' = {
  name: '<linked-deployment-name>'
  params: {
    <parameter-names-and-values>
  }
}

Egy egyszerű, valós példa így néz ki:

module stgModule '../storageAccount.bicep' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

A szimbolikus névvel hivatkozhat a modulra a Bicep-fájl egy másik részén. A szimbolikus névvel például kihasználhatja a kimenetet egy modulból. A szimbolikus név lehet a-z, A-Z, 0-9 és aláhúzásjel ( _ ). A név nem kezdődhet számmal. Egy modul neve nem lehet azonos paraméterrel, változóval vagy erőforrással.

Az elérési út lehet egy helyi fájl vagy egy beállításjegyzékben található fájl. További információt az Elérési út a modulhoz .

A név tulajdonságot kötelező megadni. Ez lesz a beágyazott telepítési erőforrás neve a létrehozott sablonban.

Ha a fő fájl hatóköre által megadott hatókörtől eltérő hatókört szeretne megadni, vegye fel a hatókör tulajdonságot. További információ: Modul hatókörének beállítása.

// deploy to different scope
module <symbolic-name> '<path-to-file>' = {
  name: '<linked-deployment-name>'
  scope: <scope-object>
  params: {
    <parameter-names-and-values>
  }
}

Modul feltételes telepítéséhezadjon hozzá egy kifejezést. A használat hasonló az erőforrások feltételes telepítéséhez.

// conditional deployment
module <symbolic-name> '<path-to-file>' = if (<condition-to-deploy>) {
  name: '<linked-deployment-name>'
  params: {
    <parameter-names-and-values>
  }
}

Ha egy modulnak több példányát is üzembe szeretne helyezni, adja hozzá a kifejezést. A javítással megadhatja, hogy a példányok példányai megfelelően vagy párhuzamosan batchSize vannak-e telepítve. További információ: Iteratív hurkok Bicepben.

// iterative deployment
@batchSize(int) // optional decorator for serial deployment
module <symbolic-name> '<path-to-file>' = [for <item> in <collection>: {
  name: '<linked-deployment-name>'
  params: {
    <parameter-names-and-values>
  }
}]

Az erőforrásokhoz hasonló a modulok telepítése párhuzamosan, hacsak nem függnek más moduloktól vagy erőforrásoktól. Általában nem kell beállítania a függőségeket, mivel azok implicit módon vannak meghatározva. Ha explicit függőséget kell beállítania, hozzáadhatja a dependsOn moduldefiníciót. A függőségekkel kapcsolatos további információkért lásd: Erőforrásfüggőségek.

module <symbolic-name> '<path-to-file>' = {
  name: '<linked-deployment-name>'
  params: {
    <parameter-names-and-values>
  }
  dependsOn: [
    <symbolic-names-to-deploy-before-this-item>
  ]
}

Modul elérési útja

A modul fájlja lehet egy helyi vagy egy külső fájl. A külső fájl lehet sablon specifikációja vagy a Bicep modul beállításjegyzékében. Az alábbiakban mindezeket a lehetőségeket mutatjuk be.

Helyi fájl

Ha a modul helyi fájl,adjon meg egy relatív elérési utat a fájlhoz. A Bicepben minden elérési utat perjel (/) címtárelválasztóval kell megadni az egységes összeállítás érdekében a platformok között. A Windows (\) karakter nem támogatott. Az elérési utak szóközt tartalmazhatnak.

Egy olyan fájl központi telepítéséhez például, amely a címtárban egy szinttel magasabb szinten található a fő fájlból, használja az alábbit:

module stgModule '../storageAccount.bicep' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

Fájl a beállításjegyzékben

Ha már közzétett egy modult egy beállításjegyzékben,hivatkozhat a modulra. Adja meg az Azure tároló beállításjegyzékének nevét és a modul elérési útját. Adja meg a modul elérési útját a következő szintaxissal:

module <symbolic-name> 'br:<registry-name>.azurecr.io/<file-path>:<tag>' = {
  • a br a Bicep beállításjegyzék sémaneve.
  • A fájl elérési útját az Azure Container Registry szolgáltatásban hívjuk meg. A fájl elérési útja tartalmazhat karakterrel elválasztott szegmenseket.
  • A címke a modul verziójának megadására használatos.

Például:

module stgModule 'br:exampleregistry.azurecr.io/bicep/modules/storage:v1' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

Amikor egy modulra hivatkozik egy beállításjegyzékben, a Bicep bővítmény a Visual Studio kódban automatikusan a bicep restore (adatbázis-visszaállítás) hívást hívja a külső modul helyi gyorsítótárba másolásához. A külső modul visszaállítása kis időt igénybe vesz. Ha a modul intellisense nem működik azonnal, várja meg, amíg befejeződik a visszaállítás.

A beállításjegyzékben egy modul teljes elérési útja hosszú lehet. Ahelyett, hogy minden alkalommal a teljes elérési utat használjuk, amikor használni szeretné a modult, konfigurálhatja az aliasokat a bicepconfig.json fájlban. Az aliasok megkönnyítik a modulra való hivatkozást. Aliassal például lerövidítheti az elérési utat:

module stgModule 'br/ContosoModules:storage:v1' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

Fájl a sablon specifikációjában

Miután létrehozott egy sablont,egy modulban csatolhatja a sablon specifikációját. Adja meg a sablon specifikációját a következő formátumban:

module <symbolic-name> 'ts:<sub-id>/<rg-name>/<template-spec-name>:<version>' = {

Egyszerűsítheti azonban a Bicep-fájlt, ha létrehoz egy aliast a sablon specifikációit tartalmazó erőforráscsoport számára. Alias használata esetén a szintaxis a következő lesz:

module <symbolic-name> 'ts/<alias>:<template-spec-name>:<version>' = {

Az alábbi modul egy sablon specifikációját telepíti tárhelyfiók létrehozásához. A sablon specifikációjának előfizetését és erőforráscsoportját a ContosoSpecsnevű alias tartalmazza.

module stgModule 'ts/ContosoSpecs:storageSpec:2.0' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

Paraméterek

A moduldefinícióban megadott paraméterek megegyeznek a Bicep-fájl paramétereivel.

Az alábbi Bicep példában három paraméter található: storagePrefix, storageSKU és location. A storageSKU paraméternek van egy alapértelmezett értéke, így nem kell értéket adnia a paraméterhez a telepítés során.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Az előző példa modulként való alkalmazásához adja meg az adott paraméterek értékeit.

targetScope = 'subscription'

@minLength(3)
@maxLength(11)
param namePrefix string

resource demoRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
  name: 'demogroup1'
}

module stgModule '../create-storage-account/main.bicep' = {
  name: 'storageDeploy'
  scope: demoRG
  params: {
    storagePrefix: namePrefix
    location: demoRG.location
  }
}

output storageEndpoint object = stgModule.outputs.storageEndpoint

Modul hatókörének beállítása

Amikor deklar egy modult, megszabadhatja annak a modulnak a hatókörét, amely eltér a Bicep-fájl hatókörét. A tulajdonság scope használatával állítsa be a modul hatókörét. Ha a hatókörtulajdonság nincs megtéve, a modul a szülő cél hatókörében lesz telepítve.

Az alábbi Bicep-fájl létrehoz egy erőforráscsoportot és egy tárfiókot abban az erőforráscsoportban. A fájl egy előfizetésre van telepítve, de a modul hatóköre az új erőforráscsoportra terjed ki.

// set the target scope for this file
targetScope = 'subscription'

@minLength(3)
@maxLength(11)
param namePrefix string

param location string = deployment().location

var resourceGroupName = '${namePrefix}rg'

resource newRG 'Microsoft.Resources/resourceGroups@2021-04-01' = {
  name: resourceGroupName
  location: location
}

module stgModule '../create-storage-account/main.bicep' = {
  name: 'storageDeploy'
  scope: newRG
  params: {
    storagePrefix: namePrefix
    location: location
  }
}

output storageEndpoint object = stgModule.outputs.storageEndpoint

A következő példa két különböző erőforráscsoportban telepíti a tárfiókokat. Mindkét erőforráscsoportnak már léteznie kell.

targetScope = 'subscription'

resource firstRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
  name: 'demogroup1'
}

resource secondRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
  name: 'demogroup2'
}

module storage1 '../create-storage-account/main.bicep' = {
  name: 'westusdeploy'
  scope: firstRG
  params: {
    storagePrefix: 'stg1'
    location: 'westus'
  }
}

module storage2 '../create-storage-account/main.bicep' = {
  name: 'eastusdeploy'
  scope: secondRG
  params: {
    storagePrefix: 'stg2'
    location: 'eastus'
  }
}

Állítsa a hatókör tulajdonságát érvényes hatókör-objektumra. Ha a Bicep-fájl erőforráscsoportot, előfizetést vagy felügyeleti csoportot telepít, beállíthatja a modul hatókörét az erőforrás szimbolikus nevére. A hatókör-függvényekkel érvényes hatókört is kaphat.

Ezek a függvények a következőek:

Az alábbi példa a managementGroup függvényt használva adja meg a hatókört.

param managementGroupName string

module mgDeploy 'main.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

Kimenet

Az értékeket a fő Bicep-fájlban használhatja egy modulból. Ha egy modulból kimenetértéket kap, használja outputs a modulobjektum tulajdonságát.

Az első példa létrehoz egy tárfiókot, és visszaadja az elsődleges végpontokat.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Ha modulként használja, ezt a kimeneti értéket kaphatja meg.

targetScope = 'subscription'

@minLength(3)
@maxLength(11)
param namePrefix string

resource demoRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
  name: 'demogroup1'
}

module stgModule '../create-storage-account/main.bicep' = {
  name: 'storageDeploy'
  scope: demoRG
  params: {
    storagePrefix: namePrefix
    location: demoRG.location
  }
}

output storageEndpoint object = stgModule.outputs.storageEndpoint

További lépések