Variabelen en uitvoerlussen gebruiken

Voltooid

U hebt geleerd hoe u kopieerlussen kunt gebruiken om meerdere exemplaren van resources te implementeren en hoe u de eigenschappen van een resource instelt met behulp van lussen. In Bicep kunt u ook lussen gebruiken met variabelen en uitvoer.

Voor uw speelgoedbedrijf moet u virtuele netwerken implementeren met dezelfde subnetconfiguratie in meerdere Azure-regio's. U verwacht dat u in de toekomst extra subnetten aan uw virtuele netwerken moet toevoegen, dus u wilt de flexibiliteit in uw Bicep-sjablonen hebben om de subnetconfiguratie te wijzigen.

Omdat u ook meerdere opslagaccounts in uw Azure-omgeving implementeert, moet u de eindpunten voor elk opslagaccount opgeven als uitvoer, zodat uw implementatiepijplijnen deze informatie kunnen gebruiken.

In deze les leert u hoe u lussen gebruikt met variabelen en uitvoer.

Notitie

De opdrachten in deze les worden weergegeven om concepten te illustreren. Voer de opdrachten nog niet uit. U oefent wat u hier binnenkort leert.

Variabelenlussen

Met behulp van variabelenlussen kunt u een matrix maken, die u vervolgens kunt gebruiken via uw Bicep-bestand. Net als bij andere lussen gebruikt u het for trefwoord om een variabele lus te maken:

var items = [for i in range(1, 5): 'item${i}']

In het voorgaande voorbeeld wordt een matrix gemaakt die de waardenitem1, , , item3en item5item4item2.

Normaal gesproken gebruikt u variabelenlussen om complexere objecten te maken die u vervolgens in een resourcedeclaratie kunt gebruiken. U kunt als volgt variabelenlussen gebruiken om een subnets eigenschap te maken:

param addressPrefix string = '10.10.0.0/16'
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.0.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.1.0/24'
  }
]

var subnetsProperty = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
  name: 'teddybear'
  location: resourceGroup().location
  properties:{
    addressSpace:{
      addressPrefixes:[
        addressPrefix
      ]
    }
    subnets: subnetsProperty
  }
}

In dit voorbeeld ziet u een effectief gebruik voor variabelenlussen: het omzetten van een parameter met eenvoudige, eenvoudig te begrijpen waarden in een complexer object dat overeenkomt met de vereiste definitie van de Azure-resource. U kunt variabelenlussen gebruiken om parameters in te schakelen om alleen de sleutelgegevens op te geven die voor elk item in de lijst worden gewijzigd. U kunt vervolgens Bicep-expressies of standaardwaarden gebruiken om andere vereiste eigenschappen voor de resource in te stellen.

Uitvoerlussen

U kunt Bicep-uitvoer gebruiken om informatie van uw implementaties terug te geven aan de gebruiker of het hulpprogramma waarmee de implementatie is gestart. Uitvoerlussen bieden u de flexibiliteit en kracht van lussen binnen uw uitvoer.

Net als bij andere lussen gebruikt u het for trefwoord om een uitvoerlus op te geven:

var items = [
  'item1'
  'item2'
  'item3'
  'item4'
  'item5'
]

output outputItems array = [for i in range(0, length(items)): items[i]]

Normaal gesproken gebruikt u uitvoerlussen in combinatie met andere lussen in uw sjabloon. Laten we bijvoorbeeld eens kijken naar een Bicep-bestand waarmee een set opslagaccounts wordt geïmplementeerd in Azure-regio's die zijn opgegeven door de locations parameter:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource storageAccounts 'Microsoft.Storage/storageAccounts@2023-05-01' = [for location in locations: {
  name: 'toy${uniqueString(resourceGroup().id, location)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Waarschijnlijk moet u informatie retourneren over elk opslagaccount dat u hebt gemaakt, zoals de naam en de eindpunten die kunnen worden gebruikt voor toegang. Met behulp van een uitvoerlus kunt u deze informatie ophalen in uw Bicep-bestand.

Notitie

Op dit moment biedt Bicep geen ondersteuning voor het rechtstreeks verwijzen naar resources die zijn gemaakt binnen een lus vanuit een uitvoerlus. Dit betekent dat u matrixindexeerfuncties moet gebruiken om toegang te krijgen tot de resources, zoals wordt weergegeven in het volgende voorbeeld.

output storageEndpoints array = [for i in range(0, length(locations)): {
  name: storageAccounts[i].name
  location: storageAccounts[i].location
  blobEndpoint: storageAccounts[i].properties.primaryEndpoints.blob
  fileEndpoint: storageAccounts[i].properties.primaryEndpoints.file
}]

Let op

Gebruik geen uitvoer om geheimen te retourneren, zoals toegangssleutels of wachtwoorden. Uitvoer wordt geregistreerd en is niet ontworpen voor het verwerken van beveiligde gegevens.