Gyakorlat – Ajánlott eljárások alkalmazása a sablonra az ARM-sablontesztelési eszközkészlet használatával

Befejeződött

Ön a Tailwind Traders vállalat egy fejlesztői csapatának tagja. A munkája részeként Azure Resource Manager- (ARM-) sablonokat kell készítenie az erőforrások felhőbeli üzembe helyezéséhez és kezeléséhez. Győződjön meg arról, hogy a sablonok követnek néhány helyes eljárást az erőforrások üzembe helyezése előtt. Az ARM-sablontesztelési eszközkészlettel elemezheti a sablonokat, hogy kijavíthassa a problémákat.

A tesztkörnyezet beállítása

Az eszköz egy PowerShell-modul. Azt, hogy futtatni tudja, az alábbi lépéseket kell végrehajtania:

  • Telepítse a PowerShell-modult. Ezt Linux, Mac és Windows rendszeren más-más módon hajthatja végre.
  • Töltse le a modult. A modul egy GitHub-adattárban található. Letöltheti onnan, vagy beszerezheti egy git clone paranccsal.
  • Importálja a modult. Ez a lépés csak egy egysoros utasítás, amelyet egy PowerShell-munkamenetbe kell beírnia, amely elérhetővé teszi az ARM-TTK-parancsokat.

A PowerShell telepítése

  1. A PowerShell telepítéséhez kövesse a PowerShell linuxos telepítésével kapcsolatos utasításokat.

  2. A telepítés ellenőrzéséhez futtassa a terminálban a pwsh parancsot:

    pwsh
    

    A kimenet az alábbihoz hasonló:

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

A tesztelési eszközkészlet letöltése

A tesztelési eszközkészlet egy GitHub-adattárban található. Válasszon az alábbi műveletek közül:

A tesztelési eszközkészlet vizsgálata

Letöltötte a tesztelési eszközkészletet egy Ön által választott könyvtárba. Vizsgáljuk meg a könyvtárstruktúrát. (Győződjön meg arról, hogy kibontotta a fájlt, ha a parancs futtatása git clone helyett a .zip fájlt választotta.) Ha az ARM-teszteszközkészlet könyvtárára lép, a következőhöz hasonló könyvtárszerkezettel kell rendelkeznie:

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

A tesztelési eszközkészlet az /arm-ttk alkönyvtárban található.

A sablonfájl létrehozása

Válasszon egy tetszőleges könyvtárt, és hozzon létre egy azuredeploy.json fájlt.

Figyelmeztetés

Ügyeljen rá, hogy a választott könyvtár üres legyen, alkönyvtárak nélkül.

A fájl tartalma legyen a következő:

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

Jegyezze fel a sablonfájl helyét. Az elérési út megállapításához kiadhatja a terminálban a pwd parancsot. Ezt az elérési utat később fogja paraméterként használni a teszteszközkészlet futtatásakor.

A sablon problémáinak észlelése és javítása a tesztelési eszközkészlet futtatásával

Javasoljuk, hogy indítsa el a Visual Studio Code-ot és egy integrált terminált.

A tesztelési eszközkészletet egy üzembe helyezési sablont tartalmazó elérési úton fogja futtatni, és az összes észlelt hibát kijavítja a sablon módosításával.

Figyelmeztetés

Ebben a gyakorlatban egyetlen sablonfájlt fog megvizsgálni. A tesztelési eszközkészlet a megadott könyvtár alatti összes fájlt megvizsgálja. Ezt az indokolja, hogy egy üzembe helyezés több fájlt is tartalmazhat. Ellenőrizze, hogy nincsenek JSON-fájlok az azuredeploy.json fájlt tartalmazó könyvtár alatt.

  1. Egy terminálban lépjen az azuredeploy.json fájt tartalmazó elérési útra. Futtassa az alábbi parancsot a Visual Studio Code elindításához:

    code .
    

    Megjegyzés:

    Ha a Visual Studio Code nem található az elérési úton, nyissa meg manuálisan a Visual Studio Code-ot, és nyissa meg a sablonkönyvtárt.

  2. Nyissa meg az integrált terminált a Visual Studio Code felső menüjének Terminál>Új terminál menüpontjával. A terminálban kiadott alábbi paranccsal indítson el egy PowerShell-rendszerhéjat:

    pwsh
    

    A következőhöz hasonló kimenetnek kell megjelennie:

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

A sablon elemzése

  1. Futtassa az Import-Module parancsot, hogy bárhonnan futtathassa a teszteket.

    Megjegyzés:

    A modul importálása előtt a path/to/arm-ttk/arm-ttk.psd1 útvonal helyére írja be a letöltött tesztelési eszközkészlet elérési útját.

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

    Tipp.

    Ha letöltötte vagy klónozta az eszközt a Letöltések könyvtárba, az elérési út a következőhöz hasonló lesz: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Most már készen áll az eszköz használatára. Amíg ebben a PowerShell-munkamenetben marad, nem kell újra futtatnia az importálási parancsot.

  2. Futtassa Test-AzTemplate a sablonfájl elérési útjára mutató paraméterrel -TemplatePath (a fájlnév kivételével):

    Test-AzTemplate -TemplatePath .
    

    A terminálban az alábbihoz hasonló kimenet jelenik meg:

     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)
    

    A kimenetben figyelje meg, hogy két teszt meghiúsul: az erőforrásoknak helyekkel kell rendelkezniük, és a paraméterekre hivatkozni kell. Az előtag [-] sikertelen tesztet jelez.

    A történtek megértéséhez nyissa meg az azuredeploy.json fájlt: Ennek így kell kinéznie:

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

    A tesztek két okból sikertelenek:

    • A location paraméter nincs használatban. Ez a hibaüzenet jelezheti például azt, hogy a múltban használtuk a paramétert, de elfelejtettük eltávolítani. Az is lehetséges, hogy használni kellene, de megfeledkeztünk a kód frissítéséről.
    • A location tulajdonság értéke a kódban rögzített westus sztring. Ez a megoldás nem ajánlott, mert az üzembe helyezéskor szeretnénk paraméterekkel szabályozni az erőforrások helyét.

A sablon javításának alkalmazása

Hogyan javíthatnánk ki a sikertelen teszteket?

Ahogyan maga a teszt is jelzi, megpróbálhatnánk a westus helyére a global szöveget beírni. Ez azonban csak az egyik problémát oldaná meg. Minden bizonnyal a location paramétert szeretnénk használni, az erőforrások helyét pedig erre az értékre beállítani.

Ennek két oka is van. A helyparaméter nem csak az üzembe helyezés paramétereként állítható be, hanem a resourceGroup(.location) alapértelmezett értékére is, ha kihagyja a helyparaméter beállítását az üzembe helyezés futtatásakor.

  1. Keresse meg a resources tömb első erőforrás-elemét, és cserélje le a következő tartalmat:

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

    erre a tartalomra:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. A javítás ellenőrzéséhez futtassa újra a tesztelési eszközt az integrált terminálban:

    Test-AzTemplate -TemplatePath .
    

    Ebben a kimenetben minden teszt sikeres:

    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)
    

Sikerült! Futtatta a tesztelési eszközt, megkereste a hibákat, és kijavította azokat.

  1. Kövesse a PowerShell telepítése MacOS rendszeren című cikk utasításait.

  2. A telepítés ellenőrzéséhez futtassa a terminálban a pwsh parancsot:

    pwsh
    

    A kimenet az alábbihoz hasonló:

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

A Tesztelési eszközkészlet letöltése

A tesztelési eszközkészlet egy GitHub-adattárban található. Válasszon az alábbi műveletek közül:

A tesztelési eszközkészlet vizsgálata

Letöltötte a tesztelési eszközkészletet egy Ön által választott könyvtárba. Vizsgáljuk meg a könyvtárstruktúrát. (Győződjön meg arról, hogy kibontotta a fájlt, ha a parancs futtatása git clone helyett a .zip fájlt választotta.) Ha az ARM-teszteszközkészlet könyvtárára lép, a következőhöz hasonló könyvtárszerkezettel kell rendelkeznie:

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

A tesztelési eszközkészlet az /arm-ttk alkönyvtárban található.

A sablonfájl létrehozása

Válasszon egy tetszőleges könyvtárt, és hozzon létre egy azuredeploy.json fájlt.

Figyelmeztetés

Ügyeljen rá, hogy a választott könyvtár üres legyen, alkönyvtárak nélkül.

A fájl tartalma legyen a következő:

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

Jegyezze fel a sablonfájl helyét. Az elérési út megállapításához kiadhatja a terminálban a pwd parancsot. Ezt az elérési utat később fogja paraméterként használni a teszteszközkészlet futtatásakor.

A sablon problémáinak észlelése és javítása a tesztelési eszközkészlet futtatásával

Javasoljuk, hogy indítsa el a Visual Studio Code-ot és egy integrált terminált.

A tesztelési eszközkészletet egy üzembe helyezési sablont tartalmazó elérési úton fogja futtatni, és az összes észlelt hibát kijavítja a sablon módosításával.

Figyelmeztetés

Ebben a gyakorlatban egyetlen sablonfájlt fog megvizsgálni. A tesztelési eszközkészlet a megadott könyvtár alatti összes fájlt megvizsgálja. Ezt az indokolja, hogy egy üzembe helyezés több fájlt is tartalmazhat. Ellenőrizze, hogy nincsenek JSON-fájlok az azuredeploy.json fájlt tartalmazó könyvtár alatt.

  1. Egy terminálban lépjen az azuredeploy.json fájt tartalmazó elérési útra. Futtassa az alábbi parancsot a Visual Studio Code elindításához:

    code .
    

    Megjegyzés:

    Ha a Visual Studio Code nem található az elérési úton, nyissa meg manuálisan a Visual Studio Code-ot, és nyissa meg a sablonkönyvtárt.

  2. Nyissa meg az integrált terminált a Visual Studio Code felső menüjének Terminál>Új terminál menüpontjával. A terminálban kiadott alábbi paranccsal indítson el egy PowerShell-rendszerhéjat:

    pwsh
    

    A következőhöz hasonló kimenetnek kell megjelennie:

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

A sablon elemzése

  1. Futtassa az Import-Module parancsot, hogy bárhonnan futtathassa a teszteket.

    Megjegyzés:

    A modul importálása előtt a path/to/arm-ttk/arm-ttk.psd1 útvonal helyére írja be a letöltött tesztelési eszközkészlet elérési útját.

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

    Tipp.

    Ha letöltötte vagy klónozta az eszközt a Letöltések könyvtárba, az elérési út a következőhöz hasonló lesz: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Most már készen áll az eszköz használatára. Amíg ebben a PowerShell-munkamenetben marad, nem kell újra futtatnia az importálási parancsot.

  2. Futtassa Test-AzTemplate a sablonfájl elérési útjára mutató paraméterrel -TemplatePath (a fájlnév kivételével):

    Test-AzTemplate -TemplatePath .
    

    A terminálban az alábbihoz hasonló kimenet jelenik meg:

    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)
    

    Az előző kimenet azt mutatja, hogy két teszt meghiúsul: Az erőforrásoknak helyekkel kell rendelkezniük, és a paraméterekre hivatkozni kell. Az előtag [-] sikertelen tesztet jelez.

    A történtek megértéséhez nyissa meg az azuredeploy.json fájlt: Ennek így kell kinéznie:

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

    A tesztek két okból sikertelenek:

    • A location paraméter nincs használatban. Ez a hibaüzenet jelezheti például azt, hogy a múltban használtuk a paramétert, de elfelejtettük eltávolítani. Az is lehetséges, hogy használni kellene, de megfeledkeztünk a kód frissítéséről.
    • A location tulajdonság értéke a kódban rögzített westus sztring. Ez a megoldás nem ajánlott, mert az üzembe helyezéskor szeretnénk paraméterekkel szabályozni az erőforrások helyét.

A sablon javításának alkalmazása

Hogyan javíthatnánk ki a sikertelen teszteket?

Ahogyan maga a teszt is jelzi, megpróbálhatnánk a westus helyére a global szöveget beírni. Ez azonban csak az egyik problémát oldaná meg. Minden bizonnyal a location paramétert szeretnénk használni, az erőforrások helyét pedig erre az értékre beállítani.

Ennek két oka is van. A helyparaméter nem csak az üzembe helyezés paramétereként állítható be, hanem a resourceGroup(.location) alapértelmezett értékére is, ha kihagyja a helyparaméter beállítását az üzembe helyezés futtatásakor.

  1. Keresse meg a resources tömb első erőforrás-elemét, és cserélje le a következő tartalmat:

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

    erre a tartalomra:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. A javítás ellenőrzéséhez futtassa újra a tesztelési eszközt az integrált terminálban:

    Test-AzTemplate -TemplatePath .
    

    Ebben a kimenetben minden teszt sikeres:

    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)
    

Sikerült! Futtatta a tesztelési eszközt, megkereste a hibákat, és kijavította azokat.

  1. Kövesse a PowerShell telepítése Windows rendszeren című cikk utasításait.
  2. Telepítse a PowerShell-bővítményt a Visual Studio Code-ban.

A tesztelési eszközkészlet letöltése

A tesztelési eszközkészlet egy GitHub-adattárban található. Válasszon az alábbi műveletek közül:

A tesztelési eszközkészlet vizsgálata

Letöltötte a tesztelési eszközkészletet egy Ön által választott könyvtárba. Vizsgáljuk meg a könyvtárstruktúrát. (Győződjön meg arról, hogy kibontotta a fájlt, ha a parancs futtatása git clone helyett a .zip fájlt választotta.) Ha az ARM-teszteszközkészlet könyvtárára lép, a következőhöz hasonló könyvtárszerkezettel kell rendelkeznie:

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

A tesztelési eszközkészlet az \arm-ttk alkönyvtárban található.

A sablonfájl létrehozása

Hozzon létre egy azuredeploy.json nevű fájlt egy tetszőleges elérési úton, például a C:\Temp mappában.

Figyelmeztetés

Ügyeljen rá, hogy a választott könyvtár üres legyen, alkönyvtárak nélkül.

A fájl tartalma legyen a következő:

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

Jegyezze fel a sablonfájl helyét. Ezt a könyvtár elérési útját (például C:\Temp) később fogja paraméterként használni a teszteszközkészlet futtatásakor.

A sablon problémáinak észlelése és javítása a tesztelési eszközkészlet futtatásával

Javasoljuk, hogy indítsa el a Visual Studio Code-ot és egy integrált terminált.

A tesztelési eszközkészletet egy üzembe helyezési sablont tartalmazó elérési úton fogja futtatni, és az összes észlelt hibát kijavítja a sablon módosításával.

Figyelmeztetés

Ebben a gyakorlatban egyetlen sablonfájlt fog megvizsgálni. A tesztelési eszközkészlet a megadott könyvtár alatti összes fájlt megvizsgálja. Ezt az indokolja, hogy egy üzembe helyezés több fájlt is tartalmazhat. Ellenőrizze, hogy nincsenek JSON-fájlok az azuredeploy.json fájlt tartalmazó könyvtár alatt.

  1. Egy terminálban lépjen az azuredeploy.json fájt tartalmazó elérési útra. Futtassa az alábbi parancsot a Visual Studio Code elindításához:

    code .
    

    Megjegyzés:

    Ha a Visual Studio Code nem található az elérési úton, nyissa meg manuálisan a Visual Studio Code-ot, és nyissa meg a sablonkönyvtárt.

  2. A Visual Studio Code-ban nyissa meg a parancspalettát, és válassza a PowerShell: Integrált konzol megjelenítése parancsot.

A sablon elemzése

  1. Futtassa az Import-Module parancsot a PowerShell-terminálban:

    Megjegyzés:

    A modul importálása előtt a path\to\arm-ttk\arm-ttk.psd1 útvonal helyére írja be a letöltött tesztelési eszközkészlet elérési útját.

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

    A fenti parancs megmutatja a tesztelési eszközkészlet modul helyét.

    Tipp.

    Ha letöltötte vagy klónozta az eszközt a Letöltések könyvtárba, az elérési út a következőhöz hasonlóan fog kinézni: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Most már készen áll az eszköz használatára. Amíg ebben a PowerShell-munkamenetben marad, nem kell újra futtatnia az importálási parancsot.

    Megjegyzés:

    Ha új PowerShell-munkamenetet indít el, újra kell futtatnia a Import-Module parancsot.

  2. Adja ki a Test-AzTemplate parancsot a PowerShell-terminálban egy tesztfuttatás elindításához:

    Test-AzTemplate -TemplatePath .
    

    A terminálban az alábbihoz hasonló kimenet jelenik meg:

    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
    

    Az előző kimenet azt mutatja be, hogy három teszt meghiúsul: a hely nem lehet hardcoded, a paraméterekre hivatkozni kell, és az erőforrásoknak helyük kell. Az előtag [-] sikertelen tesztet jelez.

    A történtek megértéséhez nyissa meg az azuredeploy.json fájlt: Ennek így kell kinéznie:

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

    A tesztek két okból sikertelenek:

    • A location paraméter nincs használatban. Ez a hibaüzenet jelezheti például azt, hogy a múltban használtuk a paramétert, de elfelejtettük eltávolítani. Az is lehetséges, hogy használni kellene, de megfeledkeztünk a kód frissítéséről.
    • A location tulajdonság értéke a kódban rögzített westus sztring. Ez a megoldás nem ajánlott, mert az üzembe helyezéskor szeretnénk paraméterekkel szabályozni az erőforrások helyét.

A sablon javításának alkalmazása

Hogyan javíthatnánk ki a sikertelen teszteket?

Ahogyan maga a teszt is jelzi, megpróbálhatnánk a westus helyére a global szöveget beírni. Ez azonban csak az egyik problémát oldaná meg. Minden bizonnyal a location paramétert szeretnénk használni, az erőforrások helyét pedig erre az értékre beállítani.

Ennek két oka is van. A helyparaméter nem csak az üzembe helyezés paramétereként állítható be, hanem a resourceGroup(.location) alapértelmezett értékére is, ha kihagyja a helyparaméter beállítását az üzembe helyezés futtatásakor.

  1. Keresse meg a resources tömb első erőforrás-elemét, és cserélje le a következő tartalmat:

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

    erre a tartalomra:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Adja ki a Test-AzTemplate parancsot a tesztelési eszköz ismételt futtatásához:

    Test-AzTemplate -TemplatePath .
    

    Ebben a kimenetben minden teszt sikeres:

    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   
    

Sikerült! Futtatta a tesztelési eszközt, megkereste a hibákat, és kijavította azokat.

Most már készen áll rá, hogy lefuttassa a teszteket a sablonon.