Exercice – Ajouter des paramètres et des variables à votre modèle Bicep

Effectué

Dans cet exercice, vous allez mettre à jour le modèle Bicep que vous avez créé précédemment afin que celui-ci:\

  • Accepte des paramètres pour les noms et les emplacements de ressources.
  • Utilise vos règles d’entreprise pour sélectionner les références SKU appropriées pour les ressources qui sont déployées.

Pendant ce processus, vous allez :

  • Mettre à jour le modèle pour inclure un paramètre location.
  • Mettre à jour le modèle pour inclure des paramètres et des variables pour les noms de ressources.
  • Utiliser des expressions pour définir les valeurs par défaut des paramètres.
  • Mettre à jour le modèle pour inclure des variables pour la référence SKU de chaque ressource.
  • Tester le déploiement pour vous assurer que le modèle est valide.

Ajouter les paramètres de nom de ressources et d’emplacement

  1. Dans le fichier main.bicep dans Visual Studio Code, ajoutez le code suivant en haut du fichier :

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Le linter Bicep ajoute des lignes ondulées jaunes sous chacun des noms de paramètre et de variable pour indiquer que vous ne les utilisez pas dans le modèle. Vous allez bientôt corriger ce problème.

    Notez que vous utilisez des expressions qui incluent l’interpolation de chaîne et la fonction uniqueString() pour définir des valeurs de paramètre par défaut. Une personne qui déploie ce modèle peut remplacer les valeurs de paramètre par défaut en spécifiant les valeurs au moment du déploiement, mais elle ne peut pas remplacer les valeurs des variables.

    Notez aussi que vous utilisez une variable pour le nom du plan Azure App Service, mais que vous utilisez des paramètres pour les autres noms. Les comptes de stockage et les applications App Service ont besoin de noms globaux uniques. Toutefois, les noms de plans App Service doivent être uniques seulement au sein de leur groupe de ressources. Cette différence signifie qu’il est possible d’utiliser le même nom de plan App Service dans différents déploiements, à condition que les déploiements soient tous dans des groupes de ressources différents.

    Conseil

    Vous spécifiez que le paramètre location doit être défini sur westus3. Normalement, vous créez des ressources au même emplacement que le groupe de ressources en utilisant la propriété resourceGroup().location. Cependant, quand vous travaillez avec le bac à sable (sandbox) Microsoft Learn, vous devez utiliser certaines régions Azure qui ne correspondent pas à l’emplacement du groupe de ressources.

  2. Recherchez les emplacements dans les définitions de ressources où les propriétés location et name sont définies, puis mettez-les à jour pour utiliser les valeurs de paramètres. Une fois que vous avez terminé, les définitions de ressource dans votre fichier Bicep devraient ressembler à ceci :

    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. Enregistrez les modifications du fichier.

Définir automatiquement les références SKU pour chaque type d’environnement

  1. Dans le fichier main.bicep dans Visual Studio Code, ajoutez le paramètre Bicep suivant sous les paramètres que vous avez créés au cours de la tâche précédente :

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

    Notez que vous définissez un paramètre avec un ensemble de valeurs autorisées, mais que vous ne spécifiez pas de valeur par défaut pour ce paramètre.

  2. Sous la ligne qui déclare la variable appServicePlanName, ajoutez les définitions de variables suivantes :

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

    Notez que vous définissez ces valeurs de variables à l’aide de l’opérateur ternaire pour exprimer une logique if/then/else.

  3. Recherchez les emplacements dans les définitions de ressources où les propriétés sku sont définies, puis mettez-les à jour pour utiliser les valeurs des paramètres. Une fois que vous avez terminé, les définitions de ressource dans votre fichier Bicep devraient ressembler à ceci :

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

    Notez que vous n’avez pas tout paramétré. Vous avez défini des propriétés directement dans les définitions de ressources quand vous savez que celles-ci ne varient pas entre les différents déploiements.

  4. Enregistrez les modifications du fichier.

Vérifier votre fichier 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 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
  }
}

Si votre fichier ne correspond pas, copiez l’exemple ou modifiez votre fichier 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

Notez que vous spécifiez explicitement la valeur du paramètre environmentType quand vous exécutez le déploiement. Vous n’avez pas besoin de spécifier les autres valeurs de paramètres, car des valeurs par défaut valides sont spécifiées.

Vérifier votre déploiement

  1. Dans votre navigateur, retournez au portail Azure et allez vers votre groupe de ressources. Vous verrez toujours un déploiement réussi parce que le déploiement a utilisé le même nom que le premier déploiement.

  2. Sélectionnez le lien 1 Réussi.

  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.

    Capture d’écran de l’interface du portail Azure pour le déploiement spécifique, avec le compte de stockage et les ressources App Service listés avec les noms générés.

  4. Notez qu’une nouvelle application App Service et un nouveau compte de stockage ont été déployés avec des noms générés de façon aléatoire.