Esercizio - Aggiungere parametri e variabili al modello Bicep

Completato

In questo esercizio si aggiornerà il modello Bicep creato in precedenza in modo che:

  • Accetti parametri per le località e i nomi delle risorse.
  • Usi le regole aziendali precedentemente definite per selezionare gli SKU appropriati per le risorse da distribuire.

Durante il processo, si eseguiranno queste operazioni:

  • Aggiornare il modello in modo che contenga un parametro location.
  • Aggiornare il modello in modo che contenga parametri e variabili per i nomi di risorse.
  • Usare espressioni per impostare valori predefiniti per i parametri.
  • Aggiornare il modello in modo da contenere variabili per lo SKU di ogni risorsa.
  • Testare la distribuzione per verificare che il modello sia valido.

Aggiungere i parametri per le località e i nomi delle risorse

  1. Nel file main.bicep in Visual Studio Code aggiungere il codice seguente all'inizio del file:

    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 aggiunge righe gialle ondulate sotto ogni parametro e nomi di variabile per indicare che non sono usati nel modello. Questo problema verrà risolto a breve.

    Osservare come si stiano usando espressioni che includono l'interpolazione di stringhe e la funzione uniqueString()per definire valori di parametri predefiniti. Gli utenti che distribuiranno questo modello potranno sovrascrivere i valori di parametri predefiniti specificando nuovi valori in fase di distribuzione, ma non potranno sostituire i valori delle variabili.

    Osservare inoltre come venga usata una variabile per il nome del piano Servizio app di Azure e vengano usati invece parametri per gli altri nomi. Gli account di archiviazione e le app del Servizio app di Azure richiedono nomi univoci a livello globale, ma i nomi dei piani di servizio app devono essere univoci solo all'interno del rispettivo gruppo di risorse. Questo significa che non è un problema se viene usato lo stesso nome del piano di servizio app in distribuzioni diverse, purché le distribuzioni si trovino in gruppi di risorse diversi.

    Suggerimento

    Si specifica che il parametro location deve essere impostato su westus3. In genere, si creano risorse nella stessa località del gruppo di risorse usando la proprietà resourceGroup().location. Ma quando si lavora con la sandbox di Microsoft Learn, è necessario usare determinate aree di Azure che non corrispondono alla posizione del gruppo di risorse.

  2. Individuare i punti all'interno delle definizioni di risorse in cui sono impostate le proprietà location e name e aggiornarle in modo che vengano usati i valori dei parametri. Al termine, le definizioni delle risorse nel file Bicep avranno un aspetto simile al seguente:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: 'Standard_LRS'
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. Salvare le modifiche apportate al file.

Impostare automaticamente gli SKU per ogni tipo di ambiente

  1. Nel file main.bicep in Visual Studio Code aggiungere il parametro Bicep seguente sotto i parametri creati nell'attività precedente:

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

    Si noti che si sta definendo un parametro con un set di valori consentiti e non si sta specificando un valore predefinito per questo parametro.

  2. Sotto la riga che dichiara la variabile appServicePlanName, aggiungere le definizioni di variabile seguenti:

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

    Si noti che si stanno impostando i valori di queste variabili usando l'operatore ternario per esprimere una logica di tipo if/then/else.

  3. Individuare i punti all'interno delle definizioni di risorse in cui sono impostate le proprietà sku e aggiornarle in modo che vengano usati i valori dei parametri. Al termine, le definizioni delle risorse nel file Bicep avranno un aspetto simile al seguente:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountSkuName
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    Osservare come non tutto sia stato parametrizzati. Alcune proprietà, infatti, sono state impostate direttamente nelle definizioni delle risorse, laddove si sa che questi valori non cambieranno in base alla distribuzione.

  4. Salvare le modifiche apportate al file.

Verificare il file Bicep

Al termine di tutte le modifiche precedenti, il file main.bicep avrà un aspetto simile al seguente:

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@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

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

Se il file non corrisponde all'esempio, copiare l'esempio oppure modificare il file in modo che corrisponda all’esempio.

Distribuire il modello Bicep aggiornato

Eseguire il seguente comando dell'interfaccia della riga di comando di Azure nel terminale.

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

Eseguire il seguente comando di Azure PowerShell nel terminale.

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

Osservare come, mentre il valore del parametro environmentType viene specificato in modo esplicito quando si esegue la distribuzione, Non è necessario specificare i valori degli altri parametri, perché hanni valori predefiniti validi.

Controllare la distribuzione

  1. Nel browser, tornare al portale di Azure e passare al gruppo di risorse. Risulterà ancora una sola distribuzione completata, poiché in questa distribuzione è stato usato lo stesso nome della prima.

  2. Selezionare il collegamento 1 Completata.

  3. Selezionare la distribuzione denominata main e quindi scegliere Dettagli della distribuzione per espandere l'elenco delle risorse distribuite.

    Screenshot of the Azure portal interface for the specific deployment, with storage account and App Service resources listed with generated names.

  4. Si noti che sono stati distribuiti una nuova app servizio app e un account di archiviazione con nomi generati in modo casuale.