Übung: Anwenden von empfohlenen Methoden auf Ihre Vorlage mithilfe des Testtoolkits für ARM-Vorlagen

Abgeschlossen

Sie sind Teil eines Entwicklungsteams des Unternehmens Tailwind Traders. Im Rahmen Ihrer Arbeit müssen Sie Azure Resource Manager-Vorlagen (ARM-Vorlagen) erstellen, um Ressourcen in der Cloud bereitzustellen und zu verwalten. Sie sollten vor der Bereitstellung der Ressourcen sicherstellen, dass die Vorlagen vernünftige Vorgehensweisen umsetzen. Sie entscheiden sich für die Verwendung des Testtoolkits für ARM-Vorlagen als Unterstützung bei der Analyse Ihrer Vorlagen, damit Sie etwaige Probleme beheben können.

Einrichten Ihrer Testumgebung

Bei dem Tool handelt es sich um ein PowerShell-Modul. Führen Sie die folgenden Schritte aus, um das Skript ausführen zu können:

  • Installieren Sie das PowerShell-Modul. Diese Aufgabe wird unterschiedlich ausgeführt, je nachdem, ob Sie Linux, Mac oder Windows verwenden.
  • Laden Sie das Modul herunter. Das Modul wird in einem GitHub-Repository gehostet. Sie können es von dort herunterladen oder über einen Befehl git clone abrufen.
  • Importieren Sie das Modul. Bei diesem Schritt handelt es sich lediglich um eine einzeilige Anweisung, die Sie in eine PowerShell-Sitzung eingeben. Dadurch werden die ARM-TTK-Befehle verfügbar.

Installieren von PowerShell

  1. Befolgen Sie die Anweisungen unter Installieren von PowerShell unter Linux, um PowerShell zu installieren.

  2. Führen Sie pwsh im Terminal aus, um die Installation zu überprüfen:

    pwsh
    

    Die Ausgabe sieht ungefähr wie folgt aus:

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

Herunterladen des Testtoolkits

Das Testtoolkit befindet sich in einem GitHub-Repository. Wählen Sie eine der folgenden Aktionen aus:

Untersuchen des Testtoolkits

Sie haben soeben das Testtoolkit in ein Verzeichnis Ihrer Wahl heruntergeladen. Betrachten wir nun die Verzeichnisstruktur. (Stellen Sie sicher, dass Sie die Datei entpackt haben, wenn Sie sich entschieden haben, die ZIP-Datei herunterzuladen, anstatt den Befehl git clone zu verwenden.) Wenn Sie zum Verzeichnis des ARM-Testtoolkits navigieren, sollte die Verzeichnisstruktur wie folgt aussehen:

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

Das Testtoolkit befindet sich im Unterverzeichnis /arm-ttk.

Erstellen der Vorlagendatei

Wählen Sie ein Verzeichnis Ihrer Wahl aus, und erstellen Sie eine Datei namens azuredeploy.json.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

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

Notieren Sie sich den Speicherort der Vorlagendatei. Sie können den Befehl pwd im Terminal ausführen, um den Pfad auszugeben. Diesen Pfad verwenden Sie später beim Ausführen des Testtoolkits als Parameter.

Erkennen und Beheben von Problemen in Ihrer Vorlage durch Ausführen des Testtoolkits

Es wird empfohlen, Visual Studio Code und ein integriertes Terminal zu starten.

Sie führen das Testtoolkit für einen Pfad mit einer Bereitstellungsvorlage aus und beheben alle dabei erkannten Fehler durch Ändern der Vorlage.

Warnung

In dieser Übung überprüfen Sie eine Vorlagendatei. Das Testtoolkit überprüft alle Dateien in dem Verzeichnis, das Sie angeben. Der Grund hierfür ist, dass eine Bereitstellung mehrere Dateien enthalten kann. Stellen Sie sicher, dass sich keine anderen JSON-Dateien im selben Verzeichnis wie azuredeploy.json befinden.

  1. Navigieren Sie in einem Terminal zu dem Pfad, in dem sich die Datei azuredeploy.json befindet. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  2. Öffnen Sie in Visual Studio Code das integrierte Terminal, indem Sie im oberen Menü auf Terminal>Neues Terminal klicken. Führen Sie im Terminal den folgenden Befehl aus, um PowerShell zu starten:

    pwsh
    

    Die angezeigte Ausgabe sollte ähnlich wie die folgende Ausgabe aussehen:

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

Analysieren der Vorlage

  1. Führen Sie Import-Module aus, um die Tests von überall aus ausführen zu können.

    Hinweis

    Ersetzen Sie path/to/arm-ttk/arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

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

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

  2. Führen Sie Test-AzTemplate mit dem Parameter -TemplatePath aus, der auf den Vorlagendateipfad (ohne den Dateinamen) verweist:

    Test-AzTemplate -TemplatePath .
    

    Im Terminal sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

     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)
    

    Beachten Sie in der Ausgabe, wie zwei Tests fehlschlagen: Resources Should Have Location (Ressourcen müssen Standort aufweisen) und Parameters Must Be Referenced (Parameter müssen referenziert werden). Das Präfix [-] gibt einen fehlgeschlagenen Test an.

    Öffnen Sie die Datei azuredeploy.json, um herauszufinden, was passiert ist. Diese sollte wie folgt aussehen:

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

    Bei den Tests treten aus zwei Gründen Fehler auf:

    • Der Parameter „location“ (Standort) wird nicht verwendet. Diese Fehlermeldung kann beispielsweise ein Hinweis darauf sein, dass Sie den Parameter in der Vergangenheit verwendet und dann vergessen haben, ihn zu bereinigen. Oder er sollte verwendet werden, aber Sie haben vergessen, den Code zu aktualisieren.
    • Die Eigenschaft „location“ ist auf die hartcodierte Zeichenfolge „westus“ festgelegt. Die Verwendung dieser Option wird nicht als bewährte Methode angesehen, da Sie den Standort einer Ressource bei der Bereitstellung über Eingabeparameter steuern können sollten.

Anwenden einer Korrektur auf die Vorlage

Wie werden die fehlgeschlagenen Tests korrigiert?

Wie der Test zeigt, könnten Sie versuchen, westus durch global zu ersetzen. Dadurch würde jedoch nur eines der Probleme behoben. Am besten wäre es, wenn Sie den Parameter location verwenden und den Standort für die Ressourcen auf diesen Wert festlegen.

Dafür gibt es zwei Gründe. Erstens kann der Parameter „location“ als Parameter für die Bereitstellung festgelegt werden, zweitens verfügt er mit resourceGroup().location als festgelegtem defaultValue über einen sinnvollen Fallbackwert, sollten Sie bei der Bereitstellung keinen Parameter location festlegen.

  1. Suchen Sie das erste Ressourcenelement im Array resources (Ressourcen), und ersetzen Sie den folgenden Inhalt:

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

    durch diesen Inhalt:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Führen Sie das Testtool noch ein Mal im integrierten Terminal aus, um sicherzustellen, dass das Problem behoben wurde:

    Test-AzTemplate -TemplatePath .
    

    Sie erhalten nun eine Ausgabe, in der alle Tests bestanden wurden:

    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)
    

Erfolg! Sie haben das Testtool ausgeführt, Fehler gefunden und diese korrigiert.

  1. Befolgen Sie die Anweisungen in Installieren von PowerShell unter macOS.

  2. Führen Sie pwsh im Terminal aus, um die Installation zu überprüfen:

    pwsh
    

    Die Ausgabe sieht ungefähr wie folgt aus:

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

Herunterladen des Testtoolkits

Das Testtoolkit befindet sich in einem GitHub-Repository. Wählen Sie eine der folgenden Aktionen aus:

Untersuchen des Testtoolkits

Sie haben soeben das Testtoolkit in ein Verzeichnis Ihrer Wahl heruntergeladen. Betrachten wir nun die Verzeichnisstruktur. (Stellen Sie sicher, dass Sie die Datei entpackt haben, wenn Sie sich entschieden haben, die ZIP-Datei herunterzuladen, anstatt den Befehl git clone zu verwenden.) Wenn Sie zum Verzeichnis des ARM-Testtoolkits navigieren, sollte die Verzeichnisstruktur wie folgt aussehen:

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

Das Testtoolkit befindet sich im Unterverzeichnis /arm-ttk.

Erstellen der Vorlagendatei

Wählen Sie ein Verzeichnis Ihrer Wahl aus, und erstellen Sie eine Datei namens azuredeploy.json.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

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

Notieren Sie sich den Speicherort der Vorlagendatei. Sie können den Befehl pwd im Terminal ausführen, um den Pfad auszugeben. Diesen Pfad verwenden Sie später beim Ausführen des Testtoolkits als Parameter.

Erkennen und Beheben von Problemen in Ihrer Vorlage durch Ausführen des Testtoolkits

Es wird empfohlen, Visual Studio Code und ein integriertes Terminal zu starten.

Sie führen das Testtoolkit für einen Pfad mit einer Bereitstellungsvorlage aus und beheben alle dabei erkannten Fehler durch Ändern der Vorlage.

Warnung

In dieser Übung überprüfen Sie eine Vorlagendatei. Das Testtoolkit überprüft alle Dateien in dem Verzeichnis, das Sie angeben. Der Grund hierfür ist, dass eine Bereitstellung mehrere Dateien enthalten kann. Stellen Sie sicher, dass sich keine anderen JSON-Dateien im selben Verzeichnis wie azuredeploy.json befinden.

  1. Navigieren Sie in einem Terminal zu dem Pfad, in dem sich die Datei azuredeploy.json befindet. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  2. Öffnen Sie in Visual Studio Code das integrierte Terminal, indem Sie im oberen Menü auf Terminal>Neues Terminal klicken. Führen Sie im Terminal den folgenden Befehl aus, um PowerShell zu starten:

    pwsh
    

    Die angezeigte Ausgabe sollte ähnlich wie die folgende Ausgabe aussehen:

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

Analysieren der Vorlage

  1. Führen Sie Import-Module aus, um die Tests von überall aus ausführen zu können.

    Hinweis

    Ersetzen Sie path/to/arm-ttk/arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

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

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

  2. Führen Sie Test-AzTemplate mit dem Parameter -TemplatePath aus, der auf den Vorlagendateipfad (ohne den Dateinamen) verweist:

    Test-AzTemplate -TemplatePath .
    

    Im Terminal sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

    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)
    

    Die vorhergehende Ausgabe zeigt, wie zwei Tests fehlschlagen: Resources Should Have Location (Ressourcen müssen Standort aufweisen) und Parameters Must Be Referenced (Parameter müssen referenziert werden). Das Präfix [-] gibt einen fehlgeschlagenen Test an.

    Öffnen Sie die Datei azuredeploy.json, um herauszufinden, was passiert ist. Diese sollte wie folgt aussehen:

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

    Bei den Tests treten aus zwei Gründen Fehler auf:

    • Der Parameter „location“ (Standort) wird nicht verwendet. Diese Fehlermeldung kann beispielsweise ein Hinweis darauf sein, dass Sie den Parameter in der Vergangenheit verwendet und dann vergessen haben, ihn zu bereinigen. Oder er sollte verwendet werden, aber Sie haben vergessen, den Code zu aktualisieren.
    • Die Eigenschaft „location“ ist auf die hartcodierte Zeichenfolge „westus“ festgelegt. Die Verwendung dieser Option wird nicht als bewährte Methode angesehen, da Sie den Standort einer Ressource bei der Bereitstellung über Eingabeparameter steuern können sollten.

Anwenden einer Korrektur auf die Vorlage

Wie werden die fehlgeschlagenen Tests korrigiert?

Wie der Test zeigt, könnten Sie versuchen, westus durch global zu ersetzen. Dadurch würde jedoch nur eines der Probleme behoben. Am besten wäre es, wenn Sie den Parameter location verwenden und den Standort für die Ressourcen auf diesen Wert festlegen.

Dafür gibt es zwei Gründe. Erstens kann der Parameter „location“ als Parameter für die Bereitstellung festgelegt werden, zweitens verfügt er mit resourceGroup().location als festgelegtem defaultValue über einen sinnvollen Fallbackwert, sollten Sie bei der Bereitstellung keinen Parameter location festlegen.

  1. Suchen Sie das erste Ressourcenelement im Array resources (Ressourcen), und ersetzen Sie den folgenden Inhalt:

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

    durch diesen Inhalt:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Führen Sie das Testtool noch ein Mal im integrierten Terminal aus, um sicherzustellen, dass das Problem behoben wurde:

    Test-AzTemplate -TemplatePath .
    

    Sie erhalten nun eine Ausgabe, in der alle Tests bestanden wurden:

    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)
    

Erfolg! Sie haben das Testtool ausgeführt, Fehler gefunden und diese korrigiert.

  1. Befolgen Sie die Anweisungen in Installieren von PowerShell unter Windows.
  2. Installieren Sie die PowerShell-Erweiterung in Visual Studio Code.

Herunterladen des Testtoolkits

Das Testtoolkit befindet sich in einem GitHub-Repository. Wählen Sie eine der folgenden Aktionen aus:

Untersuchen des Testtoolkits

Sie haben soeben das Testtoolkit in ein Verzeichnis Ihrer Wahl heruntergeladen. Betrachten wir nun die Verzeichnisstruktur. (Stellen Sie sicher, dass Sie die Datei entpackt haben, wenn Sie sich entschieden haben, die ZIP-Datei herunterzuladen, anstatt den Befehl git clone zu verwenden.) Wenn Sie zum Verzeichnis des ARM-Testtoolkits navigieren, sollte die Verzeichnisstruktur wie folgt aussehen:

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

Das Testtoolkit befindet sich im Unterverzeichnis \arm-ttk.

Erstellen der Vorlagendatei

Erstellen Sie eine Datei namens azuredeploy.json in einem Verzeichnis Ihrer Wahl, z. B. in C:\Temp.

Warnung

Stellen Sie sicher, dass das ausgewählte Verzeichnis ein leeres Verzeichnis ohne Unterverzeichnisse ist.

Fügen Sie den folgenden Inhalt ein:

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

Notieren Sie sich den Speicherort der Vorlagendatei. Diesen Verzeichnispfad (z. B. C:\Temp) verwenden Sie später beim Ausführen des Testtoolkits als Parameter.

Erkennen und Beheben von Problemen in Ihrer Vorlage durch Ausführen des Testtoolkits

Es wird empfohlen, Visual Studio Code und ein integriertes Terminal zu starten.

Sie führen das Testtoolkit für einen Pfad mit einer Bereitstellungsvorlage aus und beheben alle dabei erkannten Fehler durch Ändern der Vorlage.

Warnung

In dieser Übung überprüfen Sie eine Vorlagendatei. Das Testtoolkit überprüft alle Dateien in dem Verzeichnis, das Sie angeben. Der Grund hierfür ist, dass eine Bereitstellung mehrere Dateien enthalten kann. Stellen Sie sicher, dass sich keine anderen JSON-Dateien im selben Verzeichnis wie azuredeploy.json befinden.

  1. Navigieren Sie in einem Terminal zu dem Pfad, in dem sich die Datei azuredeploy.json befindet. Führen Sie den folgenden Befehl aus, um Visual Studio Code zu starten:

    code .
    

    Hinweis

    Öffnen Sie zunächst Visual Studio Code manuell und dann das Vorlagenverzeichnis, wenn sich Visual Studio Code nicht in diesem Pfad befindet.

  2. Öffnen Sie in Visual Studio Code die Befehlspalette, und wählen Sie den Befehl PowerShell: Show Integrated Console (PowerShell: integrierte Konsole anzeigen) aus.

Analysieren der Vorlage

  1. Führen Sie Import-Module im PowerShell-Terminal aus:

    Hinweis

    Ersetzen Sie path\to\arm-ttk\arm-ttk.psd1 vor dem Importieren des Moduls durch den Pfad zum heruntergeladenen Testtoolkit.

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

    Der Befehl oben verweist auf den Speicherort des Testtoolkit-Moduls.

    Tipp

    Wenn Sie das Tool heruntergeladen oder in das Verzeichnis Downloads geklont haben, sieht der Pfad in etwa wie folgt aus: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.

    Sie können das Tool jetzt verwenden. Solange Sie sich in derselben PowerShell-Sitzung befinden, ist es nicht erforderlich, den Importbefehl erneut auszuführen.

    Hinweis

    Wenn Sie eine neue PowerShell-Sitzung starten, müssen Sie den Import-Module-Befehl erneut ausführen.

  2. Führen Sie Test-AzTemplate im PowerShell-Terminal aus, um das Ausführen des Tests zu starten:

    Test-AzTemplate -TemplatePath .
    

    Im Terminal sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

    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
    

    Die vorherige Ausgabe zeigt, dass drei Tests fehlgeschlagen sind: Speicherort sollte nicht hartcodiert sein, Parameter müssen referenziert werden und Ressourcen sollten einen Speicherort haben. Das Präfix [-] gibt einen fehlgeschlagenen Test an.

    Öffnen Sie die Datei azuredeploy.json, um herauszufinden, was passiert ist. Diese sollte wie folgt aussehen:

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

    Bei den Tests treten aus zwei Gründen Fehler auf:

    • Der Parameter „location“ (Standort) wird nicht verwendet. Diese Fehlermeldung kann beispielsweise ein Hinweis darauf sein, dass Sie den Parameter in der Vergangenheit verwendet und dann vergessen haben, ihn zu bereinigen. Oder er sollte verwendet werden, aber Sie haben vergessen, den Code zu aktualisieren.
    • Die Eigenschaft „location“ ist auf die hartcodierte Zeichenfolge „westus“ festgelegt. Die Verwendung dieser Option wird nicht als bewährte Methode angesehen, da Sie den Standort einer Ressource bei der Bereitstellung über Eingabeparameter steuern können sollten.

Anwenden einer Korrektur auf die Vorlage

Wie werden die fehlgeschlagenen Tests korrigiert?

Wie der Test zeigt, könnten Sie versuchen, westus durch global zu ersetzen. Dadurch würde jedoch nur eines der Probleme behoben. Am besten wäre es, wenn Sie den Parameter location verwenden und den Standort für die Ressourcen auf diesen Wert festlegen.

Dafür gibt es zwei Gründe. Erstens kann der Parameter „location“ als Parameter für die Bereitstellung festgelegt werden, zweitens verfügt er mit resourceGroup().location als festgelegtem defaultValue über einen sinnvollen Fallbackwert, sollten Sie bei der Bereitstellung keinen Parameter location festlegen.

  1. Suchen Sie das erste Ressourcenelement im Array resources (Ressourcen), und ersetzen Sie den folgenden Inhalt:

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

    durch diesen Inhalt:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Führen Sie Test-AzTemplate aus, um das Testtool noch mal auszuführen:

    Test-AzTemplate -TemplatePath .
    

    Sie erhalten nun eine Ausgabe, in der alle Tests bestanden wurden:

    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   
    

Erfolg! Sie haben das Testtool ausgeführt, Fehler gefunden und diese korrigiert.

Nun können Sie die Tests für Ihre Vorlage ausführen.