Övning – Distribuera resurser villkorligt

Slutförd

Kommentar

Första gången du aktiverar en sandbox-miljö och godkänner villkoren associeras ditt Microsoft-konto med en ny Azure-katalog med namnet Microsoft Learn Sandbox. Du läggs också till i en särskild prenumeration med namnet Concierge-prenumeration.

Du måste distribuera leksaksföretagets resurser till en mängd olika miljöer och du vill använda parametrar och villkor för att styra vad som distribueras till varje miljö.

I den här övningen skapar du en logisk Azure SQL-server och en databas. Sedan lägger du till granskningsinställningar för att säkerställa att granskning är aktiverat, men du vill bara att det ska aktiveras när du distribuerar till en produktionsmiljö. I granskningssyfte behöver du ha ett lagringskonto som du även distribuerar endast när du distribuerar resurser till en produktionsmiljö.

Under processen gör du följande:

  • Skapa en Bicep-fil som definierar en logisk server med en databas.
  • Lägg till ett lagringskonto och SQL-granskningsinställningar som vart och ett distribueras med ett villkor.
  • Konfigurera en infrastruktur för utvecklingsmiljön och verifiera sedan resultatet.
  • Distribuera om infrastrukturen mot produktionsmiljön och titta sedan på ändringarna.

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

Skapa en Bicep-mall med en logisk server och databas

  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 har sparat filen. Du kanske till exempel vill skapa en mallmapp för att spara den.

  4. Om du vill definiera en logisk server och databas lägger du till följande innehåll i filen, tillsammans med de parametrar och variabler som dessa resurser behöver. Ange innehållet själv i stället för att kopiera och klistra in så att du kan se hur verktygen hjälper dig att skriva dina Bicep-filer.

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
    @description('The name and tier of the SQL database SKU.')
    param sqlDatabaseSku object = {
      name: 'Standard'
      tier: 'Standard'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: sqlDatabaseSku
    }
    

    Observera att alla parametrar inkluderar @description dekoratörer, vilket gör dem enklare att arbeta med. Observera också att parametrarna sqlServerAdministratorLogin och sqlServerAdministratorLoginPassword har dekoratören @secure tillämpad på dem. Detta talar om för Bicep att dessa parametervärden är känsliga. Azure skriver inte ut känsliga värden till loggar.

Lägga till ett lagringskonto

I granskningsinställningarna för de logiska servrarna måste du ange ett lagringskonto som ska innehålla granskningsdata. Du uppdaterar Bicep-filen för att skapa det här lagringskontot, men bara när granskning ska aktiveras.

  1. Lägg till följande parametrar under parameterdeklarationerna:

    @description('The name of the environment. This must be Development or Production.')
    @allowed([
      'Development'
      'Production'
    ])
    param environmentName string = 'Development'
    
    @description('The name of the audit storage account SKU.')
    param auditStorageAccountSkuName string = 'Standard_LRS'
    
  2. Lägg till följande variabler under variabeldeklarationerna:

    var auditingEnabled = environmentName == 'Production'
    var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
    

    Observera att du skapar en variabel med namnet auditingEnabled, som du använder som villkor för att distribuera granskningsresurserna. När du skapar en variabel som den här gör du Bicep-koden tydligare och enklare att läsa. Alla som tittar på villkoren för dina resurser kommer att förstå vad som händer.

    Observera också att variabeln auditStorageAccountName använder en funktion som heter take(). Lagringskontonamn har en maximal längd på 24 tecken, så den här funktionen trimmar slutet av strängen för att säkerställa att namnet är giltigt.

  3. Längst ned i filen, under resurserna, lägger du till följande resursdefinition för lagringskontot:

    resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
      name: auditStorageAccountName
      location: location
      sku: {
        name: auditStorageAccountSkuName
      }
      kind: 'StorageV2'  
    }
    

    Observera att definitionerna för lagringskontot innehåller nyckelordet if , som anger ett distributionsvillkor.

Lägga till granskningsinställningar

  1. Lägg till följande under den lagringskontoresurs som du nyss lade till:

    resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
      parent: sqlServer
      name: 'default'
      properties: {
        state: 'Enabled'
        storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
        storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
      }
    }
    

    Observera att definitionen innehåller samma if villkor som lagringskontot. storageEndpoint Dessutom använder egenskaperna och storageAccountAccessKey frågetecknet (?) ternary-operatorn för att säkerställa att deras värden alltid är giltiga. Om du inte gör det utvärderar Azure Resource Manager uttrycksvärdena innan det utvärderar resursdistributionsvillkoret och returnerar ett fel, eftersom lagringskontot inte kan hittas.

  2. Spara ändringarna i filen.

Verifiera Bicep-filen

När du har slutfört alla föregående ändringar bör Bicep-filen se ut så här:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

Om den inte gör det kopierar du antingen exemplet eller justerar mallen så att den matchar exemplet.

Distribuera Bicep-mallen 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 och kom ihåg att logga in med samma konto som du använde för att aktivera sandbox-miljön.

  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

  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. Ange standardprenumerationen för alla Azure CLI-kommandon som du kör i den här sessionen.

    az account set --subscription "Concierge Subscription"
    

    Kommentar

    Om du har använt mer än en sandbox-miljö nyligen kan terminalen visa mer än en instans av Concierge-prenumerationen. I det här fallet använder du följande två steg för att ange ett som standardprenumeration. Om föregående kommando lyckades och endast en Concierge-prenumeration visas hoppar du över de kommande två stegen.

  4. Hämta Concierge-prenumerationernas ID:n.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Använd prenumerations-ID:t för att ange standardprenumerationen. Ersätt {your subscription ID} med ID:t för den senaste Concierge-prenumerationen.

    az account set --subscription {your subscription ID}
    

Ange standardresursgruppen

När du använder Azure CLI kan du ange standardresursgruppen och utelämna parametern från resten av Azure CLI-kommandona i den här övningen. Ange standardvärdet för den resursgrupp som skapas åt dig i sandbox-miljön.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Distribuera mallen till Azure med hjälp av Azure CLI

I Visual Studio Code-terminalen distribuerar du Bicep-mallen till Azure genom att köra följande kod. Observera att du uttryckligen ställer in parametern på location westus3.

az deployment group create --template-file main.bicep --parameters location=westus3

Om du vill distribuera den här mallen till Azure loggar du in på ditt Azure-konto från Visual Studio Code-terminalen. Se till att du har installerat Azure PowerShell och logga in på samma konto som aktiverade sandbox-miljön.

  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. Kör följande kommando i Visual Studio Code-terminalen:

    Connect-AzAccount
    

    En webbläsare öppnas så att du kan logga in på ditt Azure-konto.

  2. När du har loggat in på Azure visar terminalen en lista över de prenumerationer som är associerade med det här kontot.

    Om du har aktiverat sandbox-miljön visas en prenumeration med namnet Concierge-prenumeration . Använd den för resten av övningen.

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

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Kommentar

    Om du har använt mer än en sandbox-miljö nyligen kan terminalen visa mer än en instans av Concierge-prenumerationen. I det här fallet använder du följande två steg för att ange ett som standardprenumeration. Om föregående kommando lyckades och endast en Concierge-prenumeration visas hoppar du över de kommande två stegen.

  4. Skaffa prenumerations-ID:t. När du kör följande kommando visas dina prenumerationer och deras ID:n. Concierge SubscriptionLeta efter och kopiera sedan ID:t från den andra kolumnen. Det ser ut ungefär som aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  5. Ändra din aktiva prenumeration till Concierge-prenumeration. Ersätt {Ditt prenumerations-ID } med det som du kopierade.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

Ange standardresursgruppen

Du kan ange standardresursgruppen och utelämna parametern från resten av Azure PowerShell-kommandona i den här övningen. Ange den här standardinställningen till den resursgrupp som skapats åt dig i sandbox-miljön.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Distribuera mallen till Azure med hjälp av Azure PowerShell

I Visual Studio Code-terminalen distribuerar du mallen till Azure genom att köra följande Azure PowerShell-kommando. Den här processen kan ta några minuter att slutföra och sedan har du en lyckad distribution.

New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3

Du uppmanas att ange värdena för sqlServerAdministratorLogin och sqlServerAdministratorLoginPassword parametrarna när du kör distributionen.

Dricks

När du anger de säkra parametrarna måste de värden du väljer följa vissa regler:

  • sqlServerAdministratorLogin får inte vara ett lätt att gissa inloggningsnamn som admin eller root. Den kan bara innehålla alfanumeriska tecken och måste börja med en bokstav.
  • sqlServerAdministratorLoginPassword måste vara minst åtta tecken långt och innehålla gemener, versaler, siffror och symboler. Mer information om lösenordskomplexitet finns i SQL Azure-lösenordsprincipen.

Om parametervärdena inte uppfyller kraven distribuerar Inte Azure SQL din logiska server.

Observera även inloggningen och lösenordet som du anger. Du kommer snart att använda dem igen.

Eftersom du inte har angett något värde för parametern environmentName används standardvärdet Development för .

Vänta tills distributionen är färdig. Om distributionen misslyckas med ett meddelande om att en plats inte accepterar skapandet av nya Windows Azure SQL Database-servrar väljer du en annan region som eastus eller eastus2.

Verifiera distributionen

Använd Azure Portal för att inspektera de resurser som du distribuerar och för att granska resultatet av varje distribution.

  1. Gå till Azure Portal och kontrollera att du är i sandbox-prenumerationen genom att göra följande:

    a. Välj din avatar längst upp till höger.
    b. Välj Växla katalog. Välj katalogen Sandbox-miljö för Microsoft Learn i listan.

  2. Välj Resursgrupper i den vänstra rutan.

  3. Välj [resursgruppsnamn för sandbox-miljö].

  4. I avsnittet Översikt kan du se att en distribution har slutförts. Du kan också se att en logisk server och en SQL-databas distribueras, men lagringskontot för granskning distribueras inte.

    Kommentar

    Lagringskontot med ett namn som börjar med cloudshell är inte relaterat till distributionen och skapades av sandbox-miljön Learn.

    Skärmbild av översiktsfönstret Azure Portal resursgrupp med ett avsnitt som visar en lyckad distribution.

  5. Bredvid Distributioner väljer du 1 Lyckades för att se distributionsinformation.

    Skärmbild av översiktsfönstret Azure Portal resursgrupp med ytterligare information om den lyckade distributionen.

  6. Välj den distribution som kallas main för att se vilka resurser som har distribuerats och välj sedan Distributionsinformation för att expandera den.

    I det här fallet distribueras en logisk server och en SQL-databas. Observera att lagringskontot och granskningsinställningarna inte finns med i listan över resurser.

    Skärmbild av översiktsfönstret Azure Portal resursgrupp för den specifika distributionen, med en logisk server och databasresurs i listan.

  7. Lämna sidan öppen i webbläsaren. Du går tillbaka till distributionerna senare.

Omdistribuera för produktionsmiljön

I föregående distribution användes standardvärdet för parametern environmentName , vilket innebar att den var inställd på Development.

Nu ska du uttryckligen ange parametervärdet till Production. Du förväntar dig att lagringskontot i granskningssyfte distribueras genom att göra den här ändringen, och granskning aktiveras på den logiska servern.

Distribuera mallen för produktionsmiljön

I Visual Studio Code-terminalen distribuerar du Bicep-mallen till Azure genom att köra följande kod:

az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3

I Visual Studio Code-terminalen distribuerar du mallen till Azure genom att köra följande Azure PowerShell-kommando:

New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3

Varning

Se till att använda samma inloggning och lösenord som du använde tidigare, annars slutförs inte distributionen.

Efter minut eller två bör distributionen slutföras.

Verifiera omdistributionen

För att slutföra den här övningen kontrollerar du att omdistributionen har slutförts och att granskning har aktiverats.

  1. Gå tillbaka till Azure Portal och gå till resursgruppen. Om resursgruppen redan är öppen väljer du Uppdatera.

    Du bör se att ytterligare ett lagringskonto har distribuerats i granskningssyfte.

    Skärmbild av översiktsfönstret Azure Portal resursgrupp som visar att ett lagringskonto har distribuerats för granskning.

  2. Välj din logiska server (leta efter resursen med typen SQL-server).

  3. I sökfältet anger du Granskning. Under Säkerhet väljer du Granskning.

    Skärmbild av Azure Portal-gränssnittet för den logiska servern, som visar sökfältet med Granska angivet.

  4. Kontrollera att granskning är aktiverat för den här logiska servern.

    Skärmbild av Azure Portal-gränssnittet för den logiska servern som visar att granskningskonfigurationen är aktiverad.