Exercice : Créer et utiliser un module

Effectué

Vous êtes chargé d’ajouter un réseau de distribution de contenu, ou CDN, au site web de votre entreprise pour le lancement d’un jouet Wombat. Toutefois, d’autres équipes de votre entreprise n’ont pas besoin d’un CDN. Dans cet exercice, vous créez des modules pour le site web et le CDN, et vous ajoutez les modules à un modèle.

Pendant ce processus, vous allez :

  • Ajouter un module pour votre application.
  • Créer un modèle Bicep qui utilise le module.
  • Ajouter un autre module pour le CDN.
  • Ajouter le module CDN à votre modèle, tout en le rendant facultatif.
  • Déployez le modèle sur Azure.
  • Passer en revue l’historique de déploiement.

Cet exercice utilise l’extension Bicep pour Visual Studio Code. Assurez-vous d’installer cette extension dans Visual Studio Code.

Créer un fichier Bicep vide

  1. Ouvrez Visual Studio Code.

  2. Créez un fichier nommé main.bicep.

  3. Enregistrez le fichier vide afin que Visual Studio Code charge les outils Bicep.

    Vous pouvez sélectionner Fichier>Enregistrer sous ou Ctrl+S sur Windows (⌘+S sur macOS). Assurez-vous de bien noter l’emplacement où le fichier est enregistré. Par exemple, vous pouvez créer un dossier templates où l’enregistrer.

Créer un module pour votre application

  1. Créez un dossier appelé modules dans le même dossier où vous avez créé votre fichier main.bicep. Dans le dossier modules, créez un fichier nommé app.bicep. Enregistrez le fichier .

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

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @description('The name of the App Service app.')
    param appServiceAppName string
    
    @description('The name of the App Service plan.')
    param appServicePlanName string
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string
    
    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
      }
    }
    
    @description('The default host name of the App Service app.')
    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Ce fichier déploie un plan Azure App Service et une application. Notez que le module est relativement générique. Il ne comprend pas d’hypothèses sur les noms de ressources ou la référence SKU du plan App Service. Cela facilite la réutilisation du module pour différents déploiements.

  3. Enregistrez les modifications du fichier.

Ajouter le module à votre modèle Bicep

Ici, vous ajoutez le module app à votre modèle Bicep comme point de départ.

  1. Ouvrez le fichier main.bicep.

  2. Ajoutez les paramètres et la variable suivants au fichier :

    @description('The Azure region into which the resources should be deployed.')
    param location string = 'westus3'
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Comme il s’agit du modèle que vous avez l’intention de déployer pour vos sites web de jouets, il est un peu plus spécifique. Le nom du plan App Service est défini sous forme de variable. Le paramètre de référence SKU a une valeur par défaut qui est logique pour le site web de lancement du jouet.

    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.

  3. Sous les paramètres, créez une ligne vide. À présent, tapez la première ligne de la définition du module app :

    module app 'modules/app.bicep' = {
    

    Quand vous tapez, vous remarquez que l’extension Bicep pour Visual Studio Code vous aide à construire la déclaration de module. Quand vous tapez le chemin de votre module et le caractère égal (=), un menu contextuel s’affiche avec plusieurs options.

  4. Sélectionnez les Propriétés obligatoires dans le menu contextuel :

    Capture d’écran de Visual Studio Code qui montre l’option pour construire un module avec ses propriétés obligatoires.

  5. Complétez la déclaration du module :

    module app 'modules/app.bicep' = {
      name: 'toy-launch-app'
      params: {
        appServiceAppName: appServiceAppName
        appServicePlanName: appServicePlanName
        appServicePlanSkuName: appServicePlanSkuName
        location: location
      }
    }
    
  6. En bas du fichier, définissez une sortie :

    @description('The host name to use to access the website.')
    output websiteHostName string = app.outputs.appServiceAppHostName
    
  7. Enregistrez les modifications du fichier.

Créer un module pour le réseau de distribution de contenu

  1. Dans le dossier modules, créez un fichier nommé cdn.bicep. Enregistrez le fichier .

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

    @description('The host name (address) of the origin server.')
    param originHostName string
    
    @description('The name of the CDN profile.')
    param profileName string = 'cdn-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the CDN endpoint')
    param endpointName string = 'endpoint-${uniqueString(resourceGroup().id)}'
    
    @description('Indicates whether the CDN endpoint requires HTTPS connections.')
    param httpsOnly bool
    
    var originName = 'my-origin'
    
    resource cdnProfile 'Microsoft.Cdn/profiles@2024-02-01' = {
      name: profileName
      location: 'global'
      sku: {
        name: 'Standard_Microsoft'
      }
    }
    
    resource endpoint 'Microsoft.Cdn/profiles/endpoints@2024-02-01' = {
      parent: cdnProfile
      name: endpointName
      location: 'global'
      properties: {
        originHostHeader: originHostName
        isHttpAllowed: !httpsOnly
        isHttpsAllowed: true
        queryStringCachingBehavior: 'IgnoreQueryString'
        contentTypesToCompress: [
          'text/plain'
          'text/html'
          'text/css'
          'application/x-javascript'
          'text/javascript'
        ]
        isCompressionEnabled: true
        origins: [
          {
            name: originName
            properties: {
              hostName: originHostName
            }
          }
        ]
      }
    }
    
    @description('The host name of the CDN endpoint.')
    output endpointHostName string = endpoint.properties.hostName
    

    Ce fichier déploie deux ressources : un profil CDN et un point de terminaison CDN.

  3. Enregistrez les modifications du fichier.

Ajouter les modules au modèle Bicep main

  1. Ouvrez le fichier main.bicep.

  2. Sous le paramètre appServicePlanSkuName, ajoutez les paramètres suivants :

    @description('Indicates whether a CDN should be deployed.')
    param deployCdn bool = true
    
  3. Sous la définition du module app, définissez le module cdn :

    module cdn 'modules/cdn.bicep' = if (deployCdn) {
      name: 'toy-launch-cdn'
      params: {
        httpsOnly: true
        originHostName: app.outputs.appServiceAppHostName
      }
    }
    

    Notez que le module a une condition afin de pouvoir être déployé uniquement quand la valeur du paramètre deployCdn est définie sur true. Notez également que le paramètre originHostName du module est défini sur la valeur de la sortie appServiceAppHostName du module app.

  4. Mettez à jour la sortie du nom d’hôte pour qu’elle sélectionne le nom d’hôte approprié. Quand un CDN est déployé, vous voulez que le nom d’hôte soit celui du point de terminaison CDN.

    output websiteHostName string = deployCdn ? cdn.outputs.endpointHostName : app.outputs.appServiceAppHostName
    
  5. Enregistrez les modifications du fichier.

Déployer le modèle Bicep sur Azure

Pour déployer ce modèle sur Azure, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code. Veillez à installer Azure CLI sans oublier de vous connecter avec le même compte que celui utilisé pour activer le bac à sable.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est bash, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec l’option bash affichée.

  3. Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Azure Cloud Shell (Bash).

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée et l’option Git Bash par défaut sélectionnée.

  4. Dans la liste des interpréteurs de commandes de terminal, sélectionnez bash.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal bash sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    cd templates
    

Installer Bicep

Exécutez la commande suivante pour vous assurer de disposer de la dernière version de Bicep :

az bicep install && az bicep upgrade

Connexion à Azure

  1. Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    az login
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

    Le terminal Visual Studio Code affiche la liste des abonnements associés à ce compte.

  3. Définissez l’abonnement par défaut pour toutes les commandes Azure CLI que vous exécutez dans cette session.

    az account set --subscription "Concierge Subscription"
    

    Notes

    Si vous avez utilisé plusieurs bacs à sable récemment, le terminal risque d’afficher plusieurs instances de l’abonnement Concierge. Dans ce cas, utilisez les deux étapes suivantes pour en définir un comme l’abonnement par défaut. Si la commande précédente a réussi et qu’un seul abonnement Concierge est listé, ignorez les deux étapes suivantes.

  4. Obtenez les ID des abonnements Concierge.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Définissez l’abonnement par défaut en utilisant l’ID d’abonnement. Remplacez {your subscription ID} par l’ID du dernier abonnement Concierge.

    az account set --subscription {your subscription ID}
    

Définir le groupe de ressources par défaut

Quand vous utilisez Azure CLI, vous pouvez définir le groupe de ressources par défaut et omettre le paramètre du reste des commandes Azure CLI dans cet exercice. Définissez le paramètre par défaut sur le groupe de ressources qui est créé pour vous dans l’environnement de bac à sable.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Déployer le modèle sur Azure

Exécutez le code suivant à partir du terminal dans Visual Studio Code pour déployer le modèle Bicep sur Azure. Ce processus peut prendre une minute ou deux, puis vous voyez que le déploiement a réussi.

az deployment group create --template-file main.bicep

L’état Running... apparaît dans le terminal.

Pour déployer ce modèle sur Azure, connectez-vous à votre compte Azure à partir du terminal Visual Studio Code. Vérifiez que vous avez installé Azure PowerShell et connectez-vous au même compte que celui qui a activé le bac à sable.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est powershell ou pwsh, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code, avec l’option pwsh indiquée dans la liste déroulante de l’interpréteur de commande.

  3. Si un shell autre que powershell ou pwsh apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis PowerShell.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée avec PowerShell sélectionné.

  4. Dans la liste d’interpréteurs de commandes de terminal, sélectionnez powershell ou pwsh.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal PowerShell sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    Set-Location -Path templates
    

Installer l’interface CLI Bicep

Pour utiliser Bicep à partir d’Azure PowerShell, installez l’interface CLI de Bicep.

Connectez-vous à Azure en utilisant Azure PowerShell

  1. Dans le terminal Visual Studio Code, exécutez la commande suivante :

    Connect-AzAccount
    

    Un navigateur s’ouvre pour vous permettre de vous connecter à votre compte Azure.

  2. Une fois que vous êtes connecté à Azure, le terminal affiche une liste des abonnements associés à ce compte.

    Si vous avez activé le bac à sable, un abonnement appelé Abonnement Concierge s’affiche. Utilisez-le pour le reste de l’exercice.

  3. Définissez l’abonnement par défaut pour toutes les commandes Azure PowerShell que vous exécutez dans cette session.

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Notes

    Si vous avez utilisé plusieurs bacs à sable récemment, le terminal risque d’afficher plusieurs instances de l’abonnement Concierge. Dans ce cas, utilisez les deux étapes suivantes pour en définir un comme l’abonnement par défaut. Si la commande précédente a réussi et qu’un seul abonnement Concierge est listé, ignorez les deux étapes suivantes.

  4. Obtenir l’ID d’abonnement. L’exécution de la commande suivante liste vos abonnements et leurs ID. Recherchez Concierge Subscription, puis copiez l’ID de la deuxième colonne. Il doit ressembler à ceci : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  5. Remplacez votre abonnement actif par l’abonnement Concierge. Veillez à remplacer {Votre ID d’abonnement} par celui que vous avez copié.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

Définir votre groupe de ressources par défaut

Vous pouvez définir le groupe de ressources par défaut et omettre le paramètre du reste des commandes Azure PowerShell dans cet exercice. Définissez ce paramètre par défaut sur le groupe de ressources créé pour vous dans l’environnement de bac à sable.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Déployer le modèle sur Azure

Déployez le modèle sur Azure en utilisant la commande Azure PowerShell dans le terminal. Ce processus peut prendre une minute ou deux, puis vous voyez que le déploiement a réussi.

New-AzResourceGroupDeployment -TemplateFile main.bicep

Passer en revue l’historique de déploiement

  1. Accédez au portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable :

    1. Sélectionnez votre avatar dans le coin supérieur droit de la page.
    2. Sélectionnez Changer de répertoire. Dans la liste, choisissez le répertoire Bac à sable Microsoft Learn.
  2. Dans le volet de gauche, sélectionnez Groupes de ressources.

  3. Sélectionnez [nom du groupe de ressources du bac à sable].

  4. Dans le menu de gauche, sélectionnez Déploiements.

    Capture d’écran du portail Azure qui montre le groupe de ressources, avec l’élément de menu Déploiements sélectionné.

    Trois déploiements sont listés.

  5. Sélectionnez le déploiement main et développez Détails du déploiement.

    Notez que les deux modules sont listés et que leurs types sont affichés comme Microsoft.Resources/deployments. Les modules sont listés deux fois parce que leurs sorties sont également référencées dans le modèle.

    Capture d’écran du portail Azure qui montre les détails du déploiement main.

  6. Sélectionnez les déploiements toy-launch-cdn et toy-launch-app, puis passez en revue les ressources déployées dans chacun d’eux. Notez qu’elles correspondent aux ressources définies dans le module respectif.

Tester le site web

  1. Sélectionnez le déploiement toy-launch-app.

  2. Sélectionnez Sorties.

    Capture d’écran du portail Azure qui montre le déploiement, avec l’élément de menu Sorties sélectionné.

  3. Sélectionnez le bouton de copie pour la sortie appServiceAppHostName.

  4. Sous un nouvel onglet de navigateur, essayez d’accéder à l’adresse que vous avez copiée à l’étape précédente. L’adresse doit commencer par https://.

    Capture d’écran de la page d’accueil de l’application web, avec la barre d’adresses montrant le nom d’hôte App Service.

    La page d’accueil App Service s’affiche, indiquant que vous avez correctement déployé l’application.

  5. Accédez au déploiement main et sélectionnez Sorties.

  6. Copiez la valeur de la sortie websiteHostName. Notez que ce nom d’hôte est différent, car il s’agit d’un nom d’hôte Azure Content Delivery Network.

  7. Sous un nouvel onglet de navigateur, essayez d’accéder au nom d’hôte que vous avez copié à l’étape précédente. Ajoutez https:// au début de l’adresse.

    Les points de terminaison CDN sont actifs au bout de quelques minutes. Si vous obtenez une erreur Page introuvable, attendez quelques minutes et réessayez de coller le lien. Par ailleurs, veillez à ajouter https:// au début de l’URL pour utiliser le protocole HTTPS.

    Quand le point de terminaison CDN est actif, vous obtenez la même page d’accueil App Service. Cette fois, elle a été servie par le service Azure Content Delivery Network, qui permet d’améliorer les performances du site web.

    Capture d’écran de la page d’accueil de l’application web, avec la barre d’adresses montrant le point de terminaison CDN.