Esercizio - Eseguire il refactoring del modello per usare i moduli

Completato

In questo esercizio si aggiornerà il modello Bicep creato in precedenza in modo che usi un modulo per le risorse del Servizio app di Azure. I moduli consentono di rendere ancora più chiaro il fine ultimo del modello principale. È possibile riusare il modulo del Servizio app di Azure anche in altri modelli, se lo si ritiene opportuno.

Durante il processo, si eseguiranno queste operazioni:

  • Aggiungere un nuovo modulo e spostare al suo interno le risorse del Servizio app di Azure.
  • Fare riferimento al modulo dal modello Bicep principale.
  • Aggiungere un output relativo al nome host dell'app del Servizio app di Azure e generarlo dalle distribuzioni del modello e del modulo.
  • Testare la distribuzione per verificare che il modello sia valido.

Aggiungere un nuovo file del modulo

  1. In Visual Studio Code creare una nuova cartella denominata modules nella stessa cartella in cui è stato creato il file main.bicep. Nella cartella modules creare un file denominato appService.bicep. Salva il file.

  2. Aggiungere nel file appService.bicep il contenuto seguente:

    param location string
    param appServiceAppName string
    
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    var appServicePlanName = 'toy-product-launch-plan'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    
    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
      }
    }
    

    I parametri e le variabili sono stati copiati dal modello main.bicep perché il modello appService.bicep deve essere autonomo.

  3. Salvare le modifiche apportate al file. Osservare come Visual Studio Code non usi la sottolineatura ondulata rossa per indicare avvisi relativi a variabili mancanti, parametri mancanti o risorse non valide.

Aggiungere un riferimento al modulo dal modello padre

È ora disponibile un modulo completo per distribuire le risorse del servizio app ed è quindi possibile fare riferimento al modulo nel modello padre. Poiché il modulo distribuisce le risorse del servizio app, è possibile eliminare dal modello padre le risorse e le variabili associate.

  1. Nel file main.bicep eliminare quindi le risorse del servizio app e le definizioni di variabili appServicePlanName e appServicePlanSkuName. Non eliminare invece i parametri del Servizio app di Azure, poiché sono ancora necessari. né i parametri, la variabile o le risorse dell'account di archiviazione.

  2. Nella parte inferiore del file main.bicep aggiungere il codice Bicep seguente:

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    Osservare come, per specificare i parametri per il modulo in uso, si faccia riferimento ai parametri nel modello padre.

  3. Salvare le modifiche apportate al file.

Aggiungere il nome host come output

  1. Nella parte inferiore del file appService.bicep aggiungere il codice Bicep seguente:

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Questo codice dichiara che un output per questo modulo, che verrà chiamato appServiceAppHostName, sarà di tipo string. L'output recupererà il valore dalla proprietà defaultHostName dell'app del servizio app.

  2. Salvare le modifiche apportate al file.

    Questo output viene dichiarato in un file Bicep che verrà usato come modulo e sarà quindi disponibile solo per il modello padre. È anche necessario restituire l'output alla persona che distribuisce il modello.

  3. Aprire quindi il file main.bicep e aggiungere il codice seguente alla fine del file:

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    Osservare come questo output venga dichiarato in modo simile all'output nel modulo. Questa volta, tuttavia, si fa riferimento all'output del modulo anziché a una proprietà della risorsa.

  4. Salvare le modifiche apportate al file.

Verificare i 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 storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

module appService 'modules/appService.bicep' = {
  name: 'appService'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

output appServiceAppHostName string = appService.outputs.appServiceAppHostName

Il file appService.bicep dovrebbe essere simile all'esempio seguente:

param location string
param appServiceAppName string

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

var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

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

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

Se uno dei file non corrisponde all'esempio, copiare l'esempio oppure modificare il modello.

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

Controllare la distribuzione

  1. Nel browser tornare al portale di Azure. Passare al gruppo di risorse e osservare che ora sono presenti due distribuzioni completate.

  2. Selezionare il collegamento 2 Completate. Nell'elenco sono ora presenti una distribuzione denominata main e una nuova distribuzione denominata appService.

    Screenshot of the Azure portal interface for the deployments, with the two deployments listed and succeeded statuses.

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

    La distribuzione del modulo è ora presente nell'elenco.

    Screenshot of the Azure portal interface for the specific deployment, with one resource listed.

  4. Selezionare la scheda Output. Si noti che è presente un output denominato appServiceAppHostName con il nome host dell'app del servizio app. Copiare il nome host negli Appunti.

    Screenshot of the Azure portal interface for the specific deployment's outputs.

  5. Aprire una nuova scheda del browser e incollare il nome dell'host appena copiato. Viene visualizzata la pagina iniziale predefinita del servizio app.

    Screenshot of the default App Service welcome page.

Congratulazioni. Sono state poste le basi per un'app di grande successo.