Wiederholte Ressourcendefinitionen erzeugen Duplikate? Verwende Bedingungen und Schleifen

Veröffentlicht am:

CloudTrips benötigt nun mehrere private Container. Den vollständigen Ressourcenblock für uploads, exports und receipts zu wiederholen, würde jede Sicherheitsänderung zu einer Bearbeitung mehrerer Blöcke machen.

Die schlanke DEV-Umgebung benötigt außerdem nicht den Audit-Container, den TEST und PROD verwenden.

Erstelle die Anwendungscontainer mit einer Schleife und stelle den Audit-Container nur dort bereit, wo er durch eine Bedingung aktiviert ist.

Einzelnen Containerparameter ersetzen

Entferne den vorhandenen Parameter containerName aus main.bicep und füge Folgendes hinzu:

@description('Private blob containers required by the application.')
@minLength(1)
param containerNames array = [
  'uploads'
]

@description('Deploy the optional audit container.')
param deployAuditContainer bool = false

containerNames ist ein Array, weil eine Bereitstellung jetzt mehrere Container anfordern kann. deployAuditContainer ist boolesch und akzeptiert daher nur true oder false.

Container mit einer Schleife erstellen

Ersetze die einzelne Ressource uploadsContainer durch:

resource appContainers 'Microsoft.Storage/storageAccounts/blobServices/containers@2025-06-01' = [
  for containerName in containerNames: {
    parent: blobService
    name: containerName
    properties: {
      publicAccess: 'None'
    }
  }
]

Der Ausdruck führt dieselbe Ressourcendeklaration einmal für jeden Wert in containerNames aus. Jeder Wert muss eindeutig sein, da Azure-Ressourcennamen unter demselben Blob-Dienst eindeutig sein müssen.

Bedingten Container hinzufügen

Füge den Audit-Container hinzu:

resource auditContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2025-06-01' = if (deployAuditContainer) {
  parent: blobService
  name: 'audit'
  properties: {
    publicAccess: 'None'
  }
}

Wenn deployAuditContainer den Wert true besitzt, nimmt Bicep die Ressource auf. Bei false wird sie übersprungen.

Der standardmäßige inkrementelle Bereitstellungsmodus löscht keinen Audit-Container, der durch eine frühere Bereitstellung erstellt wurde. Die Bedingung bestimmt, ob die aktuelle Bereitstellung die Ressource enthält; sie ist keine Bereinigungsanweisung.

IDs der erstellten Ressourcen zurückgeben

Ersetze die alte Ausgabe containerId durch:

output containerIds array = [
  for i in range(0, length(containerNames)): appContainers[i].id
]
output auditContainerId string? = deployAuditContainer ? auditContainer.id : null

Die erste Ausgabe folgt der Schleife und gibt eine ID für jeden Anwendungscontainer zurück. Die Audit-Ausgabe gibt bei Aktivierung die Ressourcen-ID und beim Überspringen null zurück.

Jede Umgebung konfigurieren

Füge diese Werte zu environments/dev.bicepparam hinzu:

param containerNames = [
  'uploads'
]
param deployAuditContainer = false

Füge diese Werte zu environments/test.bicepparam hinzu:

param containerNames = [
  'uploads'
  'exports'
]
param deployAuditContainer = true

Füge diese Werte zu environments/prod.bicepparam hinzu:

param containerNames = [
  'uploads'
  'exports'
  'receipts'
]
param deployAuditContainer = true

Dieselben Ressourcendeklarationen erzeugen nun:

  • DEV: uploads
  • TEST: uploads, exports und den bedingten Container audit
  • PROD: uploads, exports, receipts und den bedingten Container audit

Füge audit nicht zu containerNames hinzu; die bedingte Ressource verwendet diesen Namen bereits.

TEST-Container anzeigen

Wähle das CloudTrips-TEST-Abonnement und führe What-if aus:

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

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

Der vorhandene uploads-Container sollte bestehen bleiben. Bestätige, dass Azure exports aus der Schleife und audit aus der Bedingung erstellen möchte. Beide müssen publicAccess: None verwenden.

TEST-What-if-Ergebnis mit exports aus der Schleife und audit aus der aktivierten Bedingung

TEST-Konfiguration bereitstellen

Wende die geprüften Änderungen an:

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

Bestätige den Bereitstellungsstatus Succeeded. Die Ausgabe containerIds sollte IDs für uploads und exports enthalten; auditContainerId sollte die separate Audit-Ressourcen-ID enthalten.

Ergebnis überprüfen

Öffne im Azure-Portal das TEST-Speicherkonto und gehe zu:

Datenspeicher > Container

Überprüfe, dass diese privaten Container vorhanden sind:

  • uploads
  • exports
  • audit

CloudTrips-TEST-Speicherkonto mit den durch Schleife und Bedingung erstellten Containern

Die Anwendungscontainer verwenden nun eine gemeinsame Ressourcendeklaration, und der Audit-Container wird durch einen Umgebungswert gesteuert. Ein weiterer Standardcontainer erfordert nur einen zusätzlichen Array-Eintrag statt eines kopierten Ressourcenblocks.