Øvelse – Føj parametre og variabler til din Bicep-skabelon

Fuldført

I denne øvelse skal du opdatere den Bicep-skabelon, du tidligere har oprettet, så den:\

  • Accepterer parametre for ressourceplaceringer og -navne.
  • Bruger dine forretningsregler til at vælge de rigtige SKU'er for de ressourcer, der udrulles.

Under processen skal du:

  • Opdater skabelonen, så den indeholder en location parameter.
  • Opdater skabelonen, så den indeholder parametre og variabler for ressourcenavnene.
  • Brug udtryk til at angive standardværdier for parametrene.
  • Opdater skabelonen, så den indeholder variabler for SKU'en for hver ressource.
  • Test installationen for at sikre, at skabelonen er gyldig.

Tilføj parametrene for placering og ressourcenavn

  1. I filen main.bicep i Visual Studio Code skal du føje følgende kode til toppen af filen:

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Bicep linter tilføjer gule bølgestreger under hver parameter og hvert variabelnavn for at angive, at de ikke bruges i skabelonen. Du løser snart problemet.

    Bemærk, at du bruger udtryk, der omfatter strenginterpolering og funktionen uniqueString() til at definere standardværdier for parametre. En person, der installerer denne skabelon, kan tilsidesætte standardparameterværdierne ved at angive værdierne på udrulningstidspunktet, men de kan ikke tilsidesætte variabelværdierne.

    Bemærk også, at du bruger en variabel til navnet på Azure App Service-abonnementet, men du bruger parametre til de andre navne. Lagerkonti og App Service-apps skal bruge globalt entydige navne, men App Service-abonnementsnavne skal kun være entydige i deres ressourcegruppe. Denne forskel betyder, at det ikke er et problem at bruge det samme App Service-plannavn på tværs af forskellige udrulninger, så længe udrulningerne alle går ind i forskellige ressourcegrupper.

    Drikkepenge

    Du angiver, at parameteren location skal angives til westus3. Normalt ville du oprette ressourcer på samme placering som ressourcegruppen ved hjælp af egenskaben resourceGroup().location. Men når du arbejder med Microsoft Learn-sandkassen, skal du bruge visse Azure-områder, der ikke svarer til ressourcegruppens placering.

  2. Find de steder i ressourcedefinitionerne, hvor egenskaberne location og name er angivet, og opdater dem, så de bruger parameterværdierne. Når du er færdig, bør ressourcedefinitionerne i din Bicep-fil se sådan ud:

    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@2024-04-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. Gem ændringerne i filen.

Angiv automatisk SKU'erne for hver miljøtype

  1. I filen main.bicep i Visual Studio Code skal du tilføje følgende Bicep-parameter under de parametre, du oprettede i den forrige opgave:

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

    Bemærk, at du definerer en parameter med et sæt tilladte værdier, men du angiver ikke en standardværdi for denne parameter.

  2. Under den linje, der deklarerer variablen appServicePlanName, skal du tilføje følgende variabeldefinitioner:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    Bemærk, at du angiver disse variablers værdier ved hjælp af den ternære operator til at udtrykke nogle if/then/else logik.

  3. Find de steder i ressourcedefinitionerne, hvor egenskaberne for sku er angivet, og opdater dem til at bruge parameterværdierne. Når du er færdig, bør ressourcedefinitionerne i din Bicep-fil se sådan ud:

    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@2024-04-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    Bemærk, at du ikke har parameteriseret alt. Du har angivet nogle egenskaber direkte i ressourcedefinitionerne, hvor du ved, at disse værdier ikke ændres mellem installationer.

  4. Gem ændringerne i filen.

Bekræft din Bicep-fil

Når du har fuldført alle de foregående ændringer, bør filen main.bicep se ud som i dette eksempel:

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@2024-04-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Hvis filen ikke stemmer overens, skal du kopiere eksemplet eller justere filen, så den stemmer overens med eksemplet.

Installer den opdaterede Bicep-skabelon

Kør følgende Azure CLI-kommando i terminalen.

az deployment group create \
  --name main \
  --template-file main.bicep \
  --parameters environmentType=nonprod

Kør følgende Azure PowerShell-kommando i terminalen.

New-AzResourceGroupDeployment `
  -Name main `
  -TemplateFile main.bicep `
  -environmentType nonprod

Bemærk, at du eksplicit angiver værdien for parameteren environmentType, når du udfører installationen. Du behøver ikke at angive de andre parameterværdier, fordi de har gyldige standardværdier.

Kontrollér din installation

  1. Gå tilbage til Azure Portal i din browser, og gå til din ressourcegruppe. Du får stadig vist én vellykket installation, fordi installationen brugte det samme navn som den første installation.

  2. Vælg linket 1 Lykkedes.

  3. Vælg den installation, der kaldes hoved, og vælg derefter Oplysninger om installation for at udvide listen over udrullede ressourcer.

    Skærmbillede af Azure Portal-grænsefladen for den specifikke udrulning med lagerkonto- og App Service-ressourcer angivet med genererede navne.

  4. Bemærk, at der er installeret en ny App Service-app- og lagerkonto med tilfældigt genererede navne.