Övning – Lägga till resurser i en distributionsstack

Slutförd

Du är på sprint 3 för det nya inlåningsprogrammet. Nyligen begärde inlåningsteamet ändringar i några av de Azure-tjänster som används. De begärde också att andra tjänster skulle skapas som stöd för programmet.

I den här övningen skapar du en distributionsstack som är begränsad till en resursgrupp som refererar till en Bicep-fil. Filen definierar en App Service-plan, en apptjänst och en Azure SQL-databas. Sedan ändrar du SKU:n för App Service-planen och uppdaterar distributionsstacken. Slutligen lägger du till en befintlig Log Analytics-arbetsyta och en ny Application Insights-instans som stöd för övervakning av programmet.

Under processen gör du följande:

  • Skapa en Bicep-fil som definierar din ursprungliga arkitektur
  • Skapa en distributionsstack som är begränsad till en resursgrupp med hjälp av din Bicep-fil.
  • Ändra egenskaperna för en befintlig hanterad resurs
  • Uppdatera Bicep-filen så att den innehåller en befintlig Log Analytics-arbetsyta och en ny Application Insights-instans
  • Uppdatera distributionsstacken för att distribuera de hanterade resurserna
  • Verifiera distributionsstackens hanterade resurser.

Den här övningen använder Bicep-tillägget för Visual Studio Code. Installera tillägget i Visual Studio Code.

Skapa Bicep-filen

Vårt första steg är att skapa en Bicep-fil som definierar våra resurser som ska användas med distributionsstacken.

  1. Öppna Visual Studio Code.

  2. Skapa en ny fil med namnet main.bicep.

  3. Spara den tomma filen så att Visual Studio Code läser in Bicep-verktyget.

    Du kan antingen välja Spara som-fil> eller välja Ctrl+S i Windows (⌘+S på macOS). Kom ihåg var du sparade filen. Du kanske till exempel vill skapa en mallmapp där filen ska sparas.

  4. Lägg till följande Bicep-kod i filen. Du distribuerar mallen snart.

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

    Observera att du använder uttryck som innehåller stränginterpolation och uniqueString() funktionen för att definiera standardparametervärden. Någon som distribuerar den här mallen kan åsidosätta standardparametervärdena genom att ange värdena vid distributionstillfället, men de kan inte åsidosätta variabelvärdena.

    Observera också att du använder en variabel för App Service-plannamnet, men du använder parametrar för de andra namnen. Lagringskonton och App Service-appar behöver globalt unika namn, men App Service-plannamn behöver bara vara unika i resursgruppen. Den här skillnaden innebär att det inte är ett problem att använda samma App Service-plannamn för olika distributioner, så länge distributionerna alla går in i olika resursgrupper.

  5. Spara ändringarna i filen.

Skapa distributionsstacken och distribuera dina resurser till Azure

För att distribuera mallen till Azure behöver du logga in på ditt Azure-konto från Visual Studio Code-terminalen. Se till att du har installerat Azure CLI-verktygen.

  1. I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.

  2. Om terminalfönstret visar bash på höger sida innebär det att rätt gränssnitt redan är öppet. Om du ser en bash shell-ikon till höger kan du välja den för att starta gränssnittet.

    Skärmbild av terminalfönstret i Visual Studio Code, där bash-alternativet visas.

    Om ett annat gränssnitt än bash visas väljer du listrutepilen för gränssnittet och väljer sedan Git Bash.

    Skärmbild av terminalfönstret i Visual Studio Code, där listrutan terminalgränssnitt visas och Git Bash Default har valts.

  3. I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:

    cd templates
    

Installera Bicep

Kör följande kommando för att se till att du har den senaste versionen av Bicep:

az bicep install && az bicep upgrade

Logga in på Azure med hjälp av Azure CLI

  1. Logga in på Azure i Visual Studio Code-terminalen genom att köra följande kommando:

    az login
    
  2. Logga in på ditt Azure-konto i webbläsaren som öppnas.

    Visual Studio Code-terminalen visar en lista över de prenumerationer som är associerade med det här kontot.

  3. Leta upp den prenumeration som du vill använda för den här övningen i listan.

    Om du missade listan från inloggningen kan du använda följande kodfragment för att lista dina prenumerationer igen.

    az account list --output table
    
  4. Ange standardprenumerationen för alla Azure CLI-kommandon som du kör i den här sessionen.

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

Skapa en resursgrupp

Vi måste skapa en resursgrupp för vår distributionsstack och hanterade resurser. Om du vill skapa en resursgrupp kör du följande kommando från terminalen i Visual Studio Code.

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

Om du vill distribuera den här mallen till Azure loggar du in på ditt Azure-konto från Visual Studio Code-terminalen. Kontrollera att du har installerat Azure PowerShell.

  1. I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.

  2. Om terminalfönstret visar pwsh eller powershell till höger betyder det att rätt gränssnitt redan är öppet. Om du ser en PowerShell-gränssnittsikon till höger kan du också välja den för att starta gränssnittet.

    Skärmbild av terminalfönstret i Visual Studio Code med pwsh-alternativet som visas i listrutan shell.

    Om ett annat gränssnitt än pwsh eller powershell visas väljer du listrutepilen shell och väljer sedan PowerShell.

    Skärmbild av Terminalfönstret i Visual Studio Code, med listrutan terminalgränssnitt som visas och PowerShell valt.

  3. I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:

    Set-Location -Path templates
    

Installera Bicep CLI

Om du vill använda Bicep från Azure PowerShell installerar du Bicep CLI.

Logga in i Azure med Azure PowerShell

  1. Logga in på Azure i Visual Studio Code-terminalen genom att köra följande kommando:

    Connect-AzAccount
    
  2. Logga in på ditt Azure-konto i webbläsaren som öppnas.

  3. Hämta ID:t för den prenumeration som du vill använda för den här övningen genom att köra följande kommando:

    Get-AzSubscription
    

    Prenumerations-ID är den andra kolumnen. Kopiera den andra kolumnen. Det ser ut ungefär som aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.

  4. Ange standardprenumerationen för alla Azure PowerShell-kommandon som du kör i den här sessionen.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Skapa en resursgrupp

Vi måste skapa en resursgrupp för vår distributionsstack och hanterade resurser. Om du vill skapa en resursgrupp kör du följande kommando från terminalen i Visual Studio Code.

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

Skapa distributionsstacken

Därefter måste vi skapa vår distributionsstack som är begränsad till vår nyligen skapade resursgrupp. Skapa distributionsstacken genom att köra följande kommando från terminalen i Visual Studio Code.

  1. Skapa distributionsstacken genom att köra följande kommando från terminalen i Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Du uppmanas att ange ett värde för sqlServerAdminUserName. Skapa ett namn för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure CLI-kommandoraden där du uppmanas att ange ett användarnamn för SQL Server-administratören.

  3. Du uppmanas att ange ett värde för sqlServerAdminPassword. Skapa ett komplext lösenord för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure CLI-kommandoraden där du uppmanas att ange ett administratörslösenord för SQL Server.

  4. Vänta tills uppdateringsåtgärden har slutförts innan du går vidare till nästa uppgift.

  1. Skapa distributionsstacken genom att köra följande kommando från terminalen i Visual Studio Code.

    New-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode None
    
  2. Du uppmanas att ange ett värde för sqlServerAdminUserName. Skapa ett namn för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure PowerShell-kommandoraden där du uppmanas att ange ett användarnamn för SQL Server-administratören.

  3. Du uppmanas att ange ett värde för sqlServerAdminPassword. Skapa ett komplext lösenord för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure PowerShell-kommandoraden där du uppmanas att ange ett administratörslösenord för SQL Server.

  4. Vänta tills uppdateringsåtgärden har slutförts innan du går vidare till nästa uppgift.

Ändra Bicep-filen för att lägga till den befintliga Log Analytics-arbetsytan och en ny Application Insights-instans

  1. Öppna filen main.bicep i Visual Studio Code.

  2. Lägg till den markerade koden i avsnittet variabler i filen:

    // 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. Lägg till följande kod längst ned i filen:

    // 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. Spara ändringarna i filen.

Ändra Bicep-filen för att ändra App Service-planen och App Service

  1. Öppna filen main.bicep i Visual Studio Code.

  2. Ändra SKU-namnet på App Service-planen från F1 till S1:

    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'S1'
        capacity: 1
      }
    }
    
  3. Lägg till den markerade koden som ska kopplas i Application Insights-instansen:

    // 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. Spara ändringarna i filen.

Uppdatera distributionsstacken

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i resurserna i Bicep-filen implementeras.

  1. Om du vill uppdatera distributionsstacken kör du följande kommando från terminalen i Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Du får ett meddelande om att stacken redan finns i den aktuella prenumerationen. Om värdet för åtgärden för ohanterad parameter har ändrats varnar varningen dig om de nya värdena. Tryck på y, följt av "Retur".

    En skärmbild som visar azure CLI-kommandoraden som varnar för att distributionsstacken redan finns.

  3. Du uppmanas att ange ett värde för sqlServerAdminUserName. Skapa ett namn för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure CLI-kommandoraden där du uppmanas att ange ett användarnamn för SQL Server-administratören.

  4. Du uppmanas att ange ett värde för sqlServerAdminPassword. Skapa ett komplext lösenord för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure CLI-kommandoraden där du uppmanas att ange ett administratörslösenord för SQL Server.

  5. Vänta tills uppdateringsåtgärden har slutförts innan du går vidare till nästa uppgift.

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i App Service-planen implementeras.

  1. Om du vill uppdatera distributionsstacken kör du följande kommando från terminalen i Visual Studio Code.

    Set-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode none
    
  2. Du uppmanas att ange ett värde för sqlServerAdminUserName. Skapa ett namn för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure PowerShell-kommandoraden där du uppmanas att ange ett användarnamn för SQL Server-administratören.

  3. Du uppmanas att ange ett värde för sqlServerAdminPassword. Skapa ett komplext lösenord för SQL Server-administratören följt av "Retur".

    En skärmbild som visar Azure PowerShell-kommandoraden där du uppmanas att ange ett administratörslösenord för SQL Server.

  4. Vänta tills uppdateringsåtgärden har slutförts innan du går vidare till nästa uppgift.

Verifiera uppdateringen av distributionsstacken och de hanterade resurserna

När uppdateringen är klar vill vi verifiera att apptjänstplanens sku uppdateras och att distributionsstacken hanterar den befintliga Log Analytics-arbetsytan och den nya Application Insights-instansen.

  1. Om du vill visa konfigurationen av App Service-planen kör du följande kommando från terminalen i Visual Studio Code.

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. Lägg märke till sku-avsnittet i utdata. App Service-planen finns nu på S1-SKU:n. Den bör likna följande utdata:

    "sku": {
        "capacity": 1,
        "family": "S",
        "name": "S1",
        "size": "S1",
        "tier": "Standard"
    },
    
  3. Om du vill visa konfigurationen av distributionsstacken kör du följande kommando från terminalen i Visual Studio Code.

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. Observera resursavsnittet i utdata. Nu visas den befintliga Log Analytics-arbetsytan och den nya Application Insights-instansen som hanterade resurser. Resultatet bör se ut ungefär så här:

    "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. Om du vill visa konfigurationen av App Service-planen kör du följande kommando från terminalen i Visual Studio Code.

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. Observera utdata. App Service-planen finns nu på S1-SKU:n. Den bör likna följande:

    Name         : S1
    Tier         : Standard
    Size         : S1
    Family       : S
    Capacity     : 1
    
  3. Om du vill visa konfigurationen av distributionsstacken kör du följande kommando från terminalen i Visual Studio Code.

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. Observera resursavsnittet i utdata. Nu visas den befintliga Log Analytics-arbetsytan och den nya Application Insights-instansen som hanterade resurser. Resultatet bör se ut ungefär så här:

    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