Exercice – Appliquer les bonnes pratiques à votre modèle en utilisant la boîte à outils de test de modèle ARM

Effectué

Vous faite partie d’une équipe de développement au sein de l’entreprise Tailwind Traders. Dans le cadre de ce travail, vous devez créer des modèles Azure Resource Manager (ARM) pour déployer et gérer des ressources dans le cloud. Vous voulez vérifier que les modèles suivent certaines bonnes pratiques avant de déployer les ressources. Vous choisissez d’utiliser la boîte à outils de test de modèle ARM pour vous aider à analyser vos modèles, afin de pouvoir corriger les éventuels problèmes.

Configurer votre environnement de test

L’outil est un module PowerShell. Pour pouvoir l’exécuter, procédez comme suit :

  • Installer le module PowerShell. Cette tâche est effectuée différemment selon que vous êtes sur Linux, Mac ou Windows.
  • Télécharger le module. Le module est hébergé dans un dépôt GitHub. Vous pouvez le télécharger à partir de cet emplacement ou l’extraire via une commande git clone.
  • Importer le module. Cette étape se résume à une instruction d’une ligne que vous entrez dans une session PowerShell, ce qui rend les commandes ARM-TTK disponibles.

Installer PowerShell

  1. Suivez les instructions indiquées dans Installation de PowerShell sur Linux pour installer PowerShell.

  2. Exécutez pwsh dans le terminal pour vérifier l’installation :

    pwsh
    

    Votre sortie ressemble à ceci :

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    

Télécharger le kit de ressources de test

Le kit de ressources de test se trouve dans un dépôt GitHub. Sélectionnez une des actions suivantes :

Inspecter le kit de ressources de test

Vous venez de télécharger le kit de ressources de test dans un répertoire de votre choix. Examinons votre structure de répertoires. (Assurez-vous d’avoir décompressé le fichier si vous avez choisi de télécharger le fichier .zip au lieu d’exécuter la commande git clone.) Vous devez avoir une structure de répertoires similaire à celle qui suit si vous accédez au répertoire de la boîte à outils de test ARM :

-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md

La boîte à outils de test se trouve dans le sous-répertoire /arm-ttk.

Créer le fichier de modèle

Choisissez un répertoire et créez un fichier appelé azuredeploy.json.

Avertissement

Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.

Ajoutez-y le contenu suivant :

   {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
         "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
               "description": "Location for the resources."
            }
         }
      },
      "resources": [{
         "location": "westus"
      }]
   }

Prenez note de l’emplacement de votre fichier de modèle. Vous pouvez exécuter la commande pwd dans le terminal pour afficher le chemin. Vous utiliserez ce chemin ultérieurement, comme paramètre, lors de l’exécution de la boîte à outils de test.

Détecter et corriger les problèmes de votre modèle en exécutant le kit de ressources de test

Nous vous recommandons de démarrer Visual Studio Code et un terminal intégré.

Vous allez exécuter le kit de ressources de test sur un chemin contenant un modèle de déploiement et corriger les erreurs détectées en modifiant le modèle.

Avertissement

Dans cet exercice, vous allez analyser un fichier de modèle. Le kit de ressources de test analyse tous les fichiers sous le répertoire que vous spécifiez. Il fait cela car un déploiement peut contenir plusieurs fichiers. Vérifiez qu’il n’existe aucun fichier JSON sous le répertoire où se trouve azuredeploy.json.

  1. Dans un terminal, accédez au chemin de votre fichier azuredeploy.json. Exécutez la commande suivante pour démarrer Visual Studio Code :

    code .
    

    Notes

    Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.

  2. Dans Visual Studio Code, ouvrez le terminal intégré en sélectionnant Terminal>Nouveau terminal dans le menu du haut. Exécutez la commande suivante dans le terminal pour démarrer un shell PowerShell :

    pwsh
    

    La sortie doit ressembler à ceci :

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    

Analyser le modèle

  1. Exécutez Import-Module pour pouvoir exécuter les tests depuis n’importe où.

    Notes

    Avant d’importer le module, remplacez path/to/arm-ttk/arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Conseil

    Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : /Users/<utilisateur>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.

  2. Exécutez Test-AzTemplate avec le paramètre -TemplatePath pointant vers l’emplacement du chemin de votre fichier de modèle (en excluant le nom du fichier) :

    Test-AzTemplate -TemplatePath .
    

    Vous voyez une sortie similaire à ceci dans le terminal :

     Validating deploy\azuredeploy.json
       deploymentTemplate
         [+] adminUsername Should Not Be A Literal (4 ms)
         [+] apiVersions Should Be Recent (2 ms)
         [+] artifacts parameter (1 ms)
         [+] DependsOn Best Practices (2 ms)
         [+] Deployment Resources Must Not Be Debug (2 ms)
         [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms)
         [+] DeploymentTemplate Schema Is Correct (1 ms)
         [+] Dynamic Variable References Should Not Use Concat (1 ms)
         [+] IDs Should Be Derived From ResourceIDs (3 ms)
         [+] Location Should Not Be Hardcoded (1 ms)
         [+] ManagedIdentityExtension must not be used (2 ms)
         [+] Min And Max Value Are Numbers (1 ms)
         [+] Outputs Must Not Contain Secrets (4 ms)
         [-] Parameters Must Be Referenced (2 ms)
             Unreferenced parameter: location
    
         [+] Parameters Property Must Exist (1 ms)
         [+] providers apiVersions Is Not Permitted (1 ms)
         [+] ResourceIds should not contain (1 ms)
         [-] Resources Should Have Location (8 ms)
             Resource Location must be an expression or 'global'
    
         [+] Secure String Parameters Cannot Have Default (1 ms)
         [+] Template Should Not Contain Blanks (1 ms)
         [+] Variables Must Be Referenced (1 ms)
         [+] Virtual Machines Should Not Be Preview (3 ms)
         [+] VM Images Should Use Latest Version (1 ms)
         [+] VM Size Should Be A Parameter (3 ms)
    

    Dans la sortie, notez que deux tests échouent : Les ressources doivent avoir un emplacement et Les paramètres doivent être référencés. Le préfixe [-] indique un test qui a échoué.

    Pour comprendre ce qui se passe, ouvrez le fichier azuredeploy.json. Il doit se présenter comme suit :

    {
       "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
       "contentVersion": "1.0.0.0",
       "parameters": {
          "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
                "description": "Location for the resources."
             }
          }
       },
       "resources": [{
          "location": "westus"
       }]
    }
    

    Les tests échouent pour deux raisons :

    • Le paramètre location n’est pas utilisé. Ce message d’erreur peut par exemple indiquer que nous avons utilisé le paramètre par le passé et que nous avons oublié de le nettoyer. Ou peut-être qu’il doit être utilisé, mais que nous avons oublié de mettre à jour notre code.
    • La propriété location est définie sur la chaîne « westus » codée en dur. L’utilisation de cette option n’est pas considérée comme une bonne pratique, car vous voulez pouvoir contrôler l’emplacement d’une ressource avec des paramètres d’entrée lors du déploiement.

Appliquer un correctif au modèle

Comment corriger les tests qui ont échoué ?

Comme le test indique, nous pourrions essayer de remplacer westus par le texte global. Cependant, cela ne résoudrait qu’un des problèmes. Très probablement, nous voulons utiliser le paramètre location et définir l’emplacement des ressources sur cette valeur.

La raison est double. Non seulement le paramètre location peut être défini comme paramètre de déploiement, mais il présente également l’avantage d’être défini sur resourceGroup().location en tant que defaultValue si vous omettiez de définir le paramètre location lors de l’exécution du déploiement.

  1. Localisez le premier élément de ressource dans le tableau resources et remplacez le contenu suivant :

    "resources": [{
      "location": "westus"
    }]
    

    par ce contenu :

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Réexécutez l’outil de test dans le terminal intégré pour vérifier le correctif :

    Test-AzTemplate -TemplatePath .
    

    Vous obtenez maintenant une sortie où tous les tests réussissent :

    Validating deploy\azuredeploy.json
      deploymentTemplate
        [+] adminUsername Should Not Be A Literal (6 ms)
        [+] apiVersions Should Be Recent (2 ms)
        [+] artifacts parameter (1 ms)
        [+] DependsOn Best Practices (1 ms)
        [+] Deployment Resources Must Not Be Debug (1 ms)
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms)
        [+] DeploymentTemplate Schema Is Correct (1 ms)
        [+] Dynamic Variable References Should Not Use Concat (1 ms)
        [+] IDs Should Be Derived From ResourceIDs (4 ms)
        [+] Location Should Not Be Hardcoded (1 ms)
        [+] ManagedIdentityExtension must not be used (1 ms)
        [+] Min And Max Value Are Numbers (1 ms)
        [+] Outputs Must Not Contain Secrets (1 ms)
        [+] Parameters Must Be Referenced (1 ms)
        [+] Parameters Property Must Exist (1 ms)
        [+] providers apiVersions Is Not Permitted (1 ms)
        [+] ResourceIds should not contain (1 ms)
        [+] Resources Should Have Location (1 ms)
        [+] Secure String Parameters Cannot Have Default (1 ms)
        [+] Template Should Not Contain Blanks (1 ms)
        [+] Variables Must Be Referenced (1 ms)
        [+] Virtual Machines Should Not Be Preview (4 ms)
        [+] VM Images Should Use Latest Version (1 ms)
        [+] VM Size Should Be A Parameter (4 ms)
    

Opération réussie. Vous avez exécuté l’outil de test, trouvé des erreurs et les avez corrigées.

  1. Suivez les instructions indiquées dans Installation de PowerShell sur macOS.

  2. Exécutez pwsh dans le terminal pour vérifier l’installation :

    pwsh
    

    Votre sortie ressemble à ceci :

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    

Télécharger le kit de ressources de test

Le kit de ressources de test se trouve dans un dépôt GitHub. Sélectionnez une des actions suivantes :

Inspecter le kit de ressources de test

Vous venez de télécharger le kit de ressources de test dans un répertoire de votre choix. Examinons votre structure de répertoires. (Assurez-vous d’avoir décompressé le fichier si vous avez choisi de télécharger le fichier .zip au lieu d’exécuter la commande git clone.) Vous devez avoir une structure de répertoires similaire à celle qui suit si vous accédez au répertoire de la boîte à outils de test ARM :

-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md

La boîte à outils de test se trouve dans le sous-répertoire /arm-ttk.

Créer le fichier de modèle

Choisissez un répertoire et créez un fichier appelé azuredeploy.json.

Avertissement

Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.

Ajoutez-y le contenu suivant :

{
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "location": {
         "type": "string",
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
            "description": "Location for the resources."
         }
      }
   },
   "resources": [{
      "location": "westus"
   }]
}

Prenez note de l’emplacement de votre fichier de modèle. Vous pouvez exécuter la commande pwd dans le terminal pour afficher le chemin. Vous utiliserez ce chemin ultérieurement, comme paramètre, lors de l’exécution de la boîte à outils de test.

Détecter et corriger les problèmes de votre modèle en exécutant le kit de ressources de test

Nous vous recommandons de démarrer Visual Studio Code et un terminal intégré.

Vous allez exécuter le kit de ressources de test sur un chemin contenant un modèle de déploiement et corriger les erreurs détectées en modifiant le modèle.

Avertissement

Dans cet exercice, vous allez analyser un fichier de modèle. Le kit de ressources de test analyse tous les fichiers sous le répertoire que vous spécifiez. Il fait cela car un déploiement peut contenir plusieurs fichiers. Vérifiez qu’il n’existe aucun fichier JSON sous le répertoire où se trouve azuredeploy.json.

  1. Dans un terminal, accédez au chemin de votre fichier azuredeploy.json. Exécutez la commande suivante pour démarrer Visual Studio Code :

    code .
    

    Notes

    Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.

  2. Dans Visual Studio Code, ouvrez le terminal intégré en sélectionnant Terminal>Nouveau terminal dans le menu du haut. Exécutez la commande suivante dans le terminal pour démarrer un shell PowerShell :

    pwsh
    

    La sortie doit ressembler à ceci :

    PowerShell 7.0.3
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    https://aka.ms/powershell
    Type 'help' to get help.
    

Analyser le modèle

  1. Exécutez Import-Module pour pouvoir exécuter les tests depuis n’importe où.

    Notes

    Avant d’importer le module, remplacez path/to/arm-ttk/arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.

    Import-Module path/to/arm-ttk/arm-ttk.psd1
    

    Conseil

    Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : /Users/<utilisateur>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.

  2. Exécutez Test-AzTemplate avec le paramètre -TemplatePath pointant vers l’emplacement du chemin de votre fichier de modèle (en excluant le nom du fichier) :

    Test-AzTemplate -TemplatePath .
    

    Vous voyez une sortie similaire à ceci dans le terminal :

    Validating deploy\azuredeploy.json
      deploymentTemplate
        [+] adminUsername Should Not Be A Literal (4 ms)
        [+] apiVersions Should Be Recent (2 ms)
        [+] artifacts parameter (1 ms)
        [+] DependsOn Best Practices (2 ms)
        [+] Deployment Resources Must Not Be Debug (2 ms)
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms)
        [+] DeploymentTemplate Schema Is Correct (1 ms)
        [+] Dynamic Variable References Should Not Use Concat (1 ms)
        [+] IDs Should Be Derived From ResourceIDs (3 ms)
        [+] Location Should Not Be Hardcoded (1 ms)
        [+] ManagedIdentityExtension must not be used (2 ms)
        [+] Min And Max Value Are Numbers (1 ms)
        [+] Outputs Must Not Contain Secrets (4 ms)
        [-] Parameters Must Be Referenced (2 ms)
            Unreferenced parameter: location
    
        [+] Parameters Property Must Exist (1 ms)
        [+] providers apiVersions Is Not Permitted (1 ms)
        [+] ResourceIds should not contain (1 ms)
        [-] Resources Should Have Location (8 ms)
            Resource Location must be an expression or 'global'
    
        [+] Secure String Parameters Cannot Have Default (1 ms)
        [+] Template Should Not Contain Blanks (1 ms)
        [+] Variables Must Be Referenced (1 ms)
        [+] Virtual Machines Should Not Be Preview (3 ms)
        [+] VM Images Should Use Latest Version (1 ms)
        [+] VM Size Should Be A Parameter (3 ms)
    

    La sortie précédente montre comment deux tests échouent : Les ressources doivent avoir un emplacement et Les paramètres doivent être référencés. Le préfixe [-] indique un test qui a échoué.

    Pour comprendre ce qui se passe, ouvrez le fichier azuredeploy.json. Il doit se présenter comme suit :

    {
       "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
       "contentVersion": "1.0.0.0",
       "parameters": {
          "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
                "description": "Location for the resources."
             }
          }
       },
       "resources": [{
          "location": "westus"
       }]
    }
    

    Les tests échouent pour deux raisons :

    • Le paramètre location n’est pas utilisé. Ce message d’erreur peut par exemple indiquer que nous avons utilisé le paramètre par le passé et que nous avons oublié de le nettoyer. Ou peut-être qu’il doit être utilisé, mais que nous avons oublié de mettre à jour notre code.
    • La propriété location est définie sur la chaîne « westus » codée en dur. L’utilisation de cette option n’est pas considérée comme une bonne pratique, car vous voulez pouvoir contrôler l’emplacement d’une ressource avec des paramètres d’entrée lors du déploiement.

Appliquer un correctif au modèle

Comment corriger les tests qui ont échoué ?

Comme le test indique, nous pourrions essayer de remplacer westus par le texte global. Cependant, cela ne résoudrait qu’un des problèmes. Très probablement, nous voulons utiliser le paramètre location et définir l’emplacement des ressources sur cette valeur.

La raison est double. Non seulement le paramètre location peut être défini comme paramètre de déploiement, mais il présente également l’avantage d’être défini sur resourceGroup().location en tant que defaultValue si vous omettiez de définir le paramètre location lors de l’exécution du déploiement.

  1. Localisez le premier élément de ressource dans le tableau resources et remplacez le contenu suivant :

    "resources": [{
      "location": "westus"
    }]
    

    par ce contenu :

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Réexécutez l’outil de test dans le terminal intégré pour vérifier le correctif :

    Test-AzTemplate -TemplatePath .
    

    Vous obtenez maintenant une sortie où tous les tests réussissent :

    Validating deploy\azuredeploy.json
      deploymentTemplate
        [+] adminUsername Should Not Be A Literal (6 ms)
        [+] apiVersions Should Be Recent (2 ms)
        [+] artifacts parameter (1 ms)
        [+] DependsOn Best Practices (1 ms)
        [+] Deployment Resources Must Not Be Debug (1 ms)
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms)
        [+] DeploymentTemplate Schema Is Correct (1 ms)
        [+] Dynamic Variable References Should Not Use Concat (1 ms)
        [+] IDs Should Be Derived From ResourceIDs (4 ms)
        [+] Location Should Not Be Hardcoded (1 ms)
        [+] ManagedIdentityExtension must not be used (1 ms)
        [+] Min And Max Value Are Numbers (1 ms)
        [+] Outputs Must Not Contain Secrets (1 ms)
        [+] Parameters Must Be Referenced (1 ms)
        [+] Parameters Property Must Exist (1 ms)
        [+] providers apiVersions Is Not Permitted (1 ms)
        [+] ResourceIds should not contain (1 ms)
        [+] Resources Should Have Location (1 ms)
        [+] Secure String Parameters Cannot Have Default (1 ms)
        [+] Template Should Not Contain Blanks (1 ms)
        [+] Variables Must Be Referenced (1 ms)
        [+] Virtual Machines Should Not Be Preview (4 ms)
        [+] VM Images Should Use Latest Version (1 ms)
        [+] VM Size Should Be A Parameter (4 ms)
    

Opération réussie. Vous avez exécuté l’outil de test, trouvé des erreurs et les avez corrigées.

  1. Suivez les instructions indiquées dans Installation de PowerShell sur Windows.
  2. À partir de Visual Studio Code, installez l’extension PowerShell.

Télécharger le kit de ressources de test

Le kit de ressources de test se trouve dans un dépôt GitHub. Sélectionnez une des actions suivantes :

Inspecter le kit de ressources de test

Vous venez de télécharger le kit de ressources de test dans un répertoire de votre choix. Examinons votre structure de répertoires. (Assurez-vous d’avoir décompressé le fichier si vous avez choisi de télécharger le fichier .zip au lieu d’exécuter la commande git clone.) Vous devez avoir une structure de répertoires similaire à celle qui suit si vous accédez au répertoire de la boîte à outils de test ARM :

-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md

La boîte à outils de test se trouve dans le sous-répertoire \arm-ttk.

Créer le fichier de modèle

Créez un fichier appelé azuredeploy.json dans le répertoire de votre choix, par exemple C:\Temp.

Avertissement

Vérifiez que le répertoire sélectionné est vide et qu’il ne comporte aucun sous-répertoire.

Ajoutez-y le contenu suivant :

{
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "location": {
         "type": "string",
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
            "description": "Location for the resources."
         }
      }
   },
   "resources": [{
      "location": "westus"
   }]
}

Prenez note de l’emplacement de votre fichier de modèle. Vous utiliserez ce chemin de répertoire (par exemple C:\Temp) ultérieurement, en tant que paramètre, lors de l’exécution de la boîte à outils de test.

Détecter et corriger les problèmes de votre modèle en exécutant le kit de ressources de test

Nous vous recommandons de démarrer Visual Studio Code et un terminal intégré.

Vous allez exécuter le kit de ressources de test sur un chemin contenant un modèle de déploiement et corriger les erreurs détectées en modifiant le modèle.

Avertissement

Dans cet exercice, vous allez analyser un fichier de modèle. Le kit de ressources de test analyse tous les fichiers sous le répertoire que vous spécifiez. Il fait cela car un déploiement peut contenir plusieurs fichiers. Vérifiez qu’il n’existe aucun fichier JSON sous le répertoire où se trouve azuredeploy.json.

  1. Dans un terminal, accédez au chemin de votre fichier azuredeploy.json. Exécutez la commande suivante pour démarrer Visual Studio Code :

    code .
    

    Notes

    Ouvrez Visual Studio Code manuellement et ouvrez le répertoire du modèle si Visual Studio Code ne se trouve pas sur le chemin.

  2. Dans Visual Studio Code, affichez la palette de commandes et sélectionnez la commande PowerShell : Show Integrated Console (Afficher la console intégrée).

Analyser le modèle

  1. Exécutez Import-Module dans le terminal PowerShell :

    Notes

    Avant d’importer le module, remplacez path\to\arm-ttk\arm-ttk.psd1 par le chemin du kit de ressources de test téléchargé.

    Import-Module path\to\arm-ttk\arm-ttk.psd1
    

    La commande précédente indique la position du module Kit de ressources de test.

    Conseil

    Si vous avez téléchargé ou cloné l’outil dans votre répertoire Téléchargements, le chemin se présente comme ceci : C:\Users\<utilisateur>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Vous êtes maintenant prêt à utiliser l’outil. Tant que vous êtes dans la même session PowerShell, il n’est pas nécessaire de réexécuter la commande d’importation.

    Notes

    Si vous démarrez une nouvelle session PowerShell, vous devez réexécuter la commande Import-Module.

  2. Exécutez Test-AzTemplate dans le terminal PowerShell pour démarrer une série de tests :

    Test-AzTemplate -TemplatePath .
    

    Vous voyez une sortie similaire à ceci dans le terminal :

    Validating deploy\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (16 ms)
    Fail  : 0
    Total : 1
    Pass  : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (6 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (10 ms)
      apiVersions Should Be Recent
        [+] apiVersions Should Be Recent (7 ms)
      artifacts parameter
        [+] artifacts parameter (5 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (7 ms)
      DependsOn Best Practices
        [+] DependsOn Best Practices (6 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (5 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (5 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (4 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (4 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (6 ms)
      deploymentTemplate
        [-] Location Should Not Be Hardcoded (13 ms)
            Location value of 'westus' on resource '' must be an expression or 'global'. Line: 14, Column: 9    
    
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (5 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (5 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (5 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (9 ms)
      deploymentTemplate
        [-] Parameters Must Be Referenced (6 ms)
            Unreferenced parameter: location Line: 5, Column: 9
    
      Password params must be secure
        [+] Password params must be secure (11 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (5 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (5 ms)
      deploymentTemplate
        [-] Resources Should Have Location (5 ms)
            Resource  Location must be an expression or 'global'
    
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (7 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (10 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (7 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (5 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (8 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (5 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (8 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (5 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (5 ms)
    Fail  : 3
    Total : 31
    Pass  : 28
    

    La sortie précédente montre comment trois tests échouent : L’emplacement ne doit pas être codé en dur, Les paramètres doivent être référencés et Les ressources doivent avoir un emplacement. Le préfixe [-] indique un test qui a échoué.

    Pour comprendre ce qui se passe, ouvrez le fichier azuredeploy.json. Il doit se présenter comme suit :

    {
       "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
       "contentVersion": "1.0.0.0",
       "parameters": {
          "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
                "description": "Location for the resources."
             }
          }
       },
       "resources": [{
          "location": "westus"
       }]
    }
    

    Les tests échouent pour deux raisons :

    • Le paramètre location n’est pas utilisé. Ce message d’erreur peut par exemple indiquer que nous avons utilisé le paramètre par le passé et que nous avons oublié de le nettoyer. Ou peut-être qu’il doit être utilisé, mais que nous avons oublié de mettre à jour notre code.
    • La propriété location est définie sur la chaîne « westus » codée en dur. L’utilisation de cette option n’est pas considérée comme une bonne pratique, car vous voulez pouvoir contrôler l’emplacement d’une ressource avec des paramètres d’entrée lors du déploiement.

Appliquer un correctif au modèle

Comment corriger les tests qui ont échoué ?

Comme le test indique, nous pourrions essayer de remplacer westus par le texte global. Cependant, cela ne résoudrait qu’un des problèmes. Très probablement, nous voulons utiliser le paramètre location et définir l’emplacement des ressources sur cette valeur.

La raison est double. Non seulement le paramètre location peut être défini comme paramètre de déploiement, mais il présente également l’avantage d’être défini sur resourceGroup().location en tant que defaultValue si vous omettiez de définir le paramètre location lors de l’exécution du déploiement.

  1. Localisez le premier élément de ressource dans le tableau resources et remplacez le contenu suivant :

    "resources": [{
       "location": "westus"
    }]
    

    par ce contenu :

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Exécutez Test-AzTemplate pour réexécuter l’outil de test :

    Test-AzTemplate -TemplatePath .
    

    Vous obtenez maintenant une sortie où tous les tests réussissent :

    Validating deploy\azuredeploy.json
      JSONFiles Should Be Valid
        [+] JSONFiles Should Be Valid (83 ms)
    Fail  : 0
    Total : 1
    Pass  : 1
    
    
    
      adminUsername Should Not Be A Literal
        [+] adminUsername Should Not Be A Literal (36 ms)
      apiVersions Should Be Recent In Reference Functions
        [+] apiVersions Should Be Recent In Reference Functions (57 ms)
      piVersions Should Be Recent
        [+] apiVersions Should Be Recent (67 ms)
      artifacts parameter
        [+] artifacts parameter (19 ms)
      CommandToExecute Must Use ProtectedSettings For Secrets
        [+] CommandToExecute Must Use ProtectedSettings For Secrets (93 ms)
      DependsOn Best Practices
        [+] DependsOn Best Practices (52 ms)
      Deployment Resources Must Not Be Debug
        [+] Deployment Resources Must Not Be Debug (77 ms)
      DeploymentTemplate Must Not Contain Hardcoded Uri
        [+] DeploymentTemplate Must Not Contain Hardcoded Uri (18 ms)
      DeploymentTemplate Schema Is Correct
        [+] DeploymentTemplate Schema Is Correct (73 ms)
      Dynamic Variable References Should Not Use Concat
        [+] Dynamic Variable References Should Not Use Concat (72 ms)
      IDs Should Be Derived From ResourceIDs
        [+] IDs Should Be Derived From ResourceIDs (15 ms)
      Location Should Not Be Hardcoded
        [+] Location Should Not Be Hardcoded (24 ms)
      ManagedIdentityExtension must not be used
        [+] ManagedIdentityExtension must not be used (143 ms)
      Min And Max Value Are Numbers
        [+] Min And Max Value Are Numbers (23 ms)
      Outputs Must Not Contain Secrets
        [+] Outputs Must Not Contain Secrets (160 ms)
      Parameter Types Should Be Consistent
        [+] Parameter Types Should Be Consistent (13 ms)
      Parameters Must Be Referenced
        [+] Parameters Must Be Referenced (13 ms)
      Password params must be secure
        [+] Password params must be secure (12 ms)
      providers apiVersions Is Not Permitted
        [+] providers apiVersions Is Not Permitted (79 ms)
      ResourceIds should not contain
        [+] ResourceIds should not contain (12 ms)
      Resources Should Have Location
        [+] Resources Should Have Location (17 ms)
      Resources Should Not Be Ambiguous
        [+] Resources Should Not Be Ambiguous (17 ms)
      Secure Params In Nested Deployments
        [+] Secure Params In Nested Deployments (17 ms)
      Secure String Parameters Cannot Have Default
        [+] Secure String Parameters Cannot Have Default (16 ms)
      Template Should Not Contain Blanks
        [+] Template Should Not Contain Blanks (83 ms)
      URIs Should Be Properly Constructed
        [+] URIs Should Be Properly Constructed (108 ms)
      Variables Must Be Referenced
        [+] Variables Must Be Referenced (111 ms)
      Virtual Machines Should Not Be Preview
        [+] Virtual Machines Should Not Be Preview (16 ms)
      VM Images Should Use Latest Version
        [+] VM Images Should Use Latest Version (22 ms)
      VM Size Should Be A Parameter
        [+] VM Size Should Be A Parameter (133 ms)
    Fail  : 0
    Total : 31
    Pass  : 31   
    

Opération réussie. Vous avez exécuté l’outil de test, trouvé des erreurs et les avez corrigées.

Vous êtes maintenant prêt à exécuter les tests sur votre modèle.