Übung: Hinzufügen von Ressourcen zu einem Bereitstellungsstapel

Abgeschlossen

Nun sind Sie bei Sprint 3 für die neue Depotanwendung angelangt. Kürzlich hat die Depotabteilung Änderungen an einigen der verwendeten Azure-Dienste angefordert. Zudem wurde um die Erstellung weiterer Dienste gebeten, die für die Unterstützung der Anwendung erforderlich sind.

In dieser Übung erstellen Sie einen Bereitstellungsstapel für eine Ressourcengruppe, der auf eine Bicep-Datei verweist. Die Datei definiert einen App Service-Plan, eine App Service-Instanz und eine Azure SQL-Datenbank. Anschließend ändern Sie die SKU des App Service-Plans und updaten den Bereitstellungsstapel. Schließlich fügen Sie einen vorhandenen Log Analytics-Arbeitsbereich und eine neue Application Insights-Instanz hinzu, um die Überwachung der Anwendung zu unterstützen.

In dem Prozess gehen Sie wie folgt vor:

  • Erstellen einer Bicep-Datei, die Ihre anfängliche Architektur definiert
  • Erstellen Sie mithilfe Ihrer Bicep-Datei einen Bereitstellungsstapel, der einer Ressourcengruppe zugeordnet ist.
  • Ändern der Eigenschaften einer vorhandenen verwalteten Ressource
  • Updaten der Bicep-Datei, um einen vorhandenen Log Analytics-Arbeitsbereich und eine neue Application Insights-Instanz einzuschließen
  • Updaten des Bereitstellungsstapels zur Bereitstellung der verwalteten Ressourcen
  • Überprüfen der verwalteten Ressourcen des Bereitstellungsstapels

In dieser Übung wird die Bicep-Erweiterung für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.

Erstellen der Bicep-Datei

Im ersten Schritt erstellen Sie eine Bicep-Datei, die die Ressourcen definiert, die mit dem Bereitstellungsstapel verwendet werden sollen.

  1. Öffnen Sie Visual Studio Code.

  2. Erstellen Sie eine neue Datei namens main.bicep.

  3. Speichern Sie die leere Datei, damit Visual Studio Code die Bicep-Tools lädt.

    Sie können entweder Datei>Speichern unter oder STRG+S unter Windows (⌘+S unter macOS) auswählen. Merken Sie sich unbedingt den Speicherort der Datei. Sie könnten beispielsweise einen Ordner templates erstellen, in dem die Datei gespeichert werden soll.

  4. Fügen Sie den folgenden Bicep-Code in die Datei ein. Sie werden die Vorlage in Kürze bereitstellen.

    // Parameters
    @description('The location for all resources.')
    param location string = 'eastus'
    
    @description('The name of the SQL database.')
    param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
    
    @description('The password of the admin user.')
    param sqlServerAdminUserName string
    
    @description('The name of the admin user.')
    @secure()
    param sqlServerAdminPassword string
    
    @description('The name of the SQL server.')
    param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the web application.')
    param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
    
    // Variables
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
        capacity: 1
      }
    }
    
    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id  
      }
    }
    
    // Resource - SQL Server
    resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdminUserName
        administratorLoginPassword: sqlServerAdminPassword
      }
    }
    
    // Resource - SQL Database
    resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: {
        name: 'Standard'
        tier: 'Standard'
      }
    }
    

    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 Namen des App Service-Plans 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.

  5. Speichern Sie die Änderungen in der Datei.

Erstellen des Bereitstellungsstapels und Bereitstellen der Ressourcen in Azure

Sie müssen sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto anmelden, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Sie die Azure CLI-Tools installiert haben.

  1. Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.

  2. Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell bash ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.

    Screenshot des Visual Studio Code-Terminalfensters mit Option „bash“

  3. Wenn eine andere Shell als bash angezeigt wird, wählen Sie die Shell-Dropdownliste und dann Azure Cloud Shell (Bash) aus.

    Screenshot des Visual Studio Code-Terminalfensters mit dem Dropdownmenü für die Terminalshell und Auswahl von „Git Bash (Standard)“

  4. Wählen Sie in der Liste der Terminalshells bash aus.

    Screenshot: Visual Studio Code-Terminalfenster mit „bash“ als ausgewähltem Terminal

  5. Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:

    cd templates
    

Installieren von Bicep

Vergewissern Sie sich mit dem folgenden Befehl, dass Sie die aktuelle Version von Bicep verwenden:

az bicep install && az bicep upgrade

Anmelden bei Azure mithilfe der Azure CLI

  1. Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:

    az login
    
  2. Melden Sie sich im Browserfenster, das daraufhin geöffnet wird, in Ihrem Azure-Konto an.

    Im Visual Studio Code-Terminal wird eine Liste der Abonnements angezeigt, die diesem Konto zugeordnet sind.

  3. Suchen Sie in der Liste nach dem Abonnement, das Sie für diese Übung verwenden möchten.

    Wenn Sie die Liste bei der Anmeldung verpasst haben, können Sie den folgenden Codeausschnitt verwenden, um Ihre Abonnements erneut aufzulisten.

    az account list --output table
    
  4. Legen Sie das Standardabonnement für alle Azure CLI-Befehle fest, die Sie in dieser Sitzung ausführen.

    az account set --subscription "Your Subscription Name or ID"
    

Erstellen einer Ressourcengruppe

Sie müssen eine Ressourcengruppe für Ihren Bereitstellungsstapel und die verwalteten Ressourcen erstellen. Führen Sie zum Erstellen einer Ressourcengruppe den folgenden Befehl über das Terminal in Visual Studio Code aus.

az group create \
    --name rg-depositsApplication \
    --location eastus

Melden Sie sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto an, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Azure PowerShell installiert ist.

  1. Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.

  2. Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell powershell oder pwsh ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.

    Screenshot des Terminalfensters von Visual Studio Code mit der Option „pwsh“ in der Shell-Dropdown-Liste.

  3. Wenn eine andere Shell als powershell oder pwsh angezeigt wird, wählen Sie die Shell-Dropdownliste und dann PowerShell aus.

    Screenshot des Terminalfensters von Visual Studio Code mit der Dropdown-Liste der Terminal-Shell und der Auswahl von PowerShell.

  4. Wählen Sie in der Liste der Terminalshells powershell oder pwsh aus.

    Screenshot des Visual Studio Code-Terminalfensters mit „PowerShell“ als ausgewähltem Terminal.

  5. Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:

    Set-Location -Path templates
    

Installieren der Bicep CLI

Installieren Sie die Bicep-CLI, um Bicep über Azure PowerShell zu verwenden.

Anmelden bei Azure mithilfe von Azure PowerShell

  1. Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:

    Connect-AzAccount
    
  2. Melden Sie sich im Browser, der anschließend geöffnet wird, bei Ihrem Azure-Konto an.

  3. Führen Sie den folgenden Befehl aus, um die ID des Abonnements abzurufen, das Sie für diese Übung verwenden möchten:

    Get-AzSubscription
    

    Die Abonnement-ID befindet sich in der zweiten Spalte. Kopieren Sie die zweite Spalte. Es sieht ungefähr wie aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e aus.

  4. Legen Sie das Standardabonnement für alle Azure PowerShell-Befehle fest, die Sie in dieser Sitzung ausführen.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Erstellen einer Ressourcengruppe

Sie müssen eine Ressourcengruppe für Ihren Bereitstellungsstapel und die verwalteten Ressourcen erstellen. Führen Sie zum Erstellen einer Ressourcengruppe den folgenden Befehl über das Terminal in Visual Studio Code aus.

New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus

Erstellen des Bereitstellungsstapels

Als Nächstes müssen Sie den Bereitstellungsstapel für die zuvor erstellte Ressourcengruppe erstellen. Führen Sie zum Erstellen des Bereitstellungsstapels den folgenden Befehl über das Terminal in Visual Studio Code aus.

  1. Führen Sie zum Erstellen des Bereitstellungsstapels den folgenden Befehl über das Terminal in Visual Studio Code aus.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Sie werden aufgefordert, einen Wert für sqlServerAdminUserName einzugeben. Erstellen Sie einen Namen für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure CLI-Befehlszeile, in der Sie aufgefordert werden, einen Benutzernamen für den SQL Server-Administrator einzugeben

  3. Sie werden aufgefordert, einen Wert für sqlServerAdminPassword einzugeben. Erstellen Sie ein komplexes Kennwort für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure CLI-Befehlszeile, in der Sie aufgefordert werden, ein Kennwort für den SQL Server-Administrator einzugeben.

  4. Warten Sie, bis der Aktualisierungsvorgang abgeschlossen ist, bevor Sie mit der nächsten Aufgabe fortfahren.

  1. Führen Sie zum Erstellen des Bereitstellungsstapels den folgenden Befehl über das Terminal in Visual Studio Code aus.

    New-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode None
    
  2. Sie werden aufgefordert, einen Wert für sqlServerAdminUserName einzugeben. Erstellen Sie einen Namen für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure PowerShell-Befehlszeile, in der Sie aufgefordert werden, einen Benutzernamen für den SQL Server-Administrator einzugeben

  3. Sie werden aufgefordert, einen Wert für sqlServerAdminPassword einzugeben. Erstellen Sie ein komplexes Kennwort für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure PowerShell-Befehlszeile, in der Sie aufgefordert werden, ein Kennwort für den SQL Server-Administrator einzugeben

  4. Warten Sie, bis der Aktualisierungsvorgang abgeschlossen ist, bevor Sie mit der nächsten Aufgabe fortfahren.

Ändern der Bicep-Datei zum Hinzufügen des vorhandenen Log Analytics-Arbeitsbereichs und einer neuen Application Insights-Instanz

  1. Öffnen Sie die Datei main.bicep in Visual Studio Code.

  2. Fügen Sie dem Variablenabschnitt der Datei den hervorgehobenen Code hinzu:

    // Variables
    @description('The name of the Application Insights instance.')
    var applicationInsightsName = 'appinsights-deposits'
    
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    @description('The name of the Log Analytics Workspace.')
    var logAnalyticsWorkspaceName = 'log-deposits'
    
  3. Fügen Sie unten in der Datei den folgenden Code hinzu:

    // Resource - Log Analytics Workspace
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
      name: logAnalyticsWorkspaceName
      location: location
      properties: {
        retentionInDays: 30
        sku: {
          name: 'PerGB2018'
        }
      }
    }
    
    // Resource - Application Insights
    resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
      name: applicationInsightsName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
        WorkspaceResourceId: logAnalyticsWorkspace.id
      }
    }
    
  4. Speichern Sie die Änderungen in der Datei.

Ändern der Bicep-Datei zum Ändern des App Service-Plans und der App Service-Instanz

  1. Öffnen Sie die Datei main.bicep in Visual Studio Code.

  2. Ändern Sie den SKU-Namen des App Service-Plans von F1 in S1:

    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'S1'
        capacity: 1
      }
    }
    
  3. Fügen Sie den hervorgehobenen Code hinzu, um ihn in die Application Insights-Instanz einzubinden:

    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsights.properties.InstrumentationKey
            }     
          ]
        }    
      }
    }
    
  4. Speichern Sie die Änderungen in der Datei.

Aktualisieren des Bereitstellungsstapels

Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel updaten, damit die an den Ressourcen in der Bicep-Datei vorgenommenen Änderungen implementiert werden.

  1. Führen Sie zum Aktualisieren des Bereitstellungsstapels den folgenden Befehl über das Terminal in Visual Studio Code aus.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Sie erhalten eine Meldung, die besagt, dass der Stapel bereits im aktuellen Abonnement vorhanden ist. Wenn sich der Wert des Parameters Aktion für Nichtverwalten verändert hat, werden Sie durch die Warnung über die neuen Werte benachrichtigt. Drücken Sie zunächst y und dann die EINGABETASTE.

    Screenshot: Warnung in der Azure CLI-Befehlszeile, dass der Bereitstellungsstapel bereits vorhanden ist

  3. Sie werden aufgefordert, einen Wert für sqlServerAdminUserName einzugeben. Erstellen Sie einen Namen für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure CLI-Befehlszeile, in der Sie aufgefordert werden, einen Benutzernamen für den SQL Server-Administrator einzugeben

  4. Sie werden aufgefordert, einen Wert für sqlServerAdminPassword einzugeben. Erstellen Sie ein komplexes Kennwort für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure CLI-Befehlszeile, in der Sie aufgefordert werden, ein Kennwort für den SQL Server-Administrator einzugeben.

  5. Warten Sie, bis der Aktualisierungsvorgang abgeschlossen ist, bevor Sie mit der nächsten Aufgabe fortfahren.

Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel aktualisieren, damit die am App Service-Plan vorgenommenen Änderungen implementiert werden.

  1. Führen Sie zum Aktualisieren des Bereitstellungsstapels den folgenden Befehl über das Terminal in Visual Studio Code aus.

    Set-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode none
    
  2. Sie werden aufgefordert, einen Wert für sqlServerAdminUserName einzugeben. Erstellen Sie einen Namen für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure PowerShell-Befehlszeile, in der Sie aufgefordert werden, einen Benutzernamen für den SQL Server-Administrator einzugeben

  3. Sie werden aufgefordert, einen Wert für sqlServerAdminPassword einzugeben. Erstellen Sie ein komplexes Kennwort für den SQL Server-Administrator, und drücken Sie die EINGABETASTE.

    Screenshot: Azure PowerShell-Befehlszeile, in der Sie aufgefordert werden, ein Kennwort für den SQL Server-Administrator einzugeben

  4. Warten Sie, bis der Aktualisierungsvorgang abgeschlossen ist, bevor Sie mit der nächsten Aufgabe fortfahren.

Überprüfen der Aktualisierung des Bereitstellungsstapels und der verwalteten Ressourcen

Nach Abschluss des Updates sollten Sie überprüfen, ob die SKU des App Service-Plans upgedatet wird und der Bereitstellungsstapel den vorhandenen Log Analytics-Arbeitsbereich und die neue Application Insights-Instanz verwaltet.

  1. Um die Konfiguration des App Service-Plans anzuzeigen, führen Sie den folgenden Befehl über das Terminal in Visual Studio Code aus.

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. Beachten Sie den SKU-Abschnitt der Ausgabe. Der App Service-Plan befindet sich jetzt in der SKU „S1“. Die Ausgabe sollte in etwa wie folgt aussehen:

    "sku": {
        "capacity": 1,
        "family": "S",
        "name": "S1",
        "size": "S1",
        "tier": "Standard"
    },
    
  3. Um die Konfiguration des Bereitstellungsstapels anzuzeigen, führen Sie den folgenden Befehl über das Terminal in Visual Studio Code aus.

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. Beachten Sie den Ressourcenabschnitt der Ausgabe. Nun sehen Sie den vorhandenen Log Analytics-Arbeitsbereich und die neue Application Insights-Instanz, die als verwaltete Ressourcen aufgeführt sind. Das Ergebnis sollte der folgenden Ausgabe ähneln:

    "resources": [
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      }
    ],
    
  1. Um die Konfiguration des App Service-Plans anzuzeigen, führen Sie den folgenden Befehl über das Terminal in Visual Studio Code aus.

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. Beachten Sie die Ausgabe. Der App Service-Plan befindet sich jetzt in der SKU „S1“. Die Ausgabe sollte in etwa wie folgt aussehen:

    Name         : S1
    Tier         : Standard
    Size         : S1
    Family       : S
    Capacity     : 1
    
  3. Um die Konfiguration des Bereitstellungsstapels anzuzeigen, führen Sie den folgenden Befehl über das Terminal in Visual Studio Code aus.

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. Beachten Sie den Ressourcenabschnitt der Ausgabe. Nun sehen Sie den vorhandenen Log Analytics-Arbeitsbereich und die neue Application Insights-Instanz, die als verwaltete Ressourcen aufgeführt sind. Das Ergebnis sollte der folgenden Ausgabe ähneln:

    Resources                     : /subscriptions/./resourceGroups/rg-depositsApplication/././servers/                        sql-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits