Steigern der Flexibilität mithilfe von Parametern und Variablen

Abgeschlossen

Bicep-Dateien sind aufgrund ihrer Wiederverwendbarkeit effektiv. Sie können Bicep verwenden, um Dateien zu schreiben, die mehrere Umgebungen oder Kopien Ihrer Ressourcen bereitstellen.

Ihr Toy-Unternehmen startet regelmäßig neue Produkte, und Sie müssen die Bicep-Dateien verwenden, um die für jeden Produktstart erforderlichen Azure-Ressourcen zu erstellen. Sie müssen die Verwendung fester Ressourcennamen vermeiden. Viele Arten von Azure-Ressourcen benötigen eindeutige Namen. Das Einbetten von Namen in Ihre Bicep-Datei bedeutet, dass Sie die Datei nicht für mehrere Produktstarts wiederverwenden können. Sie müssen die Ressourcen auch an verschiedenen Speicherorten bereitstellen, je nachdem, wo die Spielwaren gestartet werden, was bedeutet, dass Sie die Ressourcenspeicherorte nicht in Ihre Datei einbetten können.

In dieser Lektion erfahren Sie mehr über Parameter und Variablen, die zwei Bicep-Features sind, die Ihre Bicep-Dateien flexibel und wiederverwendbar machen können. Außerdem erhalten Sie eine Einführung in Ausdrücke.

Hinweis

Die Befehle in dieser Lerneinheit dienen der Veranschaulichung der Konzepte. Führen Sie die Befehle jetzt noch nicht aus. Sie können das Erlernte in Kürze üben.

Parameter und Variablen

Mit einem Parameter können Sie Werte von außerhalb der Bicep-Datei anzeigen. Wenn Sie beispielsweise die Datei manuell mithilfe der Azure CLI oder Azure PowerShell bereitstellen, werden Sie aufgefordert, Werte für jeden Parameter bereitzustellen. Sie können auch eine Parameterdatei erstellen, die alle Parameter und Werte auflistet, die Sie für die Bereitstellung verwenden wollen. Wenn die Bicep-Datei aus einem automatisierten Prozess wie einer Bereitstellungspipeline bereitgestellt wird, kann die Pipeline die Parameterwerte bereitstellen.

Eine Variable wird definiert und in der Bicep-Datei festgelegt. Mithilfe von Variablen können Sie wichtige Informationen an einer zentralen Stelle speichern und in der gesamten Datei darauf verweisen, ohne sie kopieren und einfügen zu müssen.

Es hat sich bewährt, Parameter für Dinge zu verwenden, die sich zwischen den einzelnen Bereitstellungen ändern, z. B.:

  • Ressourcennamen, die eindeutig sein müssen.
  • Standorte für die Ressourcenbereitstellung.
  • Einstellungen, die sich auf die Preise von Ressourcen auswirken, z. B. SKUs, Tarife und Anzahl der Instanzen
  • Anmeldeinformationen und Informationen, die für den Zugriff auf andere Systeme erforderlich sind, die in der Bicep-Datei nicht definiert sind.

Variablen sind in der Regel eine gute Option, wenn Sie dieselben Werte für jede Bereitstellung verwenden, aber einen Wert in der Datei wiederverwendbar machen möchten oder wenn Sie Ausdrücke verwenden möchten, um einen komplexen Wert zu erstellen. Sie können Variablen auch für Ressourcen verwenden, die keine eindeutigen Namen erfordern.

Tipp

Es ist wichtig, eine gute Benennung für Parameter und Variablen zu verwenden, damit Ihre Bicep-Dateien leicht zu lesen und zu verstehen sind. Verwenden Sie klare, aussagekräftige und konsistente Namen.

Hinzufügen eines Parameters

In Bicep können Sie Parameter wie folgt definieren:

param appServiceAppName string

Sehen Sie sich an, wie die einzelnen Teile dieser Definition funktionieren:

  • param teilt Bicep mit, dass Sie einen Parameter definieren.
  • appServiceAppName ist der Name des Parameters. Wenn Sie die Bicep-Datei manuell bereitstellen, werden Sie möglicherweise aufgefordert, einen Wert einzugeben, daher ist es wichtig, dass der Name klar und verständlich ist. Der Name verweist auch auf den Parameterwert in der Datei, genau wie bei symbolischen Ressourcennamen.
  • string ist der Typ des Parameters. Sie können verschiedene Typen als Bicep-Parameter angeben, einschließlich string für Text, int für Zahlen und bool für die booleschen Werte TRUE/FALSE. Sie können auch komplexere Parameter übergeben, indem Sie die Typen array und object verwenden.

Tipp

Vermeiden Sie es, Bicep-Dateien durch den Einsatz zu vieler Parameter zu stark zu generalisieren. Sie sollten die kleinstmögliche Anzahl von Parametern verwenden, die Sie für Ihr Geschäftsszenario benötigen. Denken Sie daran, dass Sie Bicep-Dateien in Zukunft immer ändern können, wenn sich Ihre Anforderungen ändern.

Angeben von Standardwerten

Sie können optional einen Standardwert für einen Parameter angeben. Wenn Sie einen Standardwert angeben, wird der Parameter optional. Die Person, die die Bicep-Datei bereitstellt, kann bei Bedarf einen Wert angeben, aber wenn nicht, verwendet Bicep den Standardwert.

So können Sie einen Standardwert hinzufügen

param appServiceAppName string = 'toy-product-launch-1'

Hinweis

In diesem Beispiel hat der Name der Azure App Service-App einen hartcodierten Standardwert. Dies ist keine gute Idee, da App Service-Apps eindeutige Namen benötigen. Sie werden dies in Kürze korrigieren.

Verwenden von Parameterwerten in der Bicep-Datei

Nachdem Sie einen Parameter deklariert haben, können Sie im rest der Bicep-Datei darauf verweisen. Sehen Sie sich einmal an, wie Sie Ihren neuen Parameter innerhalb der Ressourcendefinition verwenden können:

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  ___location: 'eastus'
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Beachten Sie, dass die Bicep-Datei jetzt den Parameterwert verwendet, um den Ressourcennamen für die App-Ressource anstelle eines hartcodierten Werts festzulegen.

Tipp

Mit der Bicep-Erweiterung für Visual Studio Code werden visuelle Indikatoren angezeigt, wenn Sie nicht die empfohlenen Methoden anwenden. Beispielsweise werden Sie gewarnt, wenn Sie einen Parameter definieren, den Sie nicht verwenden. Der Bicep-Linter führt diese Überprüfungen kontinuierlich aus, während Sie Ihre Aufgaben ausführen.

Hinzufügen einer Variablen

Sie können eine Variable wie folgt definieren:

var appServicePlanName = 'toy-product-launch-plan'

Variablen werden ähnlich wie Parameter definiert, es gibt jedoch einige Unterschiede:

  • Sie verwenden das Schlüsselwort var, um Bicep zu informieren, dass Sie eine Variable deklarieren.
  • Sie müssen einen Wert für die Variable angeben.
  • Für Variablen sind keine Typen erforderlich. Bicep kann den Typ basierend auf dem von Ihnen festgelegten Wert ermitteln.

Ausdrücke

Wenn Sie Bicep-Dateien schreiben, möchten Sie häufig keine hartcodierten Werte schreiben oder bitten, dass sie in einem Parameter angegeben werden sollen. Stattdessen möchten Sie Werte ermitteln, wenn die Datei ausgeführt wird. Sie möchten beispielsweise wahrscheinlich alle Ressourcen in einer Bicep-Datei in einer einzigen Azure-Region bereitstellen: die Region, in der Sie die Ressourcengruppe erstellt haben. Oder Sie möchten anhand einer bestimmten Benennungsstrategie in Ihrem Unternehmen automatisch einen eindeutigen Namen für eine Ressource erstellen.

Ausdrücke stellen ein leistungsstarkes Feature in Bicep dar, mit dem Sie alle möglichen interessanten Szenarien behandeln können. Sehen wir uns einige Orte an, an denen Sie Ausdrücke in einer Bicep-Datei verwenden können.

Ressourcenstandorte

Wenn Sie eine Vorlage schreiben und bereitstellen, möchten Sie häufig nicht den Standort jeder Ressource einzeln angeben. Stattdessen verfügen Sie vielleicht über eine einfache Geschäftsregel, die besagt: Standardmäßig werden alle Ressourcen im gleichen Ort bereitgestellt, an dem die Ressourcengruppe erstellt wurde.

In Bicep können Sie einen Parameter mit dem Namen ___location erstellen und dann einen Ausdruck verwenden, um seinen Wert festzulegen:

param ___location string = resourceGroup().___location

Sehen Sie sich den Standardwert dieses Parameters an. Es verwendet eine Funktion , resourceGroup() die Ihnen Zugriff auf Informationen über die Ressourcengruppe ermöglicht, in der die Bicep-Datei bereitgestellt wird. In diesem Beispiel verwendet die Datei die ___location Eigenschaft. Es ist üblich, diesen Ansatz zu verwenden, um Ihre Ressourcen in derselben Azure-Region wie die Ressourcengruppe bereitzustellen.

Wenn jemand diese Bicep-Datei bereitstellt, kann er den Standardwert hier außer Kraft setzen und einen anderen Speicherort verwenden.

Hinweis

Einige Ressourcen in Azure können nur an bestimmten Standorten bereitgestellt werden. Möglicherweise benötigen Sie separate Parameter, um die Standorte dieser Ressourcen festzulegen.

Ab sofort können Sie den Ressourcenstandortparameter in der Bicep-Datei wie im folgenden Beispiel verwenden:

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  ___location: ___location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Ressourcennamen

Für viele Azure-Ressourcen sind eindeutige Namen erforderlich. In Ihrem Szenario sind zwei Ressourcen vorhanden, für die eindeutige Namen erforderlich sind: das Speicherkonto und die App Service-App. Die Anforderung, dass diese Werte als Parameter festgelegt werden, kann es für jeden, der die Bicep-Datei verwendet, schwierig machen, da sie einen Namen finden müssen, den niemand sonst verwendet hat.

Bicep verfügt über eine weitere Funktion namens uniqueString(), die beim Erstellen von Ressourcennamen nützlich ist. Wenn Sie diese Funktion verwenden, müssen Sie einen Seedwert angeben, der für verschiedene Bereitstellungen unterschiedlich, aber für alle Bereitstellungen für dieselben Ressourcen konsistent sein sollte.

Wenn Sie einen guten Startwert auswählen, können Sie bei jeder Bereitstellung derselben Ressourcenmenge den gleichen Namen erhalten, aber Sie erhalten immer einen anderen Namen, wenn Sie eine andere Gruppe von Ressourcen mithilfe derselben Bicep-Datei bereitstellen. Sehen Sie sich an, wie Sie die uniqueString()-Funktion verwenden können:

param storageAccountName string = uniqueString(resourceGroup().id)

Der Standardwert dieses Parameters verwendet die resourceGroup()-Funktion erneut, genau wie Sie beim Festlegen des Ressourcenspeicherorts vorgegangen sind. Dieses Mal erhalten Sie jedoch die ID einer Ressourcengruppe. So sieht eine Ressourcengruppen-ID aus:

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MyResourceGroup

Die Ressourcengruppen-ID enthält die Azure-Abonnement-ID (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e) und den Ressourcengruppennamen (MyResourceGroup). Die Ressourcengruppen-ID ist häufig ein guter Kandidat für einen Startwert für Ressourcennamen, da:

  • Jedes Mal, wenn Sie die gleichen Ressourcen bereitstellen, erfolgt die Bereitstellung in derselben Ressourcengruppe. Die Funktion uniqueString() gibt jedes Mal denselben Wert zurück.
  • Wenn Sie in zwei verschiedenen Ressourcengruppen im Azure-Abonnement bereitstellen, ist der resourceGroup().id Wert unterschiedlich, da die Ressourcengruppennamen unterschiedlich sind. Die Funktion uniqueString() gibt für jeden Ressourcensatz unterschiedliche Werte an.
  • Wenn Sie in zwei verschiedenen Azure-Abonnements bereitstellen, ist der Wert resourceGroup().id auch dann unterschiedlich, wenn Sie denselben Ressourcengruppennamen verwenden, da sich die Azure-Abonnement-ID unterscheidet. Die Funktion uniqueString() gibt erneut für jeden Ressourcensatz unterschiedliche Werte an.

Tipp

Häufig ist es ratsam, Ausdrücke in Bicep-Dateien zum Erstellen von Ressourcennamen zu verwenden. Viele Azure-Ressourcentypen weisen Regeln für die zulässigen Zeichen und die Länge der Namen auf. Das Einbetten der Erstellung von Ressourcennamen in die Bicep-Datei bedeutet, dass jeder, der die Datei verwendet, sich nicht daran erinnern muss, diese Regeln selbst zu befolgen.

Kombinierte Zeichenfolgen

Wenn Sie nur die uniqueString()-Funktion zum Festlegen von Ressourcennamen verwenden, erhalten Sie wahrscheinlich eindeutige Namen, die aber möglicherweise nicht sehr aussagekräftig sind. Ein guter Ressourcenname sollte auch beschreibend sein, damit klar ist, wofür die Ressource vorgesehen ist. Oftmals erstellen Sie einen Namen, indem Sie ein aussagekräftiges Wort oder eine Zeichenfolge mit einem eindeutigen Wert kombinieren. Auf diese Weise verfügen Ihre Ressourcen über aussagekräftige und eindeutige Namen.

Bicep enthält ein Feature namens Zeichenfolgeninterpolation, mit dem Sie Zeichenfolgen kombinieren können. Sehen Sie selbst, wie es funktioniert:

param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'

Der Standardwert für den storageAccountName-Parameter besteht jetzt aus zwei Teilen:

  • toylaunch ist eine hartcodierte Zeichenfolge, mit der jede Person, die sich die bereitgestellte Ressource in Azure ansieht, den Zweck dieses Speicherkonto verstehen kann.
  • ${uniqueString(resourceGroup().id)} weist Bicep an, die Ausgabe der uniqueString(resourceGroup().id)-Funktion auszuwerten und das Ergebnis dann mit der Zeichenfolge zu verketten.

Tipp

Manchmal erstellt die uniqueString()-Funktion Zeichenfolgen, die mit einer Zahl beginnen. Bei einigen Azure-Ressourcen (z. B. Speicherkonten) dürfen die Namen nicht mit Zahlen beginnen. Daher eignet sich die Zeichenfolgeninterpolation gut für das Erstellen von Ressourcennamen, wie im vorherigen Beispiel gezeigt.

Auswählen von SKUs für Ressourcen

Die anderen Mitglieder Ihres Teams sind von Ihrem bisher erstellten Bicep-Code beeindruckt. Sie haben gemeinsam entschieden, dass Sie Ihre Bicep-Datei verwenden werden, um die Ressourcen bereitzustellen, die alle Ihre neuen Spielzeug-Einführungen unterstützen.

Einer Ihrer Kollegen hat vorgeschlagen, für jeden Produktstart eine Nicht-Produktionsumgebung zu erstellen, damit das Marketingteam die Websites testen kann, bevor sie für Kund*innen bereitgestellt werden. Sie möchten jedoch sicherstellen, dass Sie nicht zu viel Geld für Ihre Nichtproduktionsumgebungen ausgeben, daher entscheiden Sie sich gemeinsam für einige Richtlinien:

  • In Produktionsumgebungen werden Speicherkonten in der SKU Standard_GRS (georedundanter Speicher) bereitgestellt, um eine hohe Resilienz sicherzustellen. App Service-Pläne werden in der SKU P2v3 bereitgestellt, um eine hohe Leistung zu erzielen.
  • In Nicht-Produktionsumgebungen werden Speicherkonten in der SKU Standard_LRS (lokal redundanter Speicher) bereitgestellt. App Service-Pläne werden in der kostenlosen SKU F1 bereitgestellt.

Eine Möglichkeit, diese Geschäftsanforderungen zu implementieren, stellt die Verwendung von Parametern dar, in denen die einzelnen SKUs angegeben werden. Die Angabe jeder SKU als Parameter kann jedoch schwierig zu verwalten sein, insbesondere, wenn Sie größere Bicep-Dateien haben. Eine weitere Möglichkeit besteht darin, die Geschäftsregeln mithilfe einer Kombination aus Parametern, Variablen und Ausdrücken in die Datei einzubetten.

Zunächst können Sie einen Parameter angeben, der angibt, ob die Bereitstellung für eine Produktionsumgebung oder eine Nicht-Produktionsumgebung vorgesehen ist:

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

Beachten Sie, dass in diesem Code eine neue Syntax verwendet wird, um eine Liste der zulässigen Werte für den environmentType-Parameter anzugeben. Bicep lässt niemand die Bicep-Datei bereitstellen, es sei denn, sie stellen einen dieser Werte bereit.

Als Nächstes können Sie Variablen erstellen, die basierend auf der Umgebung die SKUs festlegen, die für das Speicherkonto und den App Service-Plan verwendet werden:

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2V3' : 'F1'

Beachten Sie auch hier die neue Syntax. Folgende Schritte werden hier ausgeführt:

  • (environmentType == 'prod') wird zu einem booleschen Wert (TRUE/FALSE) ausgewertet, abhängig davon, welcher zulässige Wert für den Parameter environmentType verwendet wird.
  • ? wird als ternärer Operator bezeichnet, der eine if/then-Anweisung auswertet. Der Wert hinter dem Operator ? wird verwendet, wenn der Ausdruck TRUE ist. Bei einer Auswertung des Ausdrucks als FALSE wird der Wert nach dem Doppelpunkt (:) verwendet.

Wir können diese Regeln übersetzen in:

  • Wenn der environmentType-Parameter für die Variable storageAccountSkuName auf prod festgelegt ist, wird die SKU Standard_GRS verwendet. Andernfalls wird die SKU Standard_LRS verwendet.
  • Wenn der environmentType-Parameter für die Variable appServicePlanSkuName auf prod festgelegt ist, werden die SKU P2V3 und der Tarif PremiumV3 verwendet. Andernfalls wird die SKU F1 verwendet.

Tipp

Wenn Sie mehrteilige Ausdrücke wie diesen erstellen, ist es am besten, Variablen zu verwenden, anstatt die Ausdrücke direkt in die Ressourceneigenschaften einzubetten. Dadurch können Ihre Bicep-Dateien leichter gelesen und verstanden werden, da die Unordnung in Ihren Ressourcendefinitionen durch Logik vermieden wird.

Wenn Sie Parameter, Variablen und Ausdrücke in Ihrer Bicep-Datei verwenden, können Sie Ihre Datei wiederverwenden und schnell eine neue Gruppe von Ressourcen bereitstellen. Beispielsweise jedes Mal, wenn Ihre Marketingabteilung Sie bittet, eine neue Website für die nächste Einführung eines Spielzeugs bereitzustellen, geben Sie für jede Umgebung, die Sie bereitstellen, neue Parameterwerte an, und alles ist bereit.