Oefening: goede procedures toepassen op uw sjabloon met behulp van de TEST-toolkit voor ARM-sjablonen

Voltooid

U maakt deel uit van een ontwikkelingsteam bij het bedrijf Tailwind Traders. Als onderdeel van die rol moet u ARM-sjablonen (Azure Resource Manager) ontwerpen voor het implementeren en beheren van resources in de cloud. U wilt ervoor zorgen dat de sjablonen een aantal goede procedures volgen voordat de resources worden geïmplementeerd. U kiest ervoor om de TEST-toolkit voor ARM-sjablonen te gebruiken om uw sjablonen te analyseren, zodat u eventuele problemen kunt oplossen.

Uw testomgeving instellen

Het hulpprogramma is een PowerShell-module. Gebruik de volgende stappen om het uit te voeren:

  • Installeer de PowerShell-module. Deze taak verschilt afhankelijk van of u Linux, Mac of Windows gebruikt.
  • Download de module. De module wordt gehost in een GitHub-opslagplaats. U kunt het daar downloaden of het ophalen met een git clone-opdracht.
  • Importeer de module. Deze stap is slechts een instructie van één regel die u invoert in een PowerShell-sessie waarmee de ARM-TTK-opdrachten beschikbaar worden.

PowerShell installeren

  1. Als u PowerShell wilt installeren, volgt u de instructies in Het installeren van PowerShell in Linux.

  2. pwsh uitvoeren in de terminal om de installatie te verifiëren:

    pwsh
    

    De uitvoer ziet er ongeveer als volgt uit:

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

De test-toolkit downloaden

De test-toolkit bevindt zich in een GitHub-opslagplaats. Kies een van de volgende acties:

De test-toolkit inspecteren

U hebt de test-toolkit gedownload naar een map van uw keuze. Bekijk nu de structuur van uw map. (Zorg ervoor dat u het bestand hebt uitgepakt als u ervoor hebt gekozen om het ZIP-bestand te downloaden in plaats van de git clone opdracht uit te voeren.) U moet een mapstructuur hebben die er als volgt uitziet als u naar de map van de ARM-testtoolkit gaat:

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

De test-toolkit bevindt zich in de submap /arm-ttk.

Het sjabloonbestand maken

Selecteer een map en maak een bestand met de naam azuredeploy.json.

Waarschuwing

Controleer of de geselecteerde map leeg is en geen onderliggende mappen heeft.

Voeg de volgende inhoud toe:

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

Noteer de locatie van het sjabloonbestand. U kunt de opdracht pwd in de terminal uitvoeren om het pad uit te voeren. U gebruikt dit pad later als parameter bij het uitvoeren van de test-toolkit.

Problemen met uw sjabloon detecteren en oplossen door de test-toolkit uit te voeren

Het is raadzaam Visual Studio Code en een geïntegreerde terminal te starten.

U voert de test-toolkit uit op een pad met een implementatiesjabloon en u herstelt eventuele fouten die worden gedetecteerd door de sjabloon te wijzigen.

Waarschuwing

In deze oefening scant u één sjabloonbestand. De test-toolkit scant alle bestanden onder de map die u opgeeft. Dit komt doordat een implementatie verschillende bestanden kan bevatten. Zorg ervoor dat er geen JSON-bestanden staan in de map waarin azuredeploy.json zich bevindt.

  1. Ga in een terminal naar het pad waar uw bestand azuredeploy.json staat. Voer de volgende opdracht uit om Visual Studio Code te starten:

    code .
    

    Notitie

    Open Visual Studio Code handmatig en open de sjabloonmap als Visual Studio Code zich niet op het pad bevindt.

  2. Open de geïntegreerde terminal vanuit Visual Studio Code door in het hoofdmenu Terminal>Nieuwe terminal te selecteren. Voer in de terminal de volgende opdracht uit om een PowerShell-shell te starten:

    pwsh
    

    De uitvoer zou er ongeveer als volgt uit moeten zien:

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

De sjabloon analyseren

  1. Voer Import-Module uit om de tests vanaf elke locatie te kunnen uitvoeren.

    Notitie

    Voordat u de module importeert, vervangt u path/to/arm-ttk/arm-ttk.psd1 door het pad naar de gedownloade test-toolkit.

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

    Tip

    Als u het hulpprogramma naar de map Downloads hebt gedownload of gekloond, ziet het pad er ongeveer als volgt uit: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    U bent nu klaar om het hulpprogramma te gebruiken. Zolang u zich in dezelfde PowerShell-sessie bevindt, hoeft u de importopdracht niet opnieuw uit te voeren.

  2. Voer Test-AzTemplate uit met de parameter -TemplatePath die verwijst naar de locatie van het pad naar het sjabloonbestand (met uitzondering van de bestandsnaam):

    Test-AzTemplate -TemplatePath .
    

    Ongeveer de volgende uitvoer wordt weergegeven in de terminal:

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

    In de uitvoer ziet u hoe twee tests mislukken: Resources moeten locatie enparameters hebben waarnaar moet worden verwezen. Het voorvoegsel [-] geeft een mislukte test aan.

    Als u wilt weten wat er gebeurt, opent u het bestand azuredeploy.json. Dit ziet er als volgt uit:

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

    Tests kunnen om twee redenen mislukken:

    • De locatieparameter wordt niet gebruikt. Dit foutbericht kan bijvoorbeeld aangeven dat de parameter in het verleden is gebruikt, maar niet is gewist. Of misschien moet deze worden gebruikt, maar bent u vergeten de code bij te werken.
    • De locatie-eigenschap wordt ingesteld op de in code vastgelegde tekenreeks westus. Het gebruik van deze optie wordt niet als een goede werkwijze beschouwd, omdat u de locatie van een resource zelf wilt kunnen bepalen met invoerparameters tijdens de implementatie.

Een correctie op de sjabloon toepassen

Hoe kunt u de mislukte tests herstellen?

Zoals wordt aangegeven, kunt u proberen westus te vervangen door de tekst global. Hiermee wordt echter slechts één probleem opgelost. Waarschijnlijk is het beter om de parameter locatie te gebruiken en de locatie van de resource op die waarde in te stellen.

Dat heeft twee redenen. Niet alleen kan de locatieparameter worden ingesteld als een parameter voor implementatie, maar het heeft ook de redelijke terugval dat deze wordt ingesteld op resourceGroup().location as defaultValue als u de locatieparameter weglaat bij het uitvoeren van de implementatie.

  1. Zoek het eerste resource-item in de resourcematrix en vervang de volgende inhoud:

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

    met deze inhoud:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Voer het testhulpprogramma opnieuw uit in de geïntegreerde terminal om de fix te controleren:

    Test-AzTemplate -TemplatePath .
    

    U krijgt nu een uitvoer waarin alle tests zijn geslaagd:

    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)
    

Gelukt! U hebt het testhulpprogramma uitgevoerd, fouten gevonden en deze opgelost.

  1. Volg de instructies in PowerShell installeren in macOS.

  2. pwsh uitvoeren in de terminal om de installatie te verifiëren:

    pwsh
    

    De uitvoer ziet er ongeveer als volgt uit:

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

De test-toolkit downloaden

De test-toolkit bevindt zich in een GitHub-opslagplaats. Kies een van de volgende acties:

De test-toolkit inspecteren

U hebt de test-toolkit gedownload naar een map van uw keuze. Bekijk nu de structuur van uw map. (Zorg ervoor dat u het bestand hebt uitgepakt als u ervoor hebt gekozen om het ZIP-bestand te downloaden in plaats van de git clone opdracht uit te voeren.) U moet een mapstructuur hebben die er als volgt uitziet als u naar de map van de ARM-testtoolkit gaat:

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

De test-toolkit bevindt zich in de submap /arm-ttk.

Het sjabloonbestand maken

Selecteer een map en maak een bestand met de naam azuredeploy.json.

Waarschuwing

Controleer of de geselecteerde map leeg is en geen onderliggende mappen heeft.

Voeg de volgende inhoud toe:

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

Noteer de locatie van het sjabloonbestand. U kunt de opdracht pwd in de terminal uitvoeren om het pad uit te voeren. U gebruikt dit pad later als parameter bij het uitvoeren van de test-toolkit.

Problemen met uw sjabloon detecteren en oplossen door de test-toolkit uit te voeren

Het is raadzaam Visual Studio Code en een geïntegreerde terminal te starten.

U voert de test-toolkit uit op een pad met een implementatiesjabloon en u herstelt eventuele fouten die worden gedetecteerd door de sjabloon te wijzigen.

Waarschuwing

In deze oefening scant u één sjabloonbestand. De test-toolkit scant alle bestanden onder de map die u opgeeft. Dit komt doordat een implementatie verschillende bestanden kan bevatten. Zorg ervoor dat er geen JSON-bestanden staan in de map waarin azuredeploy.json zich bevindt.

  1. Ga in een terminal naar het pad waar uw bestand azuredeploy.json staat. Voer de volgende opdracht uit om Visual Studio Code te starten:

    code .
    

    Notitie

    Open Visual Studio Code handmatig en open de sjabloonmap als Visual Studio Code zich niet op het pad bevindt.

  2. Open de geïntegreerde terminal vanuit Visual Studio Code door in het hoofdmenu Terminal>Nieuwe terminal te selecteren. Voer in de terminal de volgende opdracht uit om een PowerShell-shell te starten:

    pwsh
    

    De uitvoer zou er ongeveer als volgt uit moeten zien:

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

De sjabloon analyseren

  1. Voer Import-Module uit om de tests vanaf elke locatie te kunnen uitvoeren.

    Notitie

    Voordat u de module importeert, vervangt u path/to/arm-ttk/arm-ttk.psd1 door het pad naar de gedownloade test-toolkit.

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

    Tip

    Als u het hulpprogramma naar de map Downloads hebt gedownload of gekloond, ziet het pad er ongeveer als volgt uit: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    U bent nu klaar om het hulpprogramma te gebruiken. Zolang u zich in dezelfde PowerShell-sessie bevindt, hoeft u de importopdracht niet opnieuw uit te voeren.

  2. Voer Test-AzTemplate uit met de parameter -TemplatePath die verwijst naar de locatie van het pad naar het sjabloonbestand (met uitzondering van de bestandsnaam):

    Test-AzTemplate -TemplatePath .
    

    Ongeveer de volgende uitvoer wordt weergegeven in de terminal:

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

    In de voorgaande uitvoer ziet u hoe twee tests mislukken: Resources moeten de locatie en parameters hebben waarnaar moet worden verwezen. Het voorvoegsel [-] geeft een mislukte test aan.

    Als u wilt weten wat er gebeurt, opent u het bestand azuredeploy.json. Dit ziet er als volgt uit:

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

    Tests kunnen om twee redenen mislukken:

    • De locatieparameter wordt niet gebruikt. Dit foutbericht kan bijvoorbeeld aangeven dat de parameter in het verleden is gebruikt, maar niet is gewist. Of misschien moet deze worden gebruikt, maar bent u vergeten de code bij te werken.
    • De locatie-eigenschap wordt ingesteld op de in code vastgelegde tekenreeks westus. Het gebruik van deze optie wordt niet als een goede werkwijze beschouwd, omdat u de locatie van een resource zelf wilt kunnen bepalen met invoerparameters tijdens de implementatie.

Een correctie op de sjabloon toepassen

Hoe kunt u de mislukte tests herstellen?

Zoals wordt aangegeven, kunt u proberen westus te vervangen door de tekst global. Hiermee wordt echter slechts één probleem opgelost. Waarschijnlijk is het beter om de parameter locatie te gebruiken en de locatie van de resource op die waarde in te stellen.

Dat heeft twee redenen. Niet alleen kan de locatieparameter worden ingesteld als een parameter voor implementatie, maar het heeft ook de redelijke terugval dat deze wordt ingesteld op resourceGroup().location as defaultValue als u de locatieparameter weglaat bij het uitvoeren van de implementatie.

  1. Zoek het eerste resource-item in de resourcematrix en vervang de volgende inhoud:

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

    met deze inhoud:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Voer het testhulpprogramma opnieuw uit in de geïntegreerde terminal om de fix te controleren:

    Test-AzTemplate -TemplatePath .
    

    U krijgt nu een uitvoer waarin alle tests zijn geslaagd:

    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)
    

Gelukt! U hebt het testhulpprogramma uitgevoerd, fouten gevonden en deze opgelost.

  1. Volg de instructies in PowerShell installeren in Windows.
  2. Installeer de PowerShell-extensie vanuit Visual Studio Code.

De test-toolkit downloaden

De test-toolkit bevindt zich in een GitHub-opslagplaats. Kies een van de volgende acties:

De test-toolkit inspecteren

U hebt de test-toolkit gedownload naar een map van uw keuze. Bekijk nu de structuur van uw map. (Zorg ervoor dat u het bestand hebt uitgepakt als u ervoor hebt gekozen om het ZIP-bestand te downloaden in plaats van de git clone opdracht uit te voeren.) U moet een mapstructuur hebben die er als volgt uitziet als u naar de map van de ARM-testtoolkit gaat:

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

De test-toolkit bevindt zich in de submap \arm-ttk.

Het sjabloonbestand maken

Maak een bestand met de naam azuredeploy.json in de gewenste map, bijvoorbeeld C:\Temp.

Waarschuwing

Controleer of de geselecteerde map leeg is en geen onderliggende mappen heeft.

Voeg de volgende inhoud toe:

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

Noteer de locatie van het sjabloonbestand. U gebruikt dit mappad (bijvoorbeeld C:\Temp) later als parameter bij het uitvoeren van de test-toolkit.

Problemen met uw sjabloon detecteren en oplossen door de test-toolkit uit te voeren

Het is raadzaam Visual Studio Code en een geïntegreerde terminal te starten.

U voert de test-toolkit uit op een pad met een implementatiesjabloon en u herstelt eventuele fouten die worden gedetecteerd door de sjabloon te wijzigen.

Waarschuwing

In deze oefening scant u één sjabloonbestand. De test-toolkit scant alle bestanden onder de map die u opgeeft. Dit komt doordat een implementatie verschillende bestanden kan bevatten. Zorg ervoor dat er geen JSON-bestanden staan in de map waarin azuredeploy.json zich bevindt.

  1. Ga in een terminal naar het pad waar uw bestand azuredeploy.json staat. Voer de volgende opdracht uit om Visual Studio Code te starten:

    code .
    

    Notitie

    Open Visual Studio Code handmatig en open de sjabloonmap als Visual Studio Code zich niet op het pad bevindt.

  2. Open in Visual Studio Code het opdrachtenpalet en selecteer de opdracht PowerShell: Geïntegreerde console weergeven.

De sjabloon analyseren

  1. Voer Import-Module uit in de PowerShell-terminal:

    Notitie

    Voordat u de module importeert, vervangt u path\to\arm-ttk\arm-ttk.psd1 door het pad naar de gedownloade test-toolkit.

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

    Met de voorgaande opdracht wordt de positie van de test-toolkit-module aangegeven.

    Tip

    Als u het hulpprogramma naar de map Downloads hebt gedownload of gekloond, ziet het pad er ongeveer als volgt uit: C:\Users\user>\<Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    U bent nu klaar om het hulpprogramma te gebruiken. Zolang u zich in dezelfde PowerShell-sessie bevindt, hoeft u de importopdracht niet opnieuw uit te voeren.

    Notitie

    Als u een nieuwe PowerShell-sessie start, moet u de Import-Module opdracht opnieuw uitvoeren.

  2. Voer Test-AzTemplate uit in de PowerShell-terminal om een testuitvoering te starten:

    Test-AzTemplate -TemplatePath .
    

    Ongeveer de volgende uitvoer wordt weergegeven in de terminal:

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

    In de voorgaande uitvoer ziet u hoe drie tests mislukken: Location Should Not Hardcoded, Parameters Must Be Referenced en Resources Should Have Location. Het voorvoegsel [-] geeft een mislukte test aan.

    Als u wilt weten wat er gebeurt, opent u het bestand azuredeploy.json. Dit ziet er als volgt uit:

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

    Tests kunnen om twee redenen mislukken:

    • De locatieparameter wordt niet gebruikt. Dit foutbericht kan bijvoorbeeld aangeven dat de parameter in het verleden is gebruikt, maar niet is gewist. Of misschien moet deze worden gebruikt, maar bent u vergeten de code bij te werken.
    • De locatie-eigenschap wordt ingesteld op de in code vastgelegde tekenreeks westus. Het gebruik van deze optie wordt niet als een goede werkwijze beschouwd, omdat u de locatie van een resource zelf wilt kunnen bepalen met invoerparameters tijdens de implementatie.

Een correctie op de sjabloon toepassen

Hoe kunt u de mislukte tests herstellen?

Zoals wordt aangegeven, kunt u proberen westus te vervangen door de tekst global. Hiermee wordt echter slechts één probleem opgelost. Waarschijnlijk is het beter om de parameter locatie te gebruiken en de locatie van de resource op die waarde in te stellen.

Dat heeft twee redenen. Niet alleen kan de locatieparameter worden ingesteld als een parameter voor implementatie, maar het heeft ook de redelijke terugval dat deze wordt ingesteld op resourceGroup().location as defaultValue als u de locatieparameter weglaat bij het uitvoeren van de implementatie.

  1. Zoek het eerste resource-item in de resourcematrix en vervang de volgende inhoud:

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

    met deze inhoud:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Voer Test-AzTemplate uit om het testhulpprogramma opnieuw uit te voeren:

    Test-AzTemplate -TemplatePath .
    

    U krijgt nu een uitvoer waarin alle tests zijn geslaagd:

    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   
    

Gelukt! U hebt het testhulpprogramma uitgevoerd, fouten gevonden en deze opgelost.

U bent nu klaar om de tests uit te voeren op uw sjabloon.