Übung: Hinzufügen von Parametern und Variablen zu Ihrer Bicep-Vorlage
In dieser Übung aktualisieren Sie die zuvor erstellte Bicep-Vorlage, damit sie:\
- Parameter für die Ressourcenstandorte und -namen akzeptiert
- Ihre Geschäftsregeln anwendet, um die richtigen SKUs für die bereitgestellten Ressourcen auszuwählen
In dem Prozess gehen Sie wie folgt vor:
- Sie aktualisieren die Vorlage so, dass sie einen
location
-Parameter enthält. - Sie aktualisieren die Vorlage und fügen Parameter und Variablen für die Ressourcennamen ein.
- Sie verwenden Ausdrücke, um Standardwerte für die Parameter festzulegen.
- Sie aktualisieren die Vorlage und fügen Variablen für die SKU jeder Ressource ein.
- Sie testen die Bereitstellung, um sicherzustellen, dass die Vorlage gültig ist.
Hinzufügen der Parameter für Standort und Namen
Fügen Sie in Visual Studio Code am Anfang der Datei main.bicep den folgenden Code hinzu:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Der Bicep-Linter unterstreicht jeden Parameter- und Variablennamen mit gelben Schlangenlinien, um anzuzeigen, dass sie nicht in der Vorlage verwendet werden. Dieses Problem werden Sie in Kürze korrigieren.
Beachten Sie, dass Sie Ausdrücke verwenden, die Zeichenfolgeninterpolation und die
uniqueString()
-Funktion enthalten, um Standardparameterwerte zu definieren. Wenn eine Person diese Vorlage bereitstellt, kann sie die Standardparameterwerte überschreiben, indem sie die Werte zur Bereitstellungszeit angibt. Die Variablenwerte kann sie aber nicht außer Kraft setzen.Beachten Sie außerdem, dass Sie für den Azure App Service-Plannamen eine Variable verwenden, für die anderen Namen aber Parameter. Für Speicherkonten und App Service-Apps sind global eindeutige Namen erforderlich, während die Namen von App Service-Plänen nur innerhalb der jeweiligen Ressourcengruppe eindeutig sein müssen. Aufgrund dieses Unterschieds ist es nicht problematisch, den gleichen Namen für den App Service-Plan für mehrere Bereitstellungen zu verwenden, solange alle Bereitstellungen in verschiedenen Ressourcengruppen erfolgen.
Tipp
Sie geben an, dass der
location
-Parameter aufwestus3
festgelegt werden soll. Normalerweise würden Sie Ressourcen am gleichen Standort wie die Ressourcengruppe erstellen, indem Sie dieresourceGroup().location
-Eigenschaft verwenden. Wenn Sie jedoch mit der Microsoft Learn Sandbox arbeiten, müssen Sie bestimmte Azure-Regionen verwenden, die nicht mit dem Standort der Ressourcengruppe übereinstimmen.Suchen Sie die Stellen in den Ressourcendefinitionen, an denen die Eigenschaften
location
undname
festgelegt werden, und aktualisieren Sie sie, sodass sie die Parameterwerte verwenden. Wenn Sie fertig sind, sollten die Ressourcendefinitionen in Ihrer Bicep-Datei wie folgt aussehen:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Speichern Sie die Änderungen in der Datei.
Automatisches Festlegen der SKUs für jeden Umgebungstyp
Fügen Sie in Visual Studio Code in der Datei main.bicep den folgenden Bicep-Parameter unter den Parametern hinzu, die Sie in der vorherigen Aufgabe erstellt haben:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
Beachten Sie, dass Sie einen Parameter mit einem Satz zulässiger Werte definieren, aber keinen Standardwert für diesen Parameter angeben.
Fügen Sie unterhalb der Zeile, in der die Variable
appServicePlanName
deklariert wird, die folgenden Variablendefinitionen hinzu:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
Beachten Sie, dass Sie die Werte dieser Variablen mithilfe des ternären Operators festlegen, um eine
if/then/else
-Logik auszudrücken.Suchen Sie die Stellen in den Ressourcendefinitionen, an denen die
sku
-Eigenschaften festgelegt werden, und aktualisieren Sie sie, sodass sie die Parameterwerte verwenden. Wenn Sie fertig sind, sollten die Ressourcendefinitionen in Ihrer Bicep-Datei wie folgt aussehen:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Beachten Sie, dass Sie noch nicht alles parametrisiert haben. Es gibt noch einige Eigenschaften direkt in den Ressourcendefinitionen, von denen Sie wissen, dass sich diese Werte zwischen Bereitstellungen nicht ändern.
Speichern Sie die Änderungen in der Datei.
Überprüfen Ihrer Bicep-Datei
Nachdem Sie alle oben genannten Änderungen durchgeführt haben, sollte Ihre Datei main.bicep wie im folgenden Beispiel aussehen:
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
Wenn Ihre Datei nicht übereinstimmt, kopieren Sie das Beispiel, oder passen Sie Ihre Datei an das Beispiel an.
Bereitstellen der aktualisierten Bicep-Vorlage
Führen Sie den folgenden Azure CLI-Befehl im Terminal aus.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
Führen Sie den folgenden Azure PowerShell-Befehl im Terminal aus.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
Beachten Sie, dass Sie den Wert für den environmentType
-Parameter explizit beim Ausführen der Bereitstellung angeben. Sie müssen die anderen Parameterwerte nicht angeben, da sie gültige Standardwerte besitzen.
Überprüfen Ihrer Bereitstellung
Wechseln Sie in Ihrem Browser zurück zum Azure-Portal, und wechseln Sie zu Ihrer Ressourcengruppe. Es wird noch immer eine erfolgreiche Bereitstellung angezeigt, da diese denselben Namen wie die erste Bereitstellung verwendet hat.
Wählen Sie den Link 1 Succeeded (1 erfolgreich) aus.
Wählen Sie die Bereitstellung mit dem Namen main aus, und wählen Sie dann Bereitstellungsdetails aus, um die Liste der bereitgestellten Ressourcen zu erweitern.
Beachten Sie, dass eine neue App Service-App und ein Speicherkonto mit zufällig generierten Namen bereitgestellt wurden.