Manuelle Bereitstellungen sind inkonsistent? Stelle ein Speicherkonto mit Bicep bereit

Veröffentlicht am:

Ein Speicherkonto einmal im Azure-Portal zu erstellen, funktioniert. Werden dieselben Portalauswahlen für DEV, TEST und PROD wiederholt, können jedoch unterschiedliche Sicherheitseinstellungen, Tags, SKUs oder Regionen entstehen.

CloudTrips benötigt eine überprüfte Definition, die Azure konsistent anwenden kann. In diesem Trip verwendest du Bicep, um:

  • ein sicheres DEV-Speicherkonto zu definieren
  • die Azure-Änderung vor der Ausführung anzuzeigen
  • die Ressource bereitzustellen
  • das Ergebnis zu überprüfen
  • durch eine zweite Vorschau die Wiederholbarkeit zu bestätigen

Azure-Zielbereich vorbereiten

Öffne Azure Cloud Shell oder ein Terminal mit Azure CLI. Melde dich an und wähle das CloudTrips-DEV-Abonnement:

az login

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

Bestätige das ausgewählte Abonnement:

az account show \
  --query "{name:name,id:id}" \
  --output table

Erstelle eine Ressourcengruppe für die Übung:

az group create \
  --name rg-cloudtrips-bicep-dev-weu \
  --location westeurope \
  --tags Application=CloudTrips Environment=DEV ManagedBy=Bicep

Die Ressourcengruppe ist der Bereitstellungsbereich. Bicep erstellt darin das Speicherkonto.

Gewünschte Ressource definieren

Erstelle main.bicep mit folgendem Inhalt:

targetScope = 'resourceGroup'

@description('CloudTrips deployment environment.')
param environment string = 'dev'

@description('Azure region for the storage account.')
param location string = resourceGroup().location

var storageAccountName = 'stct${environment}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  location: location
  tags: {
    Application: 'CloudTrips'
    Environment: toUpper(environment)
    ManagedBy: 'Bicep'
  }
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    allowBlobPublicAccess: false
    minimumTlsVersion: 'TLS1_2'
    supportsHttpsTrafficOnly: true
  }
}

output storageAccountName string = storageAccount.name
output storageAccountId string = storageAccount.id

Dies ist der gewünschte Azure-Zustand. Der resource-Block legt fest, was existieren muss. uniqueString() erzeugt für dieselbe Ressourcengruppe denselben Suffix. Wiederholte Bereitstellungen richten sich daher an dasselbe global eindeutige Speicherkonto.

Bereitstellung anzeigen

Führe eine What-if-Operation aus:

az deployment group what-if \
  --resource-group rg-cloudtrips-bicep-dev-weu \
  --template-file main.bicep \
  --parameters environment=dev

Fahre erst fort, wenn die Ausgabe ein Speicherkonto mit dem Änderungstyp Create zeigt. What-if lässt Azure Resource Manager die Bicep-Datei auswerten, ohne die Ressource zu erstellen.

Bicep-What-if-Ausgabe, die das Erstellen des CloudTrips-DEV-Speicherkontos anzeigt

Wenn Azure Policy die geplante Konfiguration ablehnt, korrigiere die Deklaration vor der Bereitstellung. Umgehe die Richtlinie nicht für diese Übung.

Speicherkonto bereitstellen

Stelle dieselbe Datei bereit:

az deployment group create \
  --name deploy-cloudtrips-storage-dev \
  --resource-group rg-cloudtrips-bicep-dev-weu \
  --template-file main.bicep \
  --parameters environment=dev \
  --query "properties.{state:provisioningState,outputs:outputs}" \
  --output yaml

Bestätige den Bereitstellungsstatus Succeeded. Kopiere die Ausgabe storageAccountName; Bicep hat den Namen berechnet und aus der Bereitstellung zurückgegeben.

Ergebnis überprüfen

Setze den Ausgabewert ein und prüfe die bereitgestellte Konfiguration:

storage_account_name="<storageAccountName-Ausgabe>"

az storage account show \
  --resource-group rg-cloudtrips-bicep-dev-weu \
  --name "$storage_account_name" \
  --query "{name:name,location:primaryLocation,httpsOnly:enableHttpsTrafficOnly,minimumTlsVersion:minimumTlsVersion,allowBlobPublicAccess:allowBlobPublicAccess,tags:tags}" \
  --output yaml

Überprüfe:

httpsOnly: true
minimumTlsVersion: TLS1_2
allowBlobPublicAccess: false
tags.Application: CloudTrips
tags.Environment: DEV
tags.ManagedBy: Bicep

Diese Einstellungen wurden nicht manuell ausgewählt. Sie stammen aus der überprüften Bicep-Definition.

Bereitgestelltes CloudTrips-DEV-Speicherkonto mit Sicherheitseinstellungen und von Bicep verwalteten Tags

Wiederholbarkeit bestätigen

Führe dieselbe Vorschau erneut aus:

az deployment group what-if \
  --resource-group rg-cloudtrips-bicep-dev-weu \
  --template-file main.bicep \
  --parameters environment=dev

Azure sollte keine beabsichtigten Ressourcenänderungen melden. Das Template wird weiterhin in denselben Speicherkontonamen aufgelöst, und die bereitgestellten Eigenschaften entsprechen bereits der Deklaration.

Zweite Bicep-What-if-Operation ohne Änderungen am bereitgestellten Speicherkonto

Das ist der praktische Nutzen von Bicep: Die Datei dokumentiert das erforderliche Ergebnis, Azure Resource Manager wendet es an, und dieselbe Definition kann überprüft und wiederholt werden, anstatt die Ressource aus dem Gedächtnis neu aufzubauen.