Cvičení – použití osvědčených postupů v šabloně pomocí testovací sady nástrojů pro šablony ARM

Dokončeno

Jste součástí vývojového týmu společnosti Tailwind Traders. V rámci této práce potřebujete vytvářet šablony Resource Manageru (ARM) k nasazování a správě prostředků v cloudu. Před nasazením prostředků chcete zajistit, aby šablony dodržovaly některé osvědčené postupy. Rozhodnete se použít sadu nástrojů pro testování šablon ARM, která vám pomůže analyzovat šablony, abyste mohli opravit případné problémy.

Nastavení vašeho testovacího prostředí

Tento nástroj je modul PowerShellu. Spustíte ho takto:

  • Nainstalujte modul PowerShellu. Tato úloha se provádí odlišně v Linuxu, Windows a na Macu.
  • Stáhněte si modul. Modul je hostovaný v úložišti GitHub. odkud si ho můžete stáhnout nebo načíst prostřednictvím příkazu git clone.
  • Importujte modul. Tento krok představuje jenom jednořádkovou instrukci, kterou zadáte do relace PowerShellu, která zpřístupní příkazy ARM-TTK.

Instalace PowerShellu

  1. Pokud chcete nainstalovat PowerShell, postupujte podle pokynů v instalaci PowerShellu v Linuxu.

  2. Spuštěním příkazu pwsh v terminálu ověřte instalaci:

    pwsh
    

    Výstup bude vypadat nějak takto:

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

Stažení testovací sady nástrojů

Testovací sada nástrojů se nachází v úložišti GitHubu. Zvolte jednu z následujících akcí:

Prohlédnutí testovací sady nástrojů

Právě jste stáhli testovací sadu nástrojů do adresáře podle vlastního výběru. Pojďme se podívat na strukturu vašeho adresáře. (Pokud jste se rozhodli stáhnout soubor .zip místo spuštění git clone příkazu, ujistěte se, že jste soubor rozbalili.) Pokud přejdete do adresáře testovací sady nástrojů ARM, měli byste mít adresářovou strukturu, která vypadá takto:

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

Testovací sada nástrojů se nachází v podadresáři \arm-ttk.

Vytvoření souboru šablony

Vyberte adresář a vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

   {
      "$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"
      }]
   }

Poznamenejte si umístění souboru šablony. Cestu můžete zjistit spuštěním příkazu pwd v terminálu. Tuto cestu použijete později jako parametr při spuštění testovací sady nástrojů.

Zjištění a opravení problémů v šabloně spuštěním testovací sady nástrojů

Doporučujeme, abyste spustili Visual Studio Code a integrovaný terminál.

V cestě obsahující šablonu nasazení spustíte testovací sadu nástrojů a změnou šablony opravíte všechny chyby, které detekuje.

Upozorňující

V tomto cvičení zkontrolujete jeden soubor šablony. Testovací sada nástrojů zkontroluje všechny soubory pod zadaným adresářem. Je to proto, že nasazení může obsahovat několik souborů. Ujistěte se, že pod adresářem, kde se nachází azuredeploy.json, nejsou žádné soubory JSON.

  1. V terminálu přejděte na cestu, v níž se nachází soubor azuredeploy.json. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  2. Z editoru Visual Studio Code otevřete integrovaný terminál tak, že v horní nabídce vyberete Terminal>New Terminal (Terminál > Nový terminál). Spuštěním tohoto příkazu v terminálu spusťte prostředí PowerShellu:

    pwsh
    

    Zobrazený výstup by měl vypadat nějak takto:

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

Analýza šablony

  1. Spusťte Import-Module, abyste mohli testy spustit odkudkoli.

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

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

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

  2. Spusťte Test-AzTemplate příkaz s parametrem -TemplatePath odkazujícím na umístění cesty k souboru šablony (s výjimkou názvu souboru):

    Test-AzTemplate -TemplatePath .
    

    V terminálu se zobrazí výstup podobný tomuto:

     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)
    

    Ve výstupu si všimněte, jak dva testy selhávají: Prostředky by měly mít umístění a parametry musí být odkazovány. Předpona [-] označuje neúspěšný test.

    Pokud chcete zjistit, co je špatně, otevřete soubor azuredeploy.json. Měl by vypadat takto:

    {
       "$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"
       }]
    }
    

    Testy jsou neúspěšné ze dvou důvodů:

    • Nepoužívá se parametr location (umístění). Tato chybová zpráva může například značit, že jsme ho použili v minulosti a zapomněli ho vyčistit. Případně že by se měl použít, ale zapomněli jsme aktualizovat kód.
    • Vlastnost location (umístění) je nastavená na pevně kódovaný řetězec westus. Použití této možnosti se nepovažuje za dobrý postup, protože při nasazování potřebujete mít možnost řídit umístění prostředku pomocí vstupních parametrů.

Oprava šablony

Jak opravit neúspěšné testy?

Jak test ukazuje, můžeme se pokusit nahradit westus textem global. To by ale vyřešilo jen jeden z problémů. Nejspíš chceme použít parametr location (umístění) a nastavit umístění prostředků na tuto hodnotu.

Důvod je dvojí. Parametr location lze nastavit nejen jako parametr pro nasazení, ale má také rozumnou možnost nastavení na resourceGroup().location jako defaultValue , pokud při spuštění nasazení vynecháte nastavení parametru umístění .

  1. Vyhledejte první položku prostředku v poli resources (prostředky) a nahraďte tento obsah:

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

    tímto obsahem:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Znovu spusťte testovací nástroj v integrovaném terminálu, abyste opravu ověřili:

    Test-AzTemplate -TemplatePath .
    

    Teď získáte výstup, ve kterém všechny testy proběhnou úspěšně:

    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)
    

Výborně! Spustili jste testovací nástroj, našli chyby a opravili je.

  1. Postupujte podle pokynů v tématu Instalace PowerShellu v macOS.

  2. Spuštěním příkazu pwsh v terminálu ověřte instalaci:

    pwsh
    

    Výstup bude vypadat nějak takto:

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

Stažení testovací sady nástrojů

Testovací sada nástrojů se nachází v úložišti GitHubu. Zvolte jednu z následujících akcí:

Prohlédnutí testovací sady nástrojů

Právě jste stáhli testovací sadu nástrojů do adresáře podle vlastního výběru. Pojďme se podívat na strukturu vašeho adresáře. (Pokud jste se rozhodli stáhnout soubor .zip místo spuštění git clone příkazu, ujistěte se, že jste soubor rozbalili.) Pokud přejdete do adresáře testovací sady nástrojů ARM, měli byste mít adresářovou strukturu, která vypadá takto:

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

Testovací sada nástrojů se nachází v podadresáři \arm-ttk.

Vytvoření souboru šablony

Vyberte adresář a vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

{
   "$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"
   }]
}

Poznamenejte si umístění souboru šablony. Cestu můžete zjistit spuštěním příkazu pwd v terminálu. Tuto cestu použijete později jako parametr při spuštění testovací sady nástrojů.

Zjištění a opravení problémů v šabloně spuštěním testovací sady nástrojů

Doporučujeme, abyste spustili Visual Studio Code a integrovaný terminál.

V cestě obsahující šablonu nasazení spustíte testovací sadu nástrojů a změnou šablony opravíte všechny chyby, které detekuje.

Upozorňující

V tomto cvičení zkontrolujete jeden soubor šablony. Testovací sada nástrojů zkontroluje všechny soubory pod zadaným adresářem. Je to proto, že nasazení může obsahovat několik souborů. Ujistěte se, že pod adresářem, kde se nachází azuredeploy.json, nejsou žádné soubory JSON.

  1. V terminálu přejděte na cestu, v níž se nachází soubor azuredeploy.json. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  2. Z editoru Visual Studio Code otevřete integrovaný terminál tak, že v horní nabídce vyberete Terminal>New Terminal (Terminál > Nový terminál). Spuštěním tohoto příkazu v terminálu spusťte prostředí PowerShellu:

    pwsh
    

    Zobrazený výstup by měl vypadat nějak takto:

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

Analýza šablony

  1. Spusťte Import-Module, abyste mohli testy spustit odkudkoli.

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

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

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

  2. Spusťte Test-AzTemplate příkaz s parametrem -TemplatePath odkazujícím na umístění cesty k souboru šablony (s výjimkou názvu souboru):

    Test-AzTemplate -TemplatePath .
    

    V terminálu se zobrazí výstup podobný tomuto:

    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)
    

    Předchozí výstup ukazuje, jak dva testy selhávají: Prostředky by měly mít umístění a parametry musí být odkazovány. Předpona [-] označuje neúspěšný test.

    Pokud chcete zjistit, co je špatně, otevřete soubor azuredeploy.json. Měl by vypadat takto:

    {
       "$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"
       }]
    }
    

    Testy jsou neúspěšné ze dvou důvodů:

    • Nepoužívá se parametr location (umístění). Tato chybová zpráva může například značit, že jsme ho použili v minulosti a zapomněli ho vyčistit. Případně že by se měl použít, ale zapomněli jsme aktualizovat kód.
    • Vlastnost location (umístění) je nastavená na pevně kódovaný řetězec westus. Použití této možnosti se nepovažuje za dobrý postup, protože při nasazování potřebujete mít možnost řídit umístění prostředku pomocí vstupních parametrů.

Oprava šablony

Jak opravit neúspěšné testy?

Jak test ukazuje, můžeme se pokusit nahradit westus textem global. To by ale vyřešilo jen jeden z problémů. Nejspíš chceme použít parametr location (umístění) a nastavit umístění prostředků na tuto hodnotu.

Důvod je dvojí. Parametr location lze nastavit nejen jako parametr pro nasazení, ale má také rozumnou možnost nastavení na resourceGroup().location jako defaultValue , pokud při spuštění nasazení vynecháte nastavení parametru umístění .

  1. Vyhledejte první položku prostředku v poli resources (prostředky) a nahraďte tento obsah:

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

    tímto obsahem:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Znovu spusťte testovací nástroj v integrovaném terminálu, abyste opravu ověřili:

    Test-AzTemplate -TemplatePath .
    

    Teď získáte výstup, ve kterém všechny testy proběhnou úspěšně:

    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)
    

Výborně! Spustili jste testovací nástroj, našli chyby a opravili je.

  1. Postupujte podle pokynů v tématu Instalace PowerShellu ve Windows.
  2. Z editoru Visual Studio Code si nainstalujte rozšíření PowerShell.

Stažení testovací sady nástrojů

Testovací sada nástrojů se nachází v úložišti GitHubu. Zvolte jednu z následujících akcí:

Prohlédnutí testovací sady nástrojů

Právě jste stáhli testovací sadu nástrojů do adresáře podle vlastního výběru. Pojďme se podívat na strukturu vašeho adresáře. (Pokud jste se rozhodli stáhnout soubor .zip místo spuštění git clone příkazu, ujistěte se, že jste soubor rozbalili.) Pokud přejdete do adresáře testovací sady nástrojů ARM, měli byste mít adresářovou strukturu, která vypadá takto:

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

Testovací sada nástrojů se nachází v podadresáři \arm-ttk.

Vytvoření souboru šablony

V adresáři, který vám vyhovuje (například C:\Temp), vytvořte soubor s názvem azuredeploy.json.

Upozorňující

Ujistěte se, že je zvolený adresář prázdný a nemá žádné podadresáře.

Přidejte do něj tento obsah:

{
   "$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"
   }]
}

Poznamenejte si umístění souboru šablony. Tuto cestu k adresáři (například C:\Temp) použijete později jako parametr při spuštění testovací sady nástrojů.

Zjištění a opravení problémů v šabloně spuštěním testovací sady nástrojů

Doporučujeme, abyste spustili Visual Studio Code a integrovaný terminál.

V cestě obsahující šablonu nasazení spustíte testovací sadu nástrojů a změnou šablony opravíte všechny chyby, které detekuje.

Upozorňující

V tomto cvičení zkontrolujete jeden soubor šablony. Testovací sada nástrojů zkontroluje všechny soubory pod zadaným adresářem. Je to proto, že nasazení může obsahovat několik souborů. Ujistěte se, že pod adresářem, kde se nachází azuredeploy.json, nejsou žádné soubory JSON.

  1. V terminálu přejděte na cestu, v níž se nachází soubor azuredeploy.json. Pomocí tohoto příkazu spusťte Visual Studio Code:

    code .
    

    Poznámka:

    Ručně otevřete Visual Studio Code a pak adresář šablony, pokud Visual Studio Code není v cestě.

  2. V editoru Visual Studio Code otevřete paletu příkazů a vyberte příkaz PowerShell: Zobrazit integrovanou konzolu.

Analýza šablony

  1. Spusťte Import-Module v terminálu PowerShellu:

    Poznámka:

    Před importováním modulu nahraďte path\to\arm-ttk\arm-ttk.psd1 cestou ke stažené testovací sadě nástrojů.

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

    Příkaz výše ukáže pozici modulu testovací sady nástrojů.

    Tip

    Pokud jste nástroj stáhli nebo naklonovali do adresáře Stažené soubory , cesta by vypadala nějak takto: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk\arm-ttk.psd1.

    Teď jste připraveni nástroj použít. Pokud jste ve stejné relaci PowerShellu, není nutné znovu spustit příkaz importu.

    Poznámka:

    Pokud spustíte novou relaci PowerShellu, budete muset příkaz spustit Import-Module znovu.

  2. Testování zahájíte spuštěním Test-AzTemplate v terminálu PowerShellu:

    Test-AzTemplate -TemplatePath .
    

    V terminálu se zobrazí výstup podobný tomuto:

    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
    

    Předchozí výstup ukazuje, jak selhávají tři testy: Umístění by nemělo být pevně zakódované, parametry musí být odkazovány a prostředky by měly mít umístění. Předpona [-] označuje neúspěšný test.

    Pokud chcete zjistit, co je špatně, otevřete soubor azuredeploy.json. Měl by vypadat takto:

    {
       "$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"
       }]
    }
    

    Testy jsou neúspěšné ze dvou důvodů:

    • Nepoužívá se parametr location (umístění). Tato chybová zpráva může například značit, že jsme ho použili v minulosti a zapomněli ho vyčistit. Případně že by se měl použít, ale zapomněli jsme aktualizovat kód.
    • Vlastnost location (umístění) je nastavená na pevně kódovaný řetězec westus. Použití této možnosti se nepovažuje za dobrý postup, protože při nasazování potřebujete mít možnost řídit umístění prostředku pomocí vstupních parametrů.

Oprava šablony

Jak opravit neúspěšné testy?

Jak test ukazuje, můžeme se pokusit nahradit westus textem global. To by ale vyřešilo jen jeden z problémů. Nejspíš chceme použít parametr location (umístění) a nastavit umístění prostředků na tuto hodnotu.

Důvod je dvojí. Parametr location lze nastavit nejen jako parametr pro nasazení, ale má také rozumnou možnost nastavení na resourceGroup().location jako defaultValue , pokud při spuštění nasazení vynecháte nastavení parametru umístění .

  1. Vyhledejte první položku prostředku v poli resources (prostředky) a nahraďte tento obsah:

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

    tímto obsahem:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Spuštěním příkazu Test-AzTemplate znovu spusťte testovací nástroj:

    Test-AzTemplate -TemplatePath .
    

    Teď získáte výstup, ve kterém všechny testy proběhnou úspěšně:

    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   
    

Výborně! Spustili jste testovací nástroj, našli chyby a opravili je.

Teď jste připraveni spustit testy šablony.