Hart codierte Templates sind nicht wiederverwendbar? Verwende Parameter, Variablen und Outputs
Das erste CloudTrips-Template hat ein DEV-Speicherkonto bereitgestellt, einige Entscheidungen waren jedoch weiterhin fest im Code hinterlegt. Eine vollständige Kopie für TEST würde zwei Dateien erzeugen, die voneinander abweichen können.
Überarbeite das Template so, dass der Aufrufer umgebungsspezifische Entscheidungen übergibt, Bicep konsistente Werte berechnet und die Bereitstellung Informationen für nachfolgende Befehle zurückgibt.
In diesem Trip verwendest du eine main.bicep-Datei erneut, um ein
CloudTrips-TEST-Speicherkonto bereitzustellen.
Template überarbeiten
Ersetze den aktuellen Inhalt von main.bicep durch:
targetScope = 'resourceGroup'
@description('CloudTrips deployment environment.')
@allowed([
'dev'
'test'
'prod'
])
param environment string
@description('Azure region for the storage account.')
param location string = resourceGroup().location
@description('Storage redundancy option.')
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_ZRS'
])
param storageSku string = 'Standard_LRS'
@description('Team or person responsible for the resource.')
param owner string
@description('Application name used in resource tags.')
param applicationName string = 'CloudTrips'
var normalizedEnvironment = toLower(environment)
var storageAccountName = 'stct${normalizedEnvironment}${uniqueString(resourceGroup().id)}'
var commonTags = {
Application: applicationName
Environment: toUpper(normalizedEnvironment)
ManagedBy: 'Bicep'
Owner: owner
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: storageAccountName
location: location
tags: commonTags
sku: {
name: storageSku
}
kind: 'StorageV2'
properties: {
allowBlobPublicAccess: false
minimumTlsVersion: 'TLS1_2'
supportsHttpsTrafficOnly: true
}
}
output storageAccountName string = storageAccount.name
output storageAccountId string = storageAccount.id
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
Was bedeutet SKU?
SKU steht für Stock Keeping Unit (Bestandseinheit). In Azure bezeichnet sie eine Dienstebene oder Konfiguration, die Funktionen, Ausfallsicherheit und Kosten beeinflusst. Bei Storage ist
Standarddie Leistungsstufe und der Suffix bestimmt, wie Azure die Daten repliziert:
LRS— Locally Redundant Storage (lokal redundanter Speicher); die Kopien bleiben innerhalb eines Rechenzentrums, was für diese TEST-Übung und andere ersetzbare Nicht-Produktionsdaten geeignet istZRS— Zone-Redundant Storage (zonenredundanter Speicher); die Kopien werden über Verfügbarkeitszonen einer Region verteilt, damit der Dienst einen Zonenausfall überstehtGRS— Geo-Redundant Storage (georedundanter Speicher); Kopien werden zusätzlich asynchron in eine zweite Azure-Region übertragen und erfordern für die Notfallwiederherstellung ein FailoverZRS und GRS bilden keine einfache Reihenfolge von besser zu schlechter: ZRS schützt die Verfügbarkeit über Zonen, während GRS eine Kopie in einer zweiten Region bereitstellt.
Die drei Konstrukte haben unterschiedliche Aufgaben:
paramerhält eine Bereitstellungsentscheidung wietestoderStandard_LRSvarleitet konsistente Namen und Tags innerhalb des Templates aboutputgibt bereitgestellte Werte für Personen, Skripte oder Pipelines zurück
Die @allowed-Listen lehnen nicht unterstützte Umgebungs- und SKU-Werte
während der Validierung ab.
Bicep-Datei prüfen
Führe den Bicep-Linter aus:
az bicep lint \
--file main.bicep
Keine Ausgabe bedeutet, dass der Linter keine Diagnose gefunden hat. Behebe jeden gemeldeten Fehler, bevor du fortfährst.
CloudTrips TEST vorbereiten
Wähle das CloudTrips-TEST-Abonnement:
az account set \
--subscription "<Name oder ID des CloudTrips-TEST-Abonnements>"
Erstelle die TEST-Ressourcengruppe:
az group create \
--name rg-cloudtrips-bicep-test-weu \
--location westeurope \
--tags Application=CloudTrips Environment=TEST ManagedBy=Bicep
Das Template selbst bleibt unverändert. TEST-spezifische Entscheidungen werden als Parameterwerte übergeben.
TEST-Bereitstellung anzeigen
Führe aus:
az deployment group what-if \
--resource-group rg-cloudtrips-bicep-test-weu \
--template-file main.bicep \
--parameters \
environment=test \
storageSku=Standard_LRS \
owner=DmytroKlymenko@cloudtrips.onmicrosoft.com
Bestätige, dass die Vorschau ein Speicherkonto mit dem Änderungstyp Create
enthält. Die Tags müssen Environment: TEST und den übergebenen Owner enthalten.

Mit TEST-Werten bereitstellen
Stelle dasselbe Template bereit:
az deployment group create \
--name deploy-cloudtrips-storage-test \
--resource-group rg-cloudtrips-bicep-test-weu \
--template-file main.bicep \
--parameters \
environment=test \
storageSku=Standard_LRS \
owner=DmytroKlymenko@cloudtrips.onmicrosoft.com \
--query "properties.{state:provisioningState,outputs:outputs}" \
--output yaml
Der --query-Ausdruck kürzt nur die Befehlsausgabe. Er zeigt den
Bereitstellungsstatus und die mit output deklarierten Werte; die
Bereitstellung selbst wird dadurch nicht verändert.
Bestätige:
state: Succeeded
outputs.storageAccountName.value: stcttest...
outputs.storageAccountId.value: /subscriptions/.../storageAccounts/stcttest...
outputs.blobEndpoint.value: https://stcttest....blob.core.windows.net/
Wiederverwendetes Template überprüfen
Kopiere den zurückgegebenen Speicherkontonamen und prüfe die Ressource:
storage_account_name="<storageAccountName-Ausgabe>"
az storage account show \
--resource-group rg-cloudtrips-bicep-test-weu \
--name "$storage_account_name" \
--query "{name:name,sku:sku.name,environment:tags.Environment,owner:tags.Owner,managedBy:tags.ManagedBy}" \
--output table
Überprüfe, dass das Ergebnis Folgendes enthält:
SKU: Standard_LRS
Environment: TEST
Owner: DmytroKlymenko@cloudtrips.onmicrosoft.com
ManagedBy: Bicep

Das Team verfügt nun über ein Template für mehrere Umgebungen. Parameter legen veränderbare Entscheidungen offen, Variablen wenden Benennungs- und Taggingregeln an und Outputs machen das Bereitstellungsergebnis ohne eine Kopie des Templates verfügbar.