Øvelse – Legg til parametere og variabler i En Bicep-fil

Fullført

Note

Denne øvelsen er valgfri. Hvis du vil fullføre denne øvelsen, må du opprette et Azure-abonnement før du begynner. Hvis du ikke har en Azure-konto eller ikke vil opprette en på dette tidspunktet, kan du lese gjennom instruksjonene slik at du forstår informasjonen som presenteres.

I denne øvelsen oppdaterer du Bicep-filen du opprettet tidligere, slik at den:\

  • Godtar parametere for ressursplasseringer og navn.
  • Bruker forretningsreglene til å velge de riktige SKU-ene for ressursene som distribueres.

Under prosessen gjør du følgende:

  • Oppdater Bicep-filen for å inkludere en location parameter.
  • Oppdater Bicep-filen for å inkludere parametere og variabler for ressursnavnene.
  • Bruk uttrykk til å angi standardverdier for parameterne.
  • Oppdater Bicep-filen for å inkludere variabler for SKU-en for hver ressurs.
  • Test distribusjonen for å sikre at Bicep-filen er gyldig.

Legg til parametere for plasserings- og ressursnavn

  1. Legg til følgende kode øverst i Bicep-filen i main.bicep-filen i Visual Studio Code:

    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 legger til gule bølgete linjer under hver parameter og variabelt navn for å indikere at de ikke brukes i Bicep-filen. Du løser dette problemet snart.

    Legg merke til at du bruker uttrykk som inkluderer streng interpolering og uniqueString()-funksjonen til å definere standard parameterverdier. Noen som distribuerer denne Bicep-filen, kan overstyre standard parameterverdier ved å angi verdiene ved distribusjonstidspunktet, men de kan ikke overstyre variabelverdiene.

    Legg også merke til at du bruker en variabel for azure App Service-plannavnet, men du bruker parametere for de andre navnene. Lagringskontoer og App Service-apper trenger globalt unike navn, men apptjenesteplannavn må bare være unike i ressursgruppen. Denne forskjellen betyr at det ikke er en bekymring å bruke samme apptjenesteplannavn på tvers av ulike distribusjoner, så lenge distribusjonene alle går inn i forskjellige ressursgrupper.

    Tips

    Du angir at location-parameteren skal settes til westus3. Vanligvis oppretter du ressurser på samme plassering som ressursgruppen ved hjelp av resourceGroup().location-egenskapen. Men når du arbeider med Microsoft Learn-sandkassen, må du bruke visse Azure-områder som ikke samsvarer med ressursgruppens plassering.

  2. Finn stedene i ressursdefinisjonene der egenskapene location og name er angitt, og oppdater dem for å bruke parameterverdiene. Når du er ferdig, skal ressursdefinisjonene i Bicep-filen se slik ut:

    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. Lagre endringene i filen.

Angi SKU-ene automatisk for hver miljøtype

  1. Legg til følgende Bicep-parameter under parameterne du opprettet i den forrige oppgaven, i main.bicep-filen i Visual Studio Code:

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

    Legg merke til at du definerer en parameter med et sett med tillatte verdier, men du angir ikke en standardverdi for denne parameteren.

  2. Legg til følgende variabeldefinisjoner under linjen som deklarerer appServicePlanName variabelen:

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

    Legg merke til at du angir disse variableverdiene ved å bruke ternæroperatoren til å uttrykke noe if/then/else logikk.

  3. Finn stedene i ressursdefinisjonene der egenskapene for sku er angitt, og oppdater dem for å bruke parameterverdiene. Når du er ferdig, skal ressursdefinisjonene i Bicep-filen se slik ut:

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

    Legg merke til at du ikke har parameterisert alt. Du har angitt noen egenskaper direkte i ressursdefinisjonene, der du vet at disse verdiene ikke kommer til å endres mellom distribusjoner.

  4. Lagre endringene i filen.

Bekreft En Bicep-fil

Når du har fullført alle de foregående endringene, skal main.bicep-filen se slik ut:

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 samsvarer, kopierer du eksemplet eller justerer filen slik at den samsvarer med eksemplet.

Distribuer den oppdaterte Bicep-filen

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

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

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

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

Legg merke til at du eksplisitt angir verdien for environmentType-parameteren når du utfører distribusjonen. Du trenger ikke å angi de andre parameterverdiene, fordi de har gyldige standardverdier.

Kontrollere distribusjonen

  1. Gå tilbake til Azure Portal i nettleseren, og gå til ressursgruppen. Du vil fortsatt se én vellykket distribusjon fordi distribusjonen brukte samme navn som den første distribusjonen.

  2. Velg koblingen 1 Vellykket.

  3. Velg distribusjonen kalt hoved, og velg deretter distribusjonsdetaljer for å utvide listen over distribuerte ressurser.

    Skjermbilde av Azure Portal-grensesnittet for den bestemte distribusjonen, med lagringskonto og App Service-ressurser oppført med genererte navn.

  4. Legg merke til at en ny App Service-app- og lagringskonto er distribuert med tilfeldig genererte navn.