Övning – Lägga till parametrar och variabler i din Bicep-mall

Slutförd

I den här övningen uppdaterar du Bicep-mallen som du skapade tidigare så att den:\

  • Accepterar parametrar för resursplatser och namn.
  • Använder dina affärsregler för att välja rätt SKU:er för de resurser som distribueras.

Under processen gör du följande:

  • Uppdatera mallen så att den innehåller en location parameter.
  • Uppdatera mallen så att den innehåller parametrar och variabler för resursnamnen.
  • Använd uttryck för att ange standardvärden för parametrarna.
  • Uppdatera mallen så att den innehåller variabler för SKU:n för varje resurs.
  • Testa distributionen för att säkerställa att mallen är giltig.

Lägg till parametrarna för plats och resursnamn

  1. I filen main.bicep i Visual Studio Code lägger du till följande kod överst i 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-lintern lägger till gula vågiga linjer under varje parameter och variabelnamn för att indikera att de inte används i mallen. Du kommer snart att åtgärda det här problemet.

    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 Azure 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.

    Dricks

    Du anger att parametern location ska vara inställd på westus3. Normalt skapar du resurser på samma plats som resursgruppen med hjälp resourceGroup().location av egenskapen . Men när du arbetar med sandbox-miljön i Microsoft Learn måste du använda vissa Azure-regioner som inte matchar resursgruppens plats.

  2. Hitta platserna i resursdefinitionerna där location egenskaperna och name anges och uppdatera dem så att de använder parametervärdena. När du är klar bör resursdefinitionerna i Bicep-filen se ut så här:

    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@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. Spara ändringarna i filen.

Ange SKU:er automatiskt för varje miljötyp

  1. I filen main.bicep i Visual Studio Code lägger du till följande Bicep-parameter under parametrarna som du skapade i föregående uppgift:

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

    Observera att du definierar en parameter med en uppsättning tillåtna värden, men du anger inte något standardvärde för den här parametern.

  2. Lägg till följande variabeldefinitioner under raden som deklarerar appServicePlanName variabeln:

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

    Observera att du ställer in dessa variabler genom att använda operatorn ternary för att uttrycka viss if/then/else logik.

  3. Hitta de platser i resursdefinitionerna där sku egenskaperna anges och uppdatera dem så att de använder parametervärdena. När du är klar bör resursdefinitionerna i Bicep-filen se ut så här:

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

    Observera att du inte har parametriserat allt. Du har angett vissa egenskaper direkt i resursdefinitionerna, där du vet att dessa värden inte kommer att ändras mellan distributionerna.

  4. Spara ändringarna i filen.

Verifiera Bicep-filen

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

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

Om filen inte matchar kopierar du exemplet eller justerar filen så att den matchar exemplet.

Distribuera den uppdaterade Bicep-mallen

Kör följande Azure CLI-kommando i terminalen.

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

Kör följande Azure PowerShell-kommando i terminalen.

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

Observera att du uttryckligen anger värdet för parametern environmentType när du kör distributionen. Du behöver inte ange de andra parametervärdena eftersom de har giltiga standardvärden.

Kontrollera distributionen

  1. Gå tillbaka till Azure Portal i webbläsaren och gå till resursgruppen. Du ser fortfarande en lyckad distribution eftersom distributionen använde samma namn som den första distributionen.

  2. Välj länken 1 Lyckades .

  3. Välj den distribution som kallas main och välj sedan Distributionsinformation för att expandera listan över distribuerade resurser.

    Skärmbild av Azure Portal-gränssnittet för den specifika distributionen, med lagringskonto och App Service-resurser listade med genererade namn.

  4. Observera att ett nytt App Service-app- och lagringskonto har distribuerats med slumpmässigt genererade namn.