Latihan - Terapkan praktik yang baik ke templat Anda dengan menggunakan Toolkit Pengujian Template ARM
Anda merupakan bagian dari tim pengembangan di perusahaan Tailwind Traders. Sebagai bagian dari pekerjaan tersebut, Anda perlu membuat template Azure Resource Manager (ARM) untuk menerapkan dan mengelola sumber daya di cloud. Anda ingin memastikan bahwa template mengikuti beberapa praktik yang aman sebelum sumber daya diterapkan. Anda memilih untuk menggunakan Toolkit Pengujian Templat ARM untuk membantu menganalisis templat, sehingga Anda dapat mengatasi masalah apa pun.
Mempersiapkan lingkungan pengujian Anda
Alat tersebut adalah modul PowerShell. Agar dapat menjalankannya, gunakan langkah-langkah berikut:
- Instal modul PowerShell. Tugas ini dilakukan secara berbeda tergantung pada apakah Anda berada di Linux, Mac, atau Windows.
-
Unduh modul. Modul ini di-hosting di repositori GitHub. Anda dapat mengunduhnya dari sana atau mengambilnya melalui
git cloneperintah. - Impor modul. Langkah ini hanyalah instruksi satu baris yang Anda masukkan ke dalam sesi PowerShell, yang akan membuat perintah ARM-TTK tersedia.
Instal PowerShell
Untuk menginstal PowerShell, ikuti instruksi dalam Menginstal PowerShell di Linux.
Jalankan
pwshdi terminal, untuk memverifikasi instalasi:pwshOutputnya menyerupai ini:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Unduh toolkit pengujian
Toolkit pengujian terletak di repo GitHub. Pilih salah satu tindakan berikut:
Jalankan
git cloneuntuk mengkloning repo:git clone https://github.com/Azure/arm-ttk.gitDari browser Anda, unduh repositori sebagai file .zip Anda.
Memeriksa toolkit pengujian
Anda baru saja mengunduh toolkit pengujian ke direktori yang Anda pilih. Mari kita lihat struktur direktori Anda. (Pastikan Anda telah membuka file .zip jika Anda memilih untuk mengunduh file .zip alih-alih menjalankan perintah git clone.) Anda harus memiliki struktur direktori yang terlihat seperti yang berikut jika Anda pergi ke direktori toolkit uji ARM:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Toolkit uji berada di subdirektori / arm-ttk.
Membuat file template
Pilih direktori dan buat file yang disebut azuredeploy.json.
Peringatan
Pastikan bahwa direktori yang dipilih kosong tanpa subdirektori.
Berikan konten berikut:
{
"$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"
}]
}
Perhatikan lokasi file template Anda. Anda dapat menjalankan perintah pwd di terminal untuk menghasilkan jalur. Anda akan menggunakan jalur ini sebagai parameter saat menjalankan toolkit pengujian.
Mendeteksi dan memperbaiki masalah di template Anda dengan menjalankan toolkit pengujian
Kami menyarankan agar Anda memulai Visual Studio Code dan terminal terintegrasi.
Anda akan menjalankan toolkit pengujian pada jalur yang berisi template penyebaran dan memperbaiki kesalahan yang dideteksinya dengan mengubah template.
Peringatan
Dalam latihan ini, Anda memindai satu file template. Toolkit pengujian memindai semua file di bawah direktori yang Anda tentukan. Itu melakukannya karena penyebaran dapat berisi beberapa file. Pastikan bahwa tidak ada file JSON di bawah direktori tempat azuredeploy.jsdi mana anda berada.
Di terminal, pergi ke jalur di mana azuredeploy.jspada file berada. Jalankan perintah berikut untuk memulai Visual Studio Code:
code .Catatan
Buka Visual Studio Code secara manual dan buka direktori template jika Visual Studio Code tidak ada di jalur.
Dari Visual Studio Code, buka terminal terintegrasi dengan memilih Terminal>Terminal Baru dari menu atas. Jalankan perintah berikut ini di terminal untuk memulai shell PowerShell:
pwshAnda melihat output yang terlihat mirip dengan yang satu ini:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Menganalisis template
Jalankan
Import-Moduleuntuk dapat menjalankan tes dari mana saja.Catatan
Sebelum Anda mengimpor modul, ganti path/to/arm-ttk/arm-ttk.psd1 dengan jalur ke toolkit pengujian yang diunduh.
Import-Module path/to/arm-ttk/arm-ttk.psd1Petunjuk / Saran
Jika Anda mengunduh atau mengkloning alat ke direktori Unduhan, jalurnya akan terlihat seperti ini: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Anda sekarang siap untuk menggunakan alat ini. Selama Anda berada dalam sesi PowerShell yang sama, Anda tidak perlu menjalankan perintah impor lagi.
Jalankan
Test-AzTemplatedengan parameter-TemplatePathyang menunjuk ke lokasi jalur file template Anda (tidak termasuk nama file):Test-AzTemplate -TemplatePath .Anda melihat output yang mirip dengan yang berikut ini di terminal:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)Dalam output, perhatikan bagaimana dua pengujian gagal: Sumber Daya Harus Memiliki Lokasi dan Parameter Harus Dirujuk. Awalan
[-]menunjukkan pengujian yang gagal.Untuk memahami apa yang terjadi, buka file azuredeploy.json. Harusnya akan terlihat seperti ini:
{ "$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" }] }Tes gagal karena dua alasan:
- Parameter lokasi tidak digunakan. Pesan kesalahan ini mungkin, misalnya, menunjukkan bahwa kami menggunakan parameter di masa lalu dan lupa membersihkannya. Atau mungkin itu harus digunakan tetapi kami lupa untuk memperbarui kode kami.
- Properti lokasi diatur ke string westus dengan hardcode. Menggunakan opsi ini tidak dianggap sebagai praktik yang baik karena Anda ingin dapat mengontrol lokasi sumber daya dengan parameter input saat Anda menyebarkan.
Menerapkan perbaikan pada template
Bagaimana kita memperbaiki tes yang gagal?
Seperti yang ditunjukkan oleh tes, kita bisa mencoba mengganti westus dengan teks global. Namun, itu hanya akan memperbaiki salah satu masalah. Kemungkinan besar, kami ingin menggunakan parameter lokasi dan mengatur lokasi sumber daya ke nilai tersebut.
Alasannya dua kali lipat. Parameter lokasi tidak hanya dapat ditetapkan sebagai parameter untuk penyebaran, tetapi juga memiliki fallback yang proporsional untuk ditetapkan ke resourceGroup().location sebagai defaultValue jika Anda menghilangkan pengaturan parameter lokasi saat menjalankan penyebaran.
Temukan item sumber daya pertama dalam array sumber daya dan ganti konten berikut:
"resources": [{ "location": "westus" }]dengan konten ini:
"resources": [{ "location": "[parameters('location')]" }]Jalankan alat uji di terminal terintegrasi sekali lagi, untuk memverifikasi perbaikan:
Test-AzTemplate -TemplatePath .Anda sekarang mendapatkan output di mana semua pengujian lulus:
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)
Berhasil! Anda telah menjalankan alat uji, menemukan kesalahan, dan memperbaikinya.
Ikuti petunjuk di Memasang PowerShell di macOS.
Jalankan
pwshdi terminal, untuk memverifikasi instalasi:pwshOutputnya menyerupai ini:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Unduh toolkit pengujian
Toolkit pengujian terletak di repo GitHub. Pilih salah satu tindakan berikut:
Jalankan
git cloneuntuk mengkloning repo:git clone https://github.com/Azure/arm-ttk.gitDari browser Anda, unduh repositori sebagai file .zip Anda.
Memeriksa toolkit pengujian
Anda baru saja mengunduh toolkit pengujian ke direktori yang Anda pilih. Mari kita lihat struktur direktori Anda. (Pastikan Anda telah membuka file .zip jika Anda memilih untuk mengunduh file .zip alih-alih menjalankan perintah git clone.) Anda harus memiliki struktur direktori yang terlihat seperti yang berikut jika Anda pergi ke direktori toolkit uji ARM:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Toolkit uji berada di subdirektori / arm-ttk.
Membuat file template
Pilih direktori dan buat file yang disebut azuredeploy.json.
Peringatan
Pastikan bahwa direktori yang dipilih kosong tanpa subdirektori.
Berikan konten berikut:
{
"$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"
}]
}
Perhatikan lokasi file template Anda. Anda dapat menjalankan perintah pwd di terminal untuk menghasilkan jalur. Anda akan menggunakan jalur ini sebagai parameter saat menjalankan toolkit pengujian.
Mendeteksi dan memperbaiki masalah di template Anda dengan menjalankan toolkit pengujian
Kami menyarankan agar Anda memulai Visual Studio Code dan terminal terintegrasi.
Anda akan menjalankan toolkit pengujian pada jalur yang berisi template penyebaran dan memperbaiki kesalahan yang dideteksinya dengan mengubah template.
Peringatan
Dalam latihan ini, Anda memindai satu file template. Toolkit pengujian memindai semua file di bawah direktori yang Anda tentukan. Itu melakukannya karena penyebaran dapat berisi beberapa file. Pastikan bahwa tidak ada file JSON di bawah direktori tempat azuredeploy.jsdi mana anda berada.
Di terminal, pergi ke jalur di mana azuredeploy.jspada file berada. Jalankan perintah berikut untuk memulai Visual Studio Code:
code .Catatan
Buka Visual Studio Code secara manual dan buka direktori template jika Visual Studio Code tidak ada di jalur.
Dari Visual Studio Code, buka terminal terintegrasi dengan memilih Terminal>Terminal Baru dari menu atas. Jalankan perintah berikut ini di terminal untuk memulai shell PowerShell:
pwshAnda melihat output yang terlihat mirip dengan yang satu ini:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Menganalisis template
Jalankan
Import-Moduleuntuk dapat menjalankan tes dari mana saja.Catatan
Sebelum Anda mengimpor modul, ganti path/to/arm-ttk/arm-ttk.psd1 dengan jalur ke toolkit pengujian yang diunduh.
Import-Module path/to/arm-ttk/arm-ttk.psd1Petunjuk / Saran
Jika Anda mengunduh atau mengkloning alat ke direktori Unduhan, jalurnya akan terlihat seperti ini: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Anda sekarang siap untuk menggunakan alat ini. Selama Anda berada dalam sesi PowerShell yang sama, Anda tidak perlu menjalankan perintah impor lagi.
Jalankan
Test-AzTemplatedengan parameter-TemplatePathyang menunjuk ke lokasi jalur file template Anda (tidak termasuk nama file):Test-AzTemplate -TemplatePath .Anda melihat output yang mirip dengan yang berikut ini di terminal:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)Keluaran sebelumnya menunjukkan bagaimana dua pengujian gagal: Sumber Daya Harus Memiliki Lokasi dan Parameter Harus Direferensikan. Awalan
[-]menunjukkan pengujian yang gagal.Untuk memahami apa yang terjadi, buka file azuredeploy.json. Harusnya akan terlihat seperti ini:
{ "$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" }] }Tes gagal karena dua alasan:
- Parameter lokasi tidak digunakan. Pesan kesalahan ini mungkin, misalnya, menunjukkan bahwa kami menggunakan parameter di masa lalu dan lupa membersihkannya. Atau mungkin itu harus digunakan tetapi kami lupa untuk memperbarui kode kami.
- Properti lokasi diatur ke string westus dengan hardcode. Menggunakan opsi ini tidak dianggap sebagai praktik yang baik karena Anda ingin dapat mengontrol lokasi sumber daya dengan parameter input saat Anda menyebarkan.
Menerapkan perbaikan pada template
Bagaimana kita memperbaiki tes yang gagal?
Seperti yang ditunjukkan oleh tes, kita bisa mencoba mengganti westus dengan teks global. Namun, itu hanya akan memperbaiki salah satu masalah. Kemungkinan besar, kami ingin menggunakan parameter lokasi dan mengatur lokasi sumber daya ke nilai tersebut.
Alasannya dua kali lipat. Parameter lokasi tidak hanya dapat ditetapkan sebagai parameter untuk penyebaran, tetapi juga memiliki fallback yang proporsional untuk ditetapkan ke resourceGroup().location sebagai defaultValue jika Anda menghilangkan pengaturan parameter lokasi saat menjalankan penyebaran.
Temukan item sumber daya pertama dalam array sumber daya dan ganti konten berikut:
"resources": [{ "location": "westus" }]dengan konten ini:
"resources": [{ "location": "[parameters('location')]" }]Jalankan alat uji di terminal terintegrasi sekali lagi, untuk memverifikasi perbaikan:
Test-AzTemplate -TemplatePath .Anda sekarang mendapatkan output di mana semua pengujian lulus:
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)
Berhasil! Anda telah menjalankan alat uji, menemukan kesalahan, dan memperbaikinya.
- Ikuti instruksi dalam Menginstal PowerShell di Windows.
- Dari Visual Studio Code, instal ekstensi PowerShell.
Unduh toolkit pengujian
Toolkit pengujian terletak di repo GitHub. Pilih salah satu tindakan berikut:
Jalankan
git cloneuntuk mengkloning repo:git clone https://github.com/Azure/arm-ttk.gitDari browser Anda, unduh repositori sebagai file .zip Anda.
Memeriksa toolkit pengujian
Anda baru saja mengunduh toolkit pengujian ke direktori yang Anda pilih. Mari kita lihat struktur direktori Anda. (Pastikan Anda telah membuka file .zip jika Anda memilih untuk mengunduh file .zip alih-alih menjalankan perintah git clone.) Anda harus memiliki struktur direktori yang terlihat seperti yang berikut jika Anda pergi ke direktori toolkit uji ARM:
-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Toolkit uji berada di subdirektori / lengan-ttk.
Membuat file template
Buat file yang azuredeploy.jsdi dalam direktori yang Anda pilih, seperti C:\Temp.
Peringatan
Pastikan bahwa direktori yang dipilih kosong tanpa subdirektori.
Berikan konten berikut:
{
"$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"
}]
}
Perhatikan lokasi file template Anda. Anda akan menggunakan jalur direktori ini (misalnya, C:\Temp) nanti sebagai parameter saat menjalankan toolkit pengujian.
Mendeteksi dan memperbaiki masalah di template Anda dengan menjalankan toolkit pengujian
Kami menyarankan agar Anda memulai Visual Studio Code dan terminal terintegrasi.
Anda akan menjalankan toolkit pengujian pada jalur yang berisi template penyebaran dan memperbaiki kesalahan yang dideteksinya dengan mengubah template.
Peringatan
Dalam latihan ini, Anda memindai satu file template. Toolkit pengujian memindai semua file di bawah direktori yang Anda tentukan. Itu melakukannya karena penyebaran dapat berisi beberapa file. Pastikan bahwa tidak ada file JSON di bawah direktori tempat azuredeploy.jsdi mana anda berada.
Di terminal, pergi ke jalur di mana azuredeploy.jspada file berada. Jalankan perintah berikut untuk memulai Visual Studio Code:
code .Catatan
Buka Visual Studio Code secara manual dan buka direktori template jika Visual Studio Code tidak ada di jalur.
Dari Visual Studio Code, munculkan palet perintah dan pilih perintah PowerShell: Tampilkan Konsol Terintegrasi.
Menganalisis template
Jalankan
Import-Moduledi terminal PowerShell:Catatan
Sebelum Anda mengimpor modul, ganti path/to/arm-ttk/arm-ttk.psd1 dengan jalur ke toolkit pengujian yang diunduh.
Import-Module path\to\arm-ttk\arm-ttk.psd1Perintah sebelumnya akan menunjukkan posisi modul toolkit pengujian.
Petunjuk / Saran
Jika Anda mengunduh atau mengkloning alat ke direktori Unduhan, jalurnya akan terlihat seperti ini: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Anda sekarang siap untuk menggunakan alat ini. Selama Anda berada dalam sesi PowerShell yang sama, Anda tidak perlu menjalankan perintah impor lagi.
Catatan
Jika Anda memulai sesi PowerShell baru, Anda harus menjalankan perintah
Import-Modulelagi.Jalankan
Test-AzTemplatedi terminal PowerShell, untuk memulai uji coba:Test-AzTemplate -TemplatePath .Anda melihat output yang mirip dengan yang berikut ini di terminal:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (16 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (6 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (10 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (7 ms) artifacts parameter [+] artifacts parameter (5 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (7 ms) DependsOn Best Practices [+] DependsOn Best Practices (6 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (5 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (5 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (4 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (4 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (6 ms) deploymentTemplate [-] Location Should Not Be Hardcoded (13 ms) Location value of 'westus' on resource '' must be an expression or 'global'. Line: 14, Column: 9 ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (5 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (5 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (5 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (9 ms) deploymentTemplate [-] Parameters Must Be Referenced (6 ms) Unreferenced parameter: location Line: 5, Column: 9 Password params must be secure [+] Password params must be secure (11 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (5 ms) ResourceIds should not contain [+] ResourceIds should not contain (5 ms) deploymentTemplate [-] Resources Should Have Location (5 ms) Resource Location must be an expression or 'global' Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (7 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (10 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (7 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (5 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (8 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (5 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (8 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (5 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (5 ms) Fail : 3 Total : 31 Pass : 28Keluaran sebelumnya menunjukkan bagaimana tiga pengujian gagal: Location Should Not Be Hardcoded, Parameters Harus Direferensikan, dan Resources Should Have Location. Awalan
[-]menunjukkan pengujian yang gagal.Untuk memahami apa yang terjadi, buka file azuredeploy.json. Harusnya akan terlihat seperti ini:
{ "$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" }] }Tes gagal karena dua alasan:
- Parameter lokasi tidak digunakan. Pesan kesalahan ini mungkin, misalnya, menunjukkan bahwa kami menggunakan parameter di masa lalu dan lupa membersihkannya. Atau mungkin itu harus digunakan tetapi kami lupa untuk memperbarui kode kami.
- Properti lokasi diatur ke string westus dengan hardcode. Menggunakan opsi ini tidak dianggap sebagai praktik yang baik karena Anda ingin dapat mengontrol lokasi sumber daya dengan parameter input saat Anda menyebarkan.
Menerapkan perbaikan pada template
Bagaimana kita memperbaiki tes yang gagal?
Seperti yang ditunjukkan oleh tes, kita bisa mencoba mengganti westus dengan teks global. Namun, itu hanya akan memperbaiki salah satu masalah. Kemungkinan besar, kami ingin menggunakan parameter lokasi dan mengatur lokasi sumber daya ke nilai tersebut.
Alasannya dua kali lipat. Parameter lokasi tidak hanya dapat ditetapkan sebagai parameter untuk penyebaran, tetapi juga memiliki fallback yang proporsional untuk ditetapkan ke resourceGroup().location sebagai defaultValue jika Anda menghilangkan pengaturan parameter lokasi saat menjalankan penyebaran.
Temukan item sumber daya pertama dalam array sumber daya dan ganti konten berikut:
"resources": [{ "location": "westus" }]dengan konten ini:
"resources": [{ "location": "[parameters('location')]" }]Jalankan
Test-AzTemplateuntuk menjalankan alat uji sekali lagi:Test-AzTemplate -TemplatePath .Anda sekarang mendapatkan output di mana semua pengujian lulus:
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
Berhasil! Anda telah menjalankan alat uji, menemukan kesalahan, dan memperbaikinya.
Sekarang Anda siap untuk menjalankan pengujian pada template Anda.