使用測試工具組模組套用最佳做法
當我們開發 Azure Resource Manager 範本 (ARM 範本) 時,有一些方法可讓您更輕鬆地建立有效的範本,並提供建議以改善其品質。 這些建議為何,且為何您的範本遵循這些建議可能會有所助益呢?
有不同等級的建議:從參數和變數,到套用至您資源的建議。 讓我們先概要看看這些建議,並了解遵循這些建議可以獲得哪些幫助:
可維護性。 當您開發範本時,從第一次撰寫到更新,保持範本清晰及井然有序會隨時間經過而變得更具挑戰性。 當您的範本增長時,您的參數與變數也會隨著增長。 請務必了解每個項目的使用目的,以及如何適當地加以使用。
假設參數命名不當,而且您正在努力了解其作用。 或者,您在不應使用硬式編碼值時使用硬式編碼值,而且當發生某種情況時,您的 Azure 服務中斷。 所有這些問題都會造成負擔,使您必須了解並稍後關閉查看的項目。 透過嚴謹地規範您命名項目的方式及清除項目,有助於減輕這些情況造成的影響。
正確性。 您可能會嘗試以正確的方式命名一切,但結果可能只是有太多規則需要追蹤。 在這類情況下,若呼叫工具,則會提醒您所有這些規則和規定,並強制執行它們。
彈性。 您想要確保範本具有足夠的彈性,可用於任何環境。 如果您未適當地參數化範本,則可能無法重複使用這些範本。
擴充性。 有時候您會想要新增自己的建議。 您的公司或小組可能會有自己的規則來強制執行。
注意
針對這類建議檢查程式碼有時稱為「Lint 分析」。
ARM 範本測試工具組
使用測試工具是不錯的做法,因為您可以專注於撰寫,同時知道工具會找出任何問題,並讓您的範本變得更好。 有這類工具:ARM 範本測試工具組 (有時稱為 ARM-TTK)。 其會透過執行一系列的測試,來處理前述問題。 測試可以分為下列類別:
- 驗證使用者的意圖。 此類別會檢查宣告的變數和參數是否全部都已使用,並在未全部使用時發出警告。
- 遵循安全性作法。 另一個重要的層面是確保不會從範本傳回任何敏感項目,例如 API 祕密。
- 使用適當的語言建構。 您應該使用語言建構或協助程式函式,讓您可以不需依賴硬式編碼值。
注意
這些是建議,而不是需求。 但我們強烈建議您遵循這些建議。
安裝工具
該工具為 PowerShell 模組。 若要能夠執行此模組,您需要遵循下列步驟:
- 安裝 PowerShell。 此工作會視您是在 Linux、Mac 或 Windows 上執行,以不同的方式完成。
- 下載模組。 模組裝載於 GitHub 存放庫。 您可以從該處下載,或透過
git clone
命令加以提取。 - 匯入模組。 此步驟只是您輸入至 PowerShell 工作階段的單行指示,可讓您使用 ARM TTK 命令。
您會在下個單元中了解如何做到這一切。 一旦安裝了工具,您就可以開始在您的範本上執行測試。
執行測試
執行測試涉及使用適當的參數叫用模組。 -TemplatePath
為強制參數,其預期一個指向部署範本檔案的字串。 範本檔案名稱必須是 azuredeploy.json 或 maintemplate.js。 因此,一般測試回合可能看起來如下列命令:
Test-AzTemplate -TemplatePath path/to/template
此工具會測試範本檔案,也會測試相同目錄及其子資料夾中的任何範本檔案。
測試回合的一般輸出可能看起來如下:
[+] adminUsername Should Not Be A Literal (24 ms)
[+] apiVersions Should Be Recent (18 ms)
[+] artifacts parameter (16 ms)
[+] DeploymentTemplate Schema Is Correct (17 ms)
[+] IDs Should Be Derived From ResourceIDs (15 ms)
[-] Location Should Not Be Hardcoded (41 ms)
azuredeploy.json must use the location parameter, not resourceGroup().location (except when used as a default value in the main template)
成功的測試會以綠色顯示,而且開頭會加上 [+]
。 失敗的測試會以紅色顯示,開頭會加上 [-]
。
使用測試參數設定您的測試回合
到目前為止,您已了解 -TemplatePath
參數是在執行該工具時應包含的強制參數。 該工具也接受選擇性參數。 這些參數可讓您執行特定檔案或特定測試。 使用這些參數可讓您在撰寫範本以及對範本進行偵錯時進行更細微的控制。
參數 -File
是用來執行特定檔案。 參數 -Test
可讓您指定要執行的測試情節。
您可以透過下列方式使用參數:
在單一檔案上執行測試。 建議您只在目前處理的單一檔案上執行測試。 原因是這樣做可以更容易專注在撰寫特定範本檔案。 另一個優點是輸出會包含較少雜訊,而且只會顯示您感興趣的項目。 透過搭配指向檔案的路徑 (包含檔案名稱) 使用
-File
參數,您就可以只在該檔案上執行測試。重要
該參數仍會預期指定的位置有 azuredeploy.json 或 maintemplate.json 存在。
在所有檔案上執行單一測試類型。 有時候,建議您只執行單一測試類型,以確保您符合該案例的準則。 您可以透過使用
-Test
參數來完成這項工作。 該參數會預期以引號括住的測試完整名稱,例如資源應具有位置。