Erőforrások üzembe helyezése több hatókörben

Befejeződött

Néha a hierarchia több szintjén is üzembe kell helyeznie az erőforrásokat egy üzembe helyezésen belül. Íme néhány olyan helyzet, amikor ezt érdemes elvégeznie:

  • Az erőforrásokat két különböző erőforráscsoportban kell üzembe helyeznie. Létrehozhat például egy hálózati biztonsági csoportot egy megosztott erőforráscsoportban, és üzembe helyezhet egy hálózati adaptert egy virtuális géphez az alkalmazás erőforráscsoportjában.
  • Sablon használatával létrehoz egy erőforráscsoportot, amely egy előfizetés-hatókörű erőforrás, majd egy tárfiókot és más Azure-erőforrásokat szeretne üzembe helyezni az adott erőforráscsoportban egy erőforráscsoport hatókörű üzembe helyezésével.
  • Felügyeleticsoport-hierarchiát helyez üzembe, és néhány előfizetést is üzembe szeretne helyezni, amelyek bérlői hatókörű erőforrások.

A Bicep használatával olyan üzembe helyezést hozhat létre, amely több hatókörön keresztül működik a scope kulcsszó használatával.

Megjegyzés:

Az egység parancsai a fogalmakat szemléltetik. Még ne futtassa a parancsokat. Hamarosan gyakorolja, amit itt tanul.

Modul hatókörének megadása

A Bicep-modulok használatával olyan erőforráskészletet helyezhet üzembe, amely eltér a targetScope fájlban megadotttól. Íme egy példa Bicep-fájl, amely egy targetScopesubscriptionadott erőforrással együtt van üzembe helyezve, de egy modul használatával üzembe helyez néhány erőforrást egy erőforráscsoportban:

targetScope = 'subscription'

module networkModule 'modules/network.bicep' = {
  scope: resourceGroup('ToyNetworking')
  name: 'networkModule'
}

Figyelje meg, hogy a scope tulajdonság egy Bicep-függvény használatával segít azonosítani a megcélzandó hatókört. Az előző példa a függvényt resourceGroup() használja, és megadja a megcélzandó erőforráscsoport nevét. A , managementGroup()és tenant() függvényeket subscription()is használhatja. A Bicep-fájlok kulcsszójának és a scope modulok kulcsszójának használatával targetScope számos különböző hatókör-kombinációt hozhat létre az üzemelő példányokhoz.

Megjegyzés:

Az egyik kivétel az, hogy a Bicep-fájlok targetScope egy vagy resourceGroupsubscription több modult scope nem tartalmazhatnak managementGroup.

Tipp.

Ha előfizetés-hatókörű Bicep-fájlt használ egy erőforráscsoport létrehozásához, az erőforráscsoport szimbolikus nevét használhatja modulként scope . A következő gyakorlatban látni fogja, hogyan teheti ezt meg.

Üzembe helyezés több erőforráscsoportban

A hatókörök gyakran használják az erőforrások több erőforráscsoportban való üzembe helyezését. Bár a legtöbb Azure-erőforráson nem tudja beállítani a scope tulajdonságot, modulokkal jelezheti a Bicepnek, hogy egy erőforráskészletet egy másik erőforráscsoportban kell üzembe helyezni.

Létrehozhat például egy olyan Bicep-fájlkészletet, amely üzembe helyez egy virtuális hálózatot és annak társított erőforrásait egy ToyNetworking nevű megosztott erőforráscsoportban, majd üzembe helyez egy hálózati adaptert egy másik erőforráscsoportban. Így néz ki a Bicep-fájl:

module networkModule 'modules/network.bicep' = {
  scope: resourceGroup('ToyNetworking')
  name: 'networkModule'
}

resource networkInterface 'Microsoft.Network/networkInterfaces@2020-11-01' = {
  name: 'production-nic'
  location: resourceGroup().location
  properties: {
    ipConfigurations: [
      {
        name: 'toy-subnet-ip-configuration'
        properties: {
          subnet: {
            id: networkModule.outputs.subnetResourceId
          }
        }
      }
    ]
  }
}

Figyelje meg, hogy a ToyNetworking erőforráscsoportban üzembe helyezendő erőforrások egy modulban vannak definiálva , és a subnetResourceId kimenetet a hálózati adapter erőforrásdefiníciója használja.

A fájl üzembe helyezése után a ProjectTeddybear nevű másik erőforráscsoportot is megcélzhatja, például a következőt:

az deployment group create --resource-group ProjectTeddybear ...
New-AzResourceGroupDeployment -ResourceGroupName ProjectTeddybear ...

Bár az üzembe helyezés a ProjectTeddybear erőforráscsoportot célozza meg, a virtuális hálózati erőforrások a ToyNetworking erőforráscsoportban lesznek üzembe helyezve . A hálózati adapter a ProjectTeddybear erőforráscsoportban van üzembe helyezve.

Egy erőforráscsoportot egy másik előfizetésben is üzembe helyezhet, ha az előfizetés azonosítóját a resourceGroup hatókörbe helyezi:

module networkModule 'modules/network.bicep' = {
  scope: resourceGroup('f0750bbe-ea75-4ae5-b24d-a92ca601da2c', 'ToyNetworking')
  name: 'networkModule'
}

Hasonlóképpen a subscription() hatókör függvénnyel több előfizetésben is üzembe helyezhet erőforrásokat az előfizetés hatókörében, és a managementGroup() hatókör függvénnyel több felügyeleti csoportban is üzembe helyezheti az erőforrásokat. Azonban nem helyezheti üzembe őket több bérlőn.

Egyetlen erőforrás hatókörének megadása

A scope kulcsszót néhány más erőforrástípuson is használhatja, nem csak modulokon. A bővítményerőforrások a scope kulcsszó használatával határozzák meg, hogy melyik erőforrásra vonatkoznak. Emellett a bérlői hatókörű erőforrások használhatják a scope kulcsszót, hogy bármilyen sablonból üzembe helyezhesse őket.

Például egy Bicep-fájl használatával létrehozhat egy felügyeleticsoport-hierarchiát, ahogyan az a következő példában látható:

targetScope = 'managementGroup'

resource parentManagementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: 'NonProduction'
  properties: {
    displayName: 'Non-production'
  }
}

resource childManagementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: 'SecretRND'
  properties: {
    displayName: 'Secret R&D Projects'
    details: {
      parent: {
        id: parentManagementGroup.id
      }
    }
  }
}

Figyelje meg, hogy ez a példa a sablonfájlban használja targetScope = 'managementGroup' , de aztán üzembe helyezi a felügyeleti csoportokat a tenant() hatókörön belül.

Megjegyzés:

Az előző példa bemutatja, hogyan hozhat létre felügyeleticsoport-hierarchiát a Bicep használatával. A NonProduction felügyeleti csoport a gyökérszintű felügyeleti csoport gyermeke lesz, a SecretRND felügyeleti csoport pedig a NonProduction felügyeleti csoport gyermeke lesz.

Felügyeleti csoport és előfizetési hierarchia létrehozása

Most már tudja, hogyan helyezhet üzembe számos különböző erőforrást különböző hatókörökben, és tudja, hogyan használhatja a Bicep-modulokat és a kulcsszót az scope erőforrások kombinációinak üzembe helyezéséhez. Alkalmazzuk ezt az új tudást a felügyeleti csoport hierarchiájának kiterjesztésére az előző példában. A hierarchia mostantól egy előfizetési aliast is tartalmaz, amely egy bérlői hatókörű erőforrás, amely új Azure-előfizetést hoz létre:

resource subscription 'Microsoft.Subscription/aliases@2020-09-01' = {
  scope: tenant()
  name: subscriptionAliasName
  properties: {
    // ...
  }
}

Megjegyzés:

Előfizetési alias létrehozásakor meg kell adnia néhány egyéb tulajdonságot is, például egy számlázási hatókört. Az egyértelműség kedvéért kihagytuk őket.

Ezután társíthatja az előfizetést egy felügyeleti csoporttal, amelyhez telepítenie kell egy úgynevezett erőforrástípust Microsoft.Management/managementGroups/subscriptions. Az erőforrás működése miatt egy modulban deklarálná. Íme például egy modulok/mg-subscription-association.bicep nevű fájl:

targetScope = 'tenant'

@description('The name of the management group that should contain the subscription.')
param managementGroupName string

@description('The subscription ID to place into the management group.')
param subscriptionId string

resource managementGroup 'Microsoft.Management/managementGroups@2021-04-01' existing = {
  name: managementGroupName
}

resource subscriptionAssociation 'Microsoft.Management/managementGroups/subscriptions@2021-04-01' = {
  parent: managementGroup
  name: subscriptionId
}

Figyelje meg, hogy a felügyeleti csoportra a existing kulcsszó hivatkozik.

A fő Bicep-fájl ezután létrehozhatja a társításokat a modul beleszámításával. A teljes Bicep-fájl:

targetScope = 'managementGroup'

@description('The name of the subscription alias to deploy.')
param subscriptionAliasName string

resource parentManagementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: 'NonProduction'
  properties: {
    displayName: 'Non-production'
  }
}

resource childManagementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: 'SecretRND'
  properties: {
    displayName: 'Secret R&D Projects'
    details: {
      parent: {
        id: parentManagementGroup.id
      }
    }
  }
}

resource subscription 'Microsoft.Subscription/aliases@2020-09-01' = {
  scope: tenant()
  name: subscriptionAliasName
  properties: {
    // ...
  }
}

module subscriptionAssociation 'modules/mg-subscription-association.bicep' = {
  name: 'subscriptionAssociation'
  scope: tenant()
  params: {
    managementGroupName: childManagementGroup.name
    subscriptionId: subscription.properties.subscriptionId
  }
}

Mint láthatta, az összes hatókört és Bicep nyelvi funkciót együtt használhatja a teljes Azure-infrastruktúra kifinomult üzembe helyezéséhez.