Gyakorlat – Ajánlott eljárások alkalmazása a sablonra az ARM-sablontesztelési eszközkészlet használatával
Ö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
A PowerShell telepítéséhez kövesse a PowerShell linuxos telepítésével kapcsolatos utasításokat.
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:
Klónozza az adattárat a
git clone
paranccsal:git clone https://github.com/Azure/arm-ttk.git
Töltse le az adattárat .zip-fájlként a böngészőben.
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.
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.
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
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.
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.
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')]" }]
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.
Kövesse a PowerShell telepítése MacOS rendszeren című cikk utasításait.
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:
Klónozza az adattárat a
git clone
paranccsal:git clone https://github.com/Azure/arm-ttk.git
Töltse le az adattárat .zip-fájlként a böngészőben.
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.
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.
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
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.
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.
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')]" }]
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.
- Kövesse a PowerShell telepítése Windows rendszeren című cikk utasításait.
- 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:
Klónozza az adattárat a
git clone
paranccsal:git clone https://github.com/Azure/arm-ttk.git
Töltse le az adattárat .zip-fájlként a böngészőben.
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.
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.
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
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.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.
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')]" }]
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.