Exercice – Refactoriser votre modèle pour utiliser les modules

Effectué

Dans cet exercice, vous allez mettre à jour le modèle Bicep que vous avez créé précédemment afin qu’il utilise un module pour les ressources Azure App Service. Grâce aux modules, la finalité du modèle principal reste plus claire. Si vous le souhaitez, vous pouvez réutiliser le module App Service dans d’autres modèles.

Pendant ce processus, vous allez :

  • Ajouter un nouveau module et y placer les ressources App Service.
  • Référencer le module à partir du modèle Bicep principal.
  • Ajouter une sortie pour le nom d’hôte de l’application App Service et l’émettre à partir des déploiements de modèle et de module.
  • Tester le déploiement pour vous assurer que le modèle est valide.

Ajouter un nouveau fichier de module

  1. Dans Visual Studio Code, créez un nouveau dossier appelé modules dans le même dossier que celui où vous avez créé votre fichier main.bicep. Dans le dossier modules, créez un fichier appelé appService.bicep. Enregistrez le fichier .

  2. Ajoutez le contenu suivant dans le fichier appService.bicep :

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

    Notez que vous avez copié les paramètres et les variables à partir de votre modèle main.bicep, car le modèle appService.bicep doit être autonome.

  3. Enregistrez les modifications du fichier. Notez que Visual Studio Code n’utilise pas le soulignement ondulé rouge pour signaler des avertissements concernant des variables manquantes, des paramètres manquants ou des ressources non valides.

Ajouter une référence au module à partir du modèle parent

Maintenant que vous disposez d’un module complet pour déployer les ressources App Service, vous pouvez faire référence au module dans le modèle parent. Dans la mesure où le module déploie les ressources App Service, vous pouvez supprimer les ressources et variables associées du modèle parent.

  1. Dans le fichier main.bicep, supprimez les ressources App Service ainsi que les définitions de variables appServicePlanName et appServicePlanSkuName. Ne supprimez pas les paramètres à App Service car vous en avez toujours besoin. En outre, ne supprimez pas les paramètres, la variable ni les ressources du compte de stockage.

  2. En bas du fichier main.bicep, ajoutez le code Bicep suivant :

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

    Notez que vous spécifiez les paramètres de votre module en référençant les paramètres dans le modèle parent.

  3. Enregistrez les modifications du fichier.

Ajouter le nom d’hôte en tant que sortie

  1. Ajoutez le code Bicep suivant en bas du fichier appService.bicep :

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Ce code déclare qu’une sortie pour ce module, nommée appServiceAppHostName, sera de type string. La sortie prendra sa valeur à partir de la propriété defaultHostName de l’application App Service.

  2. Enregistrez les modifications du fichier.

    Cette sortie est déclarée dans un fichier Bicep que nous allons utiliser comme module, elle sera donc disponible uniquement pour le modèle parent. Vous devez également retourner la sortie à la personne qui déploie le modèle.

  3. Ouvrez le fichier main.bicep et ajoutez le code suivant en bas du fichier :

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    Notez que cette sortie est déclarée de la même façon que la sortie dans le module. Mais cette fois, vous référencez la sortie du module au lieu d’une propriété de ressource.

  4. Enregistrez les modifications du fichier.

Vérifier vos fichiers Bicep

Une fois que vous avez effectué toutes les modifications précédentes, votre fichier main.bicep doit ressembler à l’exemple suivant :

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@2023-05-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

Votre fichier appService.bicep doit ressembler à l’exemple suivant :

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

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

Si l’un ou l’autre des fichiers ne correspond pas, copiez l’exemple ou modifiez votre modèle pour qu’il corresponde à l’exemple.

Déployer le modèle Bicep mis à jour

Exécutez la commande Azure CLI suivante dans le terminal.

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

Exécutez la commande Azure PowerShell suivante dans le terminal.

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

Vérifier votre déploiement

  1. Dans votre navigateur, retournez au portail Azure. Accédez à votre groupe de ressources. Vous pouvez désormais voir 2 déploiements réussis.

  2. Sélectionnez le lien 2 opérations réussies. Notez que vous avez un déploiement appelé main dans la liste, ainsi qu’un nouveau déploiement appelé appService.

    Capture d’écran de l’interface du portail Azure pour les déploiements avec deux déploiements répertoriés et réussis.

  3. Sélectionnez le déploiement appelé main, puis sélectionnez Détails du déploiement pour développer la liste des ressources déployées.

    Notez que le déploiement de notre module s’affiche dans la liste.

    Capture d’écran de l’interface du portail Azure pour le déploiement spécifique avec une ressource répertoriée.

  4. Sélectionnez l’onglet Sorties. Notez qu’il existe une sortie appelée appServiceAppHostName avec le nom d’hôte de votre application App Service. Copiez le nom d’hôte dans le presse-papiers.

    Capture d’écran de l’interface du portail Azure pour les sorties d’un déploiement spécifique.

  5. Ouvrez un nouvel onglet de navigateur et collez le nom d’hôte que vous avez copié. Vous devez voir la page d’accueil d’App Service par défaut.

    Capture d’écran de la page d’accueil d’App Service par défaut.

Félicitations ! Vous avez bien déployé les bases pour une bonne application.