Übung: Hinzufügen von Parametern und Variablen zu Ihrer Bicep-Vorlage

Abgeschlossen

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

  1. 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 auf westus3 festgelegt werden soll. Normalerweise würden Sie Ressourcen am gleichen Standort wie die Ressourcengruppe erstellen, indem Sie die resourceGroup().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.

  2. Suchen Sie die Stellen in den Ressourcendefinitionen, an denen die Eigenschaften location und name 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
      }
    }
    
  3. Speichern Sie die Änderungen in der Datei.

Automatisches Festlegen der SKUs für jeden Umgebungstyp

  1. 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.

  2. 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.

  3. 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.

  4. 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

  1. 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.

  2. Wählen Sie den Link 1 Succeeded (1 erfolgreich) aus.

  3. 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.

    Screenshot of the Azure portal interface for the specific deployment, with storage account and App Service resources listed with generated names.

  4. Beachten Sie, dass eine neue App Service-App und ein Speicherkonto mit zufällig generierten Namen bereitgestellt wurden.