Steigern der Flexibilität mithilfe von Parametern und Variablen
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ßlichstring
für Text,int
für Zahlen undbool
für die booleschen Werte TRUE/FALSE. Sie können auch komplexere Parameter übergeben, indem Sie die Typenarray
undobject
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 FunktionuniqueString()
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 FunktionuniqueString()
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 deruniqueString(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 SKUP2v3
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 SKUF1
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 ParameterenvironmentType
verwendet wird.?
wird als ternärer Operator bezeichnet, der eineif/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 VariablestorageAccountSkuName
aufprod
festgelegt ist, wird die SKUStandard_GRS
verwendet. Andernfalls wird die SKUStandard_LRS
verwendet. - Wenn der
environmentType
-Parameter für die VariableappServicePlanSkuName
aufprod
festgelegt ist, werden die SKUP2V3
und der TarifPremiumV3
verwendet. Andernfalls wird die SKUF1
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.