Övning – Tillämpa bra metoder på mallen med hjälp av TESTverktyg för ARM-mallar

Slutförd

Du ingår i utvecklingsteamet på företaget Tailwind Traders. I ditt jobb ingår att skapa ARM-mallar (Azure Resource Manager) för att distribuera och hantera resurser i molnet. Du vill se till att mallarna följer några sunda metoder innan resurserna distribueras. Du väljer att använda testverktyget för ARM-mallar för att analysera dina mallar, så att du kan åtgärda eventuella problem.

Konfigurera din testmiljö

Verktyget är en PowerShell-modul. Använd följande steg för att kunna köra det:

  • Installera PowerShell-modulen. Den här uppgiften utförs på olika sätt beroende på om du använder Linux, Mac eller Windows.
  • Ladda ned modulen. Modulen finns på en GitHub-lagringsplats. Du kan ladda ned det därifrån eller hämta det via ett git clone-kommando.
  • Importera modulen. Det här steget är bara en enradsinstruktion som du anger i en PowerShell-session som gör ARM-TTK-kommandona tillgängliga.

Installera PowerShell

  1. Om du vill installera PowerShell följer du anvisningarna i Installera PowerShell på Linux.

  2. Verifiera installationen genom att köra pwsh i terminalen:

    pwsh
    

    Ditt resultat ser ut ungefär så här:

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

Ladda ned testverktyget

Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:

Inspektera testverktyget

Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:

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

Testverktyget finns i underkatalogen /arm-ttk.

Skapa mallfilen

Välj en katalog och skapa en fil med namnet azuredeploy.json.

Varning

Se till att katalogen är tom och att det inte finns några underkataloger.

Lägg till följande innehåll:

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

Skriv ned sökvägen till mallfilen. Du kan köra kommandot pwd i terminalen för att visa sökvägen. Du använder den här sökvägen senare som en parameter när du kör testverktyget.

Identifiera och åtgärda problem i mallen genom att köra testverktyget

Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.

Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.

Varning

I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.

  1. I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:

    code .
    

    Kommentar

    Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.

  2. Öppna den integrerade terminalen i Visual Studio Code genom att välja Terminal>Ny terminal på huvudmenyn. Skapa en PowerShell-session genom att köra följande kommando i terminalen:

    pwsh
    

    Du ser utdata som liknar det här:

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

Analysera mallen

  1. Kör Import-Module så att du kan köra testerna från valfri katalog.

    Kommentar

    Innan du importerar modulen ska du ersätta path/to/arm-ttk/arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.

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

    Dricks

    Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.

  2. Kör Test-AzTemplate med parametern -TemplatePath som pekar på platsen för mallfilens sökväg (exklusive filnamnet):

    Test-AzTemplate -TemplatePath .
    

    Du bör se utdata som liknar följande i terminalen:

     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)
    

    Observera hur två tester misslyckas i utdata: Resurser ska ha plats och parametrar måste refereras till. Prefixet [-] anger ett misslyckat test.

    Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:

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

    Testerna misslyckas av två orsaker:

    • Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
    • Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.

Tillämpa en snabbkorrigering på mallen

Hur åtgärdar vi de misslyckade testen?

Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.

Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.

  1. Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:

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

    med det här innehållet:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Kör testverktyget i den integrerade terminalen igen för att verifiera korrigeringen:

    Test-AzTemplate -TemplatePath .
    

    Nu bör du se utdata där alla tester lyckas:

    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)
    

Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.

  1. Följ instruktionerna i Installera PowerShell i macOS.

  2. Verifiera installationen genom att köra pwsh i terminalen:

    pwsh
    

    Ditt resultat ser ut ungefär så här:

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

Ladda ned testverktyget

Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:

Inspektera testverktyget

Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:

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

Testverktyget finns i underkatalogen /arm-ttk.

Skapa mallfilen

Välj en katalog och skapa en fil med namnet azuredeploy.json.

Varning

Se till att katalogen är tom och att det inte finns några underkataloger.

Lägg till följande innehåll:

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

Skriv ned sökvägen till mallfilen. Du kan köra kommandot pwd i terminalen för att visa sökvägen. Du använder den här sökvägen senare som en parameter när du kör testverktyget.

Identifiera och åtgärda problem i mallen genom att köra testverktyget

Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.

Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.

Varning

I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.

  1. I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:

    code .
    

    Kommentar

    Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.

  2. Öppna den integrerade terminalen i Visual Studio Code genom att välja Terminal>Ny terminal på huvudmenyn. Skapa en PowerShell-session genom att köra följande kommando i terminalen:

    pwsh
    

    Du ser utdata som liknar det här:

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

Analysera mallen

  1. Kör Import-Module så att du kan köra testerna från valfri katalog.

    Kommentar

    Innan du importerar modulen ska du ersätta path/to/arm-ttk/arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.

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

    Dricks

    Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.

  2. Kör Test-AzTemplate med parametern -TemplatePath som pekar på platsen för mallfilens sökväg (exklusive filnamnet):

    Test-AzTemplate -TemplatePath .
    

    Du bör se utdata som liknar följande i terminalen:

    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)
    

    Föregående utdata visar hur två tester misslyckas: Resurser ska ha plats och parametrar måste refereras. Prefixet [-] anger ett misslyckat test.

    Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:

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

    Testerna misslyckas av två orsaker:

    • Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
    • Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.

Tillämpa en snabbkorrigering på mallen

Hur åtgärdar vi de misslyckade testen?

Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.

Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.

  1. Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:

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

    med det här innehållet:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Kör testverktyget i den integrerade terminalen igen för att verifiera korrigeringen:

    Test-AzTemplate -TemplatePath .
    

    Nu bör du se utdata där alla tester lyckas:

    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)
    

Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.

  1. Följ instruktionerna i installera PowerShell i Windows.
  2. Installera PowerShell-tillägget från Visual Studio Code.

Ladda ned testverktyget

Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:

Inspektera testverktyget

Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:

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

Testverktyget finns i underkatalogen \arm-ttk.

Skapa mallfilen

Skapa en fil med namnet azuredeploy.json i en valfri katalog, som C:\Temp.

Varning

Se till att katalogen är tom och att det inte finns några underkataloger.

Lägg till följande innehåll:

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

Skriv ned sökvägen till mallfilen. Du använder den här katalogsökvägen (till exempel C:\Temp) senare som en parameter när du kör testverktyget.

Identifiera och åtgärda problem i mallen genom att köra testverktyget

Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.

Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.

Varning

I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.

  1. I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:

    code .
    

    Kommentar

    Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.

  2. I Visual Studio Code tar du upp kommandopaletten och väljer kommandot PowerShell: Visa integrerad konsol.

Analysera mallen

  1. Kör Import-Module i PowerShell-terminalen:

    Kommentar

    Innan du importerar modulen ska du ersätta path\to\arm-ttk\arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.

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

    Kommandot ovan visar sökvägen för testverktygsmodulen.

    Dricks

    Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.

    Kommentar

    Om du startar en ny PowerShell-session måste du köra Import-Module kommandot igen.

  2. Kör Test-AzTemplate i PowerShell-terminalen för att starta en testkörning:

    Test-AzTemplate -TemplatePath .
    

    Du bör se utdata som liknar följande i terminalen:

    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
    

    Föregående utdata visar hur tre tester misslyckas: Platsen ska inte vara hårdkodad, parametrar måste refereras och resurser ska ha plats. Prefixet [-] anger ett misslyckat test.

    Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:

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

    Testerna misslyckas av två orsaker:

    • Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
    • Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.

Tillämpa en snabbkorrigering på mallen

Hur åtgärdar vi de misslyckade testen?

Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.

Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.

  1. Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:

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

    med det här innehållet:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Kör Test-AzTemplate för att köra testverktyget igen:

    Test-AzTemplate -TemplatePath .
    

    Nu bör du se utdata där alla tester lyckas:

    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   
    

Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.

Nu är du redo att köra testerna på din mall.