Übung: Umgestalten Ihrer Vorlage für die Verwendung von Modulen

Abgeschlossen

In dieser Übung aktualisieren Sie die zuvor erstellte Bicep-Vorlage so, dass sie ein Modul für die Azure App Service-Ressourcen verwendet. Module helfen dabei, den eigentlichen Zweck der Hauptvorlage deutlich zu machen. Sie können das App Service-Modul bei Bedarf in anderen Vorlagen wiederverwenden.

In dem Prozess gehen Sie wie folgt vor:

  • Sie fügen ein neues Modul hinzu und verschieben die App Service-Ressourcen in dieses Modul.
  • Sie verweisen in der Bicep-Hauptvorlage auf das Modul.
  • Sie fügen eine Ausgabe für den Hostnamen der App Service-App hinzu und geben sie bei Modul- und Vorlagenbereitstellungen aus.
  • Sie testen die Bereitstellung, um sicherzustellen, dass die Vorlage gültig ist.

Hinzufügen einer neuen Moduldatei

  1. Erstellen Sie in Visual Studio Code in dem Ordner, in dem Sie die Datei main.bicep erstellt haben, einen neuen Ordner mit dem Namen modules. Erstellen Sie im Ordner modules die Datei appService.bicep. Speichern Sie die Datei .

  2. Fügen Sie in der Datei appService.bicep den folgenden Inhalt hinzu:

    param location string
    param appServiceAppName string
    
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    var appServicePlanName = 'toy-product-launch-plan'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    
    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 die Parameter und Variablen aus Ihrer Vorlage main.bicep kopiert haben, da die Vorlage appService.bicep eigenständig sein muss.

  3. Speichern Sie die Änderungen in der Datei. Beachten Sie, dass Visual Studio Code keine roten Markierungen für Warnungen zu fehlenden Variablen oder Parametern oder zu ungültigen Ressourcen anzeigt.

Hinzufügen eines Verweises auf das Modul in der übergeordneten Vorlage

Nachdem Sie nun über ein vollständiges Modul zum Bereitstellen der App Service-Ressourcen verfügen, können Sie in der übergeordneten Vorlage darauf verweisen. Da das Modul die App Service-Ressourcen bereitstellt, können Sie die zugeordneten Ressourcen und Variablen aus der übergeordneten Vorlage löschen.

  1. Löschen Sie in der Datei main.bicep die App Service-Ressourcen und die Variablendefinitionen appServicePlanNameund appServicePlanSkuName. Löschen Sie nicht die App Service-Parameter, da Sie sie weiterhin benötigen. Löschen Sie außerdem nicht die Parameter, Variablen und Ressourcen für das Speicherkonto.

  2. Fügen Sie unten in der Datei main.bicep den folgenden Bicep-Code hinzu:

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    Beachten Sie, dass Sie die Parameter für Ihr Modul angeben, indem Sie auf die Parameter in der übergeordneten Vorlage verweisen.

  3. Speichern Sie die Änderungen in der Datei.

Hinzufügen des Hostnamens als Ausgabe

  1. Fügen Sie unten in der Datei appService.bicep den folgenden Bicep-Code hinzu:

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Dieser Code deklariert, dass eine Ausgabe für dieses Modul, die appServiceAppHostName genannt werden wird, vom Typ string sein wird. Die Ausgabe erhält ihren Wert von der defaultHostName-Eigenschaft der App Service-App.

  2. Speichern Sie die Änderungen in der Datei.

    Diese Ausgabe wird in einer Bicep-Datei deklariert, die Sie als Modul verwenden, sodass sie nur für die übergeordnete Vorlage verfügbar ist. Sie müssen die Ausgabe auch an die Person zurückgeben, die die Vorlage bereitgestellt hat.

  3. Öffnen Sie die Datei main.bicep, und fügen Sie am Ende der Datei folgenden Code hinzu:

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    Beachten Sie, dass diese Ausgabe ähnlich wie die Ausgabe im Modul deklariert ist. Dieses Mal verweisen Sie jedoch auf die Ausgabe des Moduls und nicht auf eine Ressourceneigenschaft.

  4. Speichern Sie die Änderungen in der Datei.

Überprüfen Ihrer Bicep-Dateien

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 storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

module appService 'modules/appService.bicep' = {
  name: 'appService'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

output appServiceAppHostName string = appService.outputs.appServiceAppHostName

Die Datei appService.bicep sollte wie im folgenden Beispiel aussehen:

param location string
param appServiceAppName string

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

var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

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
  }
}

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

Wenn keine der beiden Dateien mit diesem Beispiel übereinstimmt, kopieren Sie das Beispiel, oder passen Sie Ihre Vorlage an dieses 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

Überprüfen Ihrer Bereitstellung

  1. Navigieren Sie in Ihrem Browser zum Azure-Portal zurück. Wechseln Sie zu Ihrer Ressourcengruppe; es gibt jetzt zwei erfolgreiche Bereitstellungen.

  2. Wählen Sie den Link 2 Succeeded (2 erfolgreich) aus. Beachten Sie, dass Sie in der Liste eine Bereitstellung mit dem Namen main sowie eine neue Bereitstellung mit dem Namen appService besitzen.

    Screenshot des Azure-Portals für die Bereitstellungen, wobei zwei Bereitstellungen mit dem Status „Erfolgreich“ aufgelistet werden

  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.

    Beachten Sie, dass die Modulbereitstellung in der Liste angezeigt wird.

    Screenshot des Azure-Portals für die Bereitstellung mit einer aufgelisteten Ressource

  4. Wählen Sie die Registerkarte Ausgaben aus. Beachten Sie, dass es eine Ausgabe namens appServiceAppHostName mit dem Hostnamen Ihrer App Service-App gibt. Kopieren Sie den Hostnamen in die Zwischenablage.

    Screenshot des Azure-Portals für die Ausgaben der Bereitstellung

  5. Öffnen Sie eine neue Browserregisterkarte, und fügen Sie den kopierten Hostnamen ein. Die Standardhomepage von App Service sollte angezeigt werden.

    Screenshot der Standardhomepage von App Service

Glückwunsch! Sie haben erfolgreich den Grundstein für eine großartige App gelegt.