Alıştırma - ARM Şablonu Test Araç Seti'ni kullanarak şablonunuz için iyi uygulamalar uygulama

Tamamlandı

Tailwind Traders şirketinin geliştirme ekibinde çalışıyorsunuz. Görevlerinizden biri, buluta kaynak dağıtmak ve dağıtılan kaynakları yönetmek için Azure Resource Manager (ARM) şablonu yazmak. Kaynaklar dağıtılmadan önce şablonların bazı ses uygulamalarını izlediğinden emin olmak istiyorsunuz. Şablonlarınızı analiz etmeye yardımcı olması için ARM Şablonu Test Araç Seti'ni kullanmayı seçtiniz, böylece sorunları düzeltebilirsiniz.

Test ortamınızı ayarlama

Araç bir PowerShell modülüdür. Bunu çalıştırmak için aşağıdaki adımları izleyin:

  • PowerShell modülünü yükleyin. Bu görev Linux, Mac veya Windows’da olmanıza bağlı olarak farklı şekilde yapılır.
  • Modülü indirin. Modül bir GitHub deposunda barındırılır. Betiği oradan indirebilir veya bir git clone komutuyla getirebilirsiniz.
  • Modülü içeri aktarın. Bu adım, ARM-TTK komutlarını kullanılabilir hale getirecek bir PowerShell oturumuna girdiğiniz tek satırlık bir yönergedir.

PowerShell yükleme

  1. PowerShell'i yüklemek için PowerShell'i Linux'a yükleme başlığı altındaki yönergeleri izleyin.

  2. Yüklemeyi doğrulamak için terminalde pwsh komutunu çalıştırın:

    pwsh
    

    Çıkışınız aşağıdakine benzer:

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

Test araç setini indirme

Test araç seti bir GitHub deposunda bulunur. Aşağıdaki eylemlerden birini seçin:

Test araç setini inceleme

Önceki adımda test araç setini istediğiniz dizine indirdiniz. Dizin yapınızı inceleyelim. (Komutunu çalıştırmak yerine .zip dosyasını indirmeyi tercih ettiyseniz dosyanın sıkıştırmasını açtığınızdan git clone emin olun.) ARM test araç setinin dizinine giderseniz aşağıdakine benzer bir dizin yapınız olmalıdır:

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

Test aracı /arm-ttk alt dizininde bulunur.

Şablon dosyasını oluşturma

Bir dizin seçip içinde azuredeploy.json adlı bir dosya oluşturun.

Uyarı

Seçtiğiniz dizinin boş olduğundan ve içinde alt dizin bulunmadığından emin olun.

Aşağıdaki içeriği ekleyin:

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

Şablon dosyanızın konumunu not alın. Yolu yazdırmak için terminalde pwd komutunu çalıştırabilirsiniz. Bu yolu daha sonra test araç setini çalıştırırken parametre olarak kullanacaksınız.

Test araç setini çalıştırarak şablonunuzla ilgili sorunları tespit etme ve düzeltme

Visual Studio Code ile bir tümleşik terminal başlatmanız önerilir.

Test araç setini dağıtım şablonu içeren yolda çalıştıracak ve şablonu değiştirerek tespit edilen hataları düzelteceksiniz.

Uyarı

Bu alıştırmada tek bir şablon dosyası tarayacaksınız. Test araç seti, belirttiğiniz dizinin altındaki tüm dosyaları tarar. Dağıtım kapsamında çok sayıda dosya bulunabileceğinden bu şekilde tasarlanmıştır. azuredeploy.json dosyasının bulunduğu dizinde başka JSON dosyası bulunmadığından emin olun.

  1. Terminalde azuredeploy.json dosyanızın bulunduğu yola gidin. Visual Studio Code'u başlatmak için aşağıdaki komutu çalıştırın:

    code .
    

    Dekont

    Visual Studio Code uygulamanız yola eklenmemişse uygulamayı el ile başlatın ve şablon dizinini açın.

  2. Visual Studio Code’da üst taraftaki menüden Terminal>Yeni Terminal’i seçerek tümleşik terminali açın. Terminalde aşağıdaki komutu çalıştırarak bir PowerShell kabuğu başlatın:

    pwsh
    

    Şuna benzer bir çıkış görürsünüz:

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

Şablonu analiz etme

  1. Testleri her yerden çalıştırabilmek için Import-Module komutunu kullanın.

    Dekont

    Modülü içeri aktarmadan önce path/to/arm-ttk/arm-ttk.psd1 ifadesini indirilen test araç setinin yoluyla değiştirin.

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

    Bahşiş

    Aracı İndirmeler dizininize indirdiyseniz veya kopyaladıysanız yol şuna benzer olacaktır: /Users/user>/<Downloads/arm-ttk/arm-ttk/arm-ttk/arm-ttk.psd1.

    Şimdi aracı kullanmaya hazırsınız. Aynı PowerShell oturumunu kullanmaya devam ettiğiniz sürece import komutunu yeniden çalıştırmanıza gerek yoktur.

  2. Şablon dosya yolunuzun konumunu gösteren parametresiyle -TemplatePath (dosya adı hariç) komutunu çalıştırınTest-AzTemplate:

    Test-AzTemplate -TemplatePath .
    

    Terminalde aşağıdakine benzer bir çıkış görürsünüz:

     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)
    

    Çıktıda, iki testin nasıl başarısız olduğunu not edin: Kaynaklara Konum Ve Parametrelere Başvurulmalıdır. Ön ek [-] başarısız bir testi gösterir.

    Neler olduğunu anlamak için azuredeploy.json dosyasını açın. Şu şekilde görünmelidir:

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

    Testlerin başarısız olmasının iki farklı nedeni vardır:

    • Konum parametresi kullanılmamıştır. Bu hata iletisi, parametreyi önceden kullanıp temizlemeyi unutmuş olduğumuzu gösterebilir. Belki de kullanılması gerekirken kodumuzu güncelleştirmeyi unutmuş olabiliriz.
    • Konum özelliği, "westus" dizesi olarak sabit bir şekilde kodlanmış. Dağıtım sırasında kaynakların konumlarını giriş parametreleriyle denetleyebilmek isteyeceğiniz için bu seçeneğin kullanılması iyi bir yöntem olarak kabul edilmez.

Şablona düzeltme uygulama

Başarısız testleri nasıl düzeltiriz?

Testte belirtildiği gibi westus yerine global metnini kullanabiliriz. Ancak bu, sorunlardan yalnızca birini düzeltir. Çoğu durumda location parametresini kullanıp kaynak konumunu bu değere göre ayarlamanız önerilir.

Bunun iki farklı nedeni vardır. Location parametresi yalnızca dağıtım parametresi olarak ayarlanamaz, aynı zamanda dağıtımı çalıştırırken location parametresini ayarlamayı atlarsanız defaultValue olarak resourceGroup().location olarak ayarlanmasının makul geri dönüşüne de sahiptir.

  1. resources dizisindeki ilk kaynak öğesini bulun ve aşağıdaki içeriği değiştirin:

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

    Yeni içerik:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Tümleşik terminalde test aracını bir kez daha çalıştırarak düzeltme işlemini doğrulayın:

    Test-AzTemplate -TemplatePath .
    

    Yeni çıkışta tüm testlerin başarılı olduğu gösterilir:

    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)
    

Başarılı! Test aracını çalıştırdınız, hataları tespit ettiniz ve düzelttiniz.

  1. macOS’ta PowerShell yükleme yönergelerini izleyin.

  2. Yüklemeyi doğrulamak için terminalde pwsh komutunu çalıştırın:

    pwsh
    

    Çıkışınız aşağıdakine benzer:

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

Test araç setini indirme

Test araç seti bir GitHub deposunda bulunur. Aşağıdaki eylemlerden birini seçin:

Test araç setini inceleme

Önceki adımda test araç setini istediğiniz dizine indirdiniz. Dizin yapınızı inceleyelim. (Komutunu çalıştırmak yerine .zip dosyasını indirmeyi tercih ettiyseniz dosyanın sıkıştırmasını açtığınızdan git clone emin olun.) ARM test araç setinin dizinine giderseniz aşağıdakine benzer bir dizin yapınız olmalıdır:

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

Test aracı /arm-ttk alt dizininde bulunur.

Şablon dosyasını oluşturma

Bir dizin seçip içinde azuredeploy.json adlı bir dosya oluşturun.

Uyarı

Seçtiğiniz dizinin boş olduğundan ve içinde alt dizin bulunmadığından emin olun.

Aşağıdaki içeriği ekleyin:

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

Şablon dosyanızın konumunu not alın. Yolu yazdırmak için terminalde pwd komutunu çalıştırabilirsiniz. Bu yolu daha sonra test araç setini çalıştırırken parametre olarak kullanacaksınız.

Test araç setini çalıştırarak şablonunuzla ilgili sorunları tespit etme ve düzeltme

Visual Studio Code ile bir tümleşik terminal başlatmanız önerilir.

Test araç setini dağıtım şablonu içeren yolda çalıştıracak ve şablonu değiştirerek tespit edilen hataları düzelteceksiniz.

Uyarı

Bu alıştırmada tek bir şablon dosyası tarayacaksınız. Test araç seti, belirttiğiniz dizinin altındaki tüm dosyaları tarar. Dağıtım kapsamında çok sayıda dosya bulunabileceğinden bu şekilde tasarlanmıştır. azuredeploy.json dosyasının bulunduğu dizinde başka JSON dosyası bulunmadığından emin olun.

  1. Terminalde azuredeploy.json dosyanızın bulunduğu yola gidin. Visual Studio Code'u başlatmak için aşağıdaki komutu çalıştırın:

    code .
    

    Dekont

    Visual Studio Code uygulamanız yola eklenmemişse uygulamayı el ile başlatın ve şablon dizinini açın.

  2. Visual Studio Code’da üst taraftaki menüden Terminal>Yeni Terminal’i seçerek tümleşik terminali açın. Terminalde aşağıdaki komutu çalıştırarak bir PowerShell kabuğu başlatın:

    pwsh
    

    Şuna benzer bir çıkış görürsünüz:

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

Şablonu analiz etme

  1. Testleri her yerden çalıştırabilmek için Import-Module komutunu kullanın.

    Dekont

    Modülü içeri aktarmadan önce path/to/arm-ttk/arm-ttk.psd1 ifadesini indirilen test araç setinin yoluyla değiştirin.

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

    Bahşiş

    Aracı İndirmeler dizininize indirdiyseniz veya kopyaladıysanız yol şuna benzer olacaktır: /Users/user>/<Downloads/arm-ttk/arm-ttk/arm-ttk/arm-ttk.psd1.

    Şimdi aracı kullanmaya hazırsınız. Aynı PowerShell oturumunu kullanmaya devam ettiğiniz sürece import komutunu yeniden çalıştırmanıza gerek yoktur.

  2. Şablon dosya yolunuzun konumunu gösteren parametresiyle -TemplatePath (dosya adı hariç) komutunu çalıştırınTest-AzTemplate:

    Test-AzTemplate -TemplatePath .
    

    Terminalde aşağıdakine benzer bir çıkış görürsünüz:

    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)
    

    Yukarıdaki çıktıda iki testin nasıl başarısız olduğu gösterilmektedir: Kaynaklara Konum Verilmelidir ve Parametrelere Başvurulmalıdır. Ön ek [-] başarısız bir testi gösterir.

    Neler olduğunu anlamak için azuredeploy.json dosyasını açın. Şu şekilde görünmelidir:

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

    Testlerin başarısız olmasının iki farklı nedeni vardır:

    • Konum parametresi kullanılmamıştır. Bu hata iletisi, parametreyi önceden kullanıp temizlemeyi unutmuş olduğumuzu gösterebilir. Belki de kullanılması gerekirken kodumuzu güncelleştirmeyi unutmuş olabiliriz.
    • Konum özelliği, "westus" dizesi olarak sabit bir şekilde kodlanmış. Dağıtım sırasında kaynakların konumlarını giriş parametreleriyle denetleyebilmek isteyeceğiniz için bu seçeneğin kullanılması iyi bir yöntem olarak kabul edilmez.

Şablona düzeltme uygulama

Başarısız testleri nasıl düzeltiriz?

Testte belirtildiği gibi westus yerine global metnini kullanabiliriz. Ancak bu, sorunlardan yalnızca birini düzeltir. Çoğu durumda location parametresini kullanıp kaynak konumunu bu değere göre ayarlamanız önerilir.

Bunun iki farklı nedeni vardır. Location parametresi yalnızca dağıtım parametresi olarak ayarlanamaz, aynı zamanda dağıtımı çalıştırırken location parametresini ayarlamayı atlarsanız defaultValue olarak resourceGroup().location olarak ayarlanmasının makul geri dönüşüne de sahiptir.

  1. resources dizisindeki ilk kaynak öğesini bulun ve aşağıdaki içeriği değiştirin:

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

    Yeni içerik:

    "resources": [{
      "location": "[parameters('location')]"
    }]
    
  2. Tümleşik terminalde test aracını bir kez daha çalıştırarak düzeltme işlemini doğrulayın:

    Test-AzTemplate -TemplatePath .
    

    Yeni çıkışta tüm testlerin başarılı olduğu gösterilir:

    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)
    

Başarılı! Test aracını çalıştırdınız, hataları tespit ettiniz ve düzelttiniz.

  1. Windows’da PowerShell yükleme yönergelerini izleyin.
  2. Visual Studio Code’da PowerShell uzantısını yükleyin.

Test araç setini indirme

Test araç seti bir GitHub deposunda bulunur. Aşağıdaki eylemlerden birini seçin:

Test araç setini inceleme

Önceki adımda test araç setini istediğiniz dizine indirdiniz. Dizin yapınızı inceleyelim. (Komutunu çalıştırmak yerine .zip dosyasını indirmeyi tercih ettiyseniz dosyanın sıkıştırmasını açtığınızdan git clone emin olun.) ARM test araç setinin dizinine giderseniz aşağıdakine benzer bir dizin yapınız olmalıdır:

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

Test aracı \arm-ttk alt dizininde bulunur.

Şablon dosyasını oluşturma

Seçtiğiniz dizinde (C:\Temp gibi) azuredeploy.json adlı bir dosya oluşturun.

Uyarı

Seçtiğiniz dizinin boş olduğundan ve içinde alt dizin bulunmadığından emin olun.

Aşağıdaki içeriği ekleyin:

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

Şablon dosyanızın konumunu not alın. Bu dizin yolunu (örneğin, C:\Temp) daha sonra test araç setini çalıştırırken parametre olarak kullanacaksınız.

Test araç setini çalıştırarak şablonunuzla ilgili sorunları tespit etme ve düzeltme

Visual Studio Code ile bir tümleşik terminal başlatmanız önerilir.

Test araç setini dağıtım şablonu içeren yolda çalıştıracak ve şablonu değiştirerek tespit edilen hataları düzelteceksiniz.

Uyarı

Bu alıştırmada tek bir şablon dosyası tarayacaksınız. Test araç seti, belirttiğiniz dizinin altındaki tüm dosyaları tarar. Dağıtım kapsamında çok sayıda dosya bulunabileceğinden bu şekilde tasarlanmıştır. azuredeploy.json dosyasının bulunduğu dizinde başka JSON dosyası bulunmadığından emin olun.

  1. Terminalde azuredeploy.json dosyanızın bulunduğu yola gidin. Visual Studio Code'u başlatmak için aşağıdaki komutu çalıştırın:

    code .
    

    Dekont

    Visual Studio Code uygulamanız yola eklenmemişse uygulamayı el ile başlatın ve şablon dizinini açın.

  2. Visual Studio Code'dan komut paletini açın ve PowerShell: Tümleşik Konsolu Göster komutunu seçin.

Şablonu analiz etme

  1. PowerShell terminalinde Import-Module komutunu çalıştırın:

    Dekont

    Modülü içeri aktarmadan önce path\to\arm-ttk\arm-ttk.psd1 ifadesini indirilen test araç setinin yoluyla değiştirin.

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

    Yukarıdaki komut, test araç seti modülünün konumunu işaret eder.

    Bahşiş

    Aracı İndirmeler dizininize indirdiyseniz veya kopyaladıysanız, yol şuna benzer olacaktır: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk\arm-ttk.psd1.

    Şimdi aracı kullanmaya hazırsınız. Aynı PowerShell oturumunu kullanmaya devam ettiğiniz sürece import komutunu yeniden çalıştırmanıza gerek yoktur.

    Dekont

    Yeni bir PowerShell oturumu başlatırsanız komutu yeniden çalıştırmanız Import-Module gerekir.

  2. Test çalıştırması başlatmak için PowerShell terminalinde Test-AzTemplate komutunu çalıştırın:

    Test-AzTemplate -TemplatePath .
    

    Terminalde aşağıdakine benzer bir çıkış görürsünüz:

    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
    

    Yukarıdaki çıkış üç testin nasıl başarısız olduğunu gösterir: Konum Sabit Kodlanmamalıdır, Parametrelere Başvurulmalıdır ve Kaynaklara Konum Olmalıdır. Ön ek [-] başarısız bir testi gösterir.

    Neler olduğunu anlamak için azuredeploy.json dosyasını açın. Şu şekilde görünmelidir:

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

    Testlerin başarısız olmasının iki farklı nedeni vardır:

    • Konum parametresi kullanılmamıştır. Bu hata iletisi, parametreyi önceden kullanıp temizlemeyi unutmuş olduğumuzu gösterebilir. Belki de kullanılması gerekirken kodumuzu güncelleştirmeyi unutmuş olabiliriz.
    • Konum özelliği, "westus" dizesi olarak sabit bir şekilde kodlanmış. Dağıtım sırasında kaynakların konumlarını giriş parametreleriyle denetleyebilmek isteyeceğiniz için bu seçeneğin kullanılması iyi bir yöntem olarak kabul edilmez.

Şablona düzeltme uygulama

Başarısız testleri nasıl düzeltiriz?

Testte belirtildiği gibi westus yerine global metnini kullanabiliriz. Ancak bu, sorunlardan yalnızca birini düzeltir. Çoğu durumda location parametresini kullanıp kaynak konumunu bu değere göre ayarlamanız önerilir.

Bunun iki farklı nedeni vardır. Location parametresi yalnızca dağıtım parametresi olarak ayarlanamaz, aynı zamanda dağıtımı çalıştırırken location parametresini ayarlamayı atlarsanız defaultValue olarak resourceGroup().location olarak ayarlanmasının makul geri dönüşüne de sahiptir.

  1. resources dizisindeki ilk kaynak öğesini bulun ve aşağıdaki içeriği değiştirin:

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

    Yeni içerik:

    "resources": [{
       "location": "[parameters('location')]"
    }]
    
  2. Test-AzTemplate komutunu çalıştırarak test aracını bir kez daha çalıştırın:

    Test-AzTemplate -TemplatePath .
    

    Yeni çıkışta tüm testlerin başarılı olduğu gösterilir:

    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   
    

Başarılı! Test aracını çalıştırdınız, hataları tespit ettiniz ve düzelttiniz.

Şimdi şablonunuzda test çalıştırmaya hazırsınız.