Cvičení – použití osvědčených postupů v šabloně pomocí testovací sady nástrojů pro šablony ARM
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
Pokud chcete nainstalovat PowerShell, postupujte podle pokynů v instalaci PowerShellu v Linuxu.
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í:
Naklonujte úložiště spuštěním příkazu
git clone
:git clone https://github.com/Azure/arm-ttk.git
V prohlížeči stáhněte úložiště jako soubor .zip.
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.
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ě.
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
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.
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í .
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')]" }]
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.
Postupujte podle pokynů v tématu Instalace PowerShellu v macOS.
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í:
Naklonujte úložiště spuštěním příkazu
git clone
:git clone https://github.com/Azure/arm-ttk.git
V prohlížeči stáhněte úložiště jako soubor .zip.
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.
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ě.
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
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.
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í .
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')]" }]
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.
- Postupujte podle pokynů v tématu Instalace PowerShellu ve Windows.
- 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í:
Naklonujte úložiště spuštěním příkazu
git clone
:git clone https://github.com/Azure/arm-ttk.git
V prohlížeči stáhněte úložiště jako soubor .zip.
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.
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ě.
V editoru Visual Studio Code otevřete paletu příkazů a vyberte příkaz PowerShell: Zobrazit integrovanou konzolu.
Analýza šablony
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.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í .
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')]" }]
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.