DEV, TEST und PROD benötigen unterschiedliche Werte? Verwende Bicep-Parameterdateien

Veröffentlicht am:

Das wiederverwendbare Template akzeptiert Umgebung, SKU, Owner und Anwendungswerte. Diese Werte in jedem Azure-CLI-Befehl manuell einzugeben, ist jedoch fehleranfällig. Eine TEST-Bereitstellung könnte versehentlich eine PROD-SKU oder den falschen Kostenstellen-Tag erhalten.

Behalte die Ressourcendefinition in main.bicep und speichere die nicht vertraulichen Werte jeder Umgebung in einer Bicep-Parameterdatei. In diesem Trip fügst du DEV-, TEST- und PROD-Konfigurationen hinzu und aktualisierst das vorhandene TEST-Speicherkonto mit der TEST-Datei.

Kostenstellenparameter hinzufügen

Füge diesen Parameter nach owner in main.bicep ein:

@description('Cost allocation identifier applied as a tag.')
param costCenter string

Füge CostCenter zu commonTags hinzu:

var commonTags = {
  Application: applicationName
  CostCenter: costCenter
  Environment: toUpper(normalizedEnvironment)
  ManagedBy: 'Bicep'
  Owner: owner
}

Das Template definiert, wo der Wert verwendet wird. Die Parameterdateien bestimmen, welchen Wert jede Umgebung erhält.

DEV-Werte erstellen

Erstelle environments/dev.bicepparam:

using '../main.bicep'

param environment = 'dev'
param storageSku = 'Standard_LRS'
param owner = 'DmytroKlymenko@cloudtrips.onmicrosoft.com'
param costCenter = 'CC-DEV-100'

TEST-Werte erstellen

Erstelle environments/test.bicepparam:

using '../main.bicep'

param environment = 'test'
param storageSku = 'Standard_LRS'
param owner = 'DmytroKlymenko@cloudtrips.onmicrosoft.com'
param costCenter = 'CC-TEST-100'

PROD-Werte erstellen

Erstelle environments/prod.bicepparam:

using '../main.bicep'

param environment = 'prod'
param storageSku = 'Standard_ZRS'
param owner = 'DmytroKlymenko@cloudtrips.onmicrosoft.com'
param costCenter = 'CC-PROD-100'

using '../main.bicep' verknüpft jede Parameterdatei mit dem Template. Bicep kann dadurch einen fehlenden Parameter, einen unbekannten Parameternamen, einen ungültigen Typ oder einen durch @allowed abgelehnten Wert erkennen.

Die beabsichtigten Unterschiede sind:

DEV:  Standard_LRS, CC-DEV-100
TEST: Standard_LRS, CC-TEST-100
PROD: Standard_ZRS, CC-PROD-100

Parameterdateien sind Klartext und gehören nur dann in die Versionsverwaltung, wenn ihre Werte nicht vertraulich sind. Speichere keine Kennwörter, Zugriffsschlüssel, Client Secrets oder Zertifikate in diesen Dateien.

Alle drei Dateien validieren

Erstelle jede Parameterdatei, ohne generiertes JSON zu speichern:

az bicep build-params \
  --file environments/dev.bicepparam \
  --stdout > /dev/null

az bicep build-params \
  --file environments/test.bicepparam \
  --stdout > /dev/null

az bicep build-params \
  --file environments/prod.bicepparam \
  --stdout > /dev/null

Keine Ausgabe bedeutet, dass alle drei Parameterdateien erfolgreich mit main.bicep kompiliert wurden. Behebe jede Diagnose vor der Bereitstellung.

TEST-Aktualisierung anzeigen

Wähle das CloudTrips-TEST-Abonnement:

az account set \
  --subscription "<Name oder ID des CloudTrips-TEST-Abonnements>"

Zeige die Bereitstellung nur mit der TEST-Parameterdatei an:

az deployment group what-if \
  --resource-group rg-cloudtrips-bicep-test-weu \
  --parameters environments/test.bicepparam

Der Befehl benötigt keine Option --template-file. Die using-Anweisung identifiziert bereits main.bicep.

Bestätige, dass What-if das vorhandene TEST-Speicherkonto anspricht und Folgendes hinzufügen möchte:

CostCenter: CC-TEST-100

Die Umgebung darf nicht auf DEV oder PROD und die SKU nicht auf Standard_ZRS geändert werden.

What-if-Ergebnis mit der TEST-Bicep-Parameterdatei und dem neuen TEST-Kostenstellen-Tag

Mit TEST-Parameterdatei bereitstellen

Wende die geprüfte Änderung an:

az deployment group create \
  --name deploy-cloudtrips-storage-test-params \
  --resource-group rg-cloudtrips-bicep-test-weu \
  --parameters environments/test.bicepparam \
  --query "properties.{state:provisioningState,outputs:outputs}" \
  --output yaml

Bestätige den Status Succeeded. Kopiere den zurückgegebenen storageAccountName und prüfe anschließend die umgebungsspezifische Konfiguration:

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,costCenter:tags.CostCenter,owner:tags.Owner}" \
  --output table

Das Ergebnis muss Folgendes zeigen:

SKU: Standard_LRS
Environment: TEST
CostCenter: CC-TEST-100
Owner: DmytroKlymenko@cloudtrips.onmicrosoft.com

CloudTrips-TEST-Speicherkonto mit den Werten aus der TEST-Bicep-Parameterdatei

Ein Ressourcentemplate unterstützt nun alle drei Umgebungen ohne wiederholte Inline-Werte. Eine Umgebung wird durch ihre geprüfte .bicepparam-Datei ausgewählt; main.bicep muss dafür weder kopiert noch bearbeitet werden.