Share via


在 Azure DevTest Labs 虛擬機器上套用成品的問題進行疑難排解

本文將引導您完成 Azure DevTest Labs 虛擬機器 (VM) 上成品失敗的可能原因和疑難排解步驟。

成品為可在建立 VM 期間或之後安裝至實驗室 VM 的工具、動作或軟體。 實驗室擁有者可以在建立時預先選取要套用至所有實驗室 VM 的必要成品,而實驗室使用者可以將成品套用至他們所擁有的 VM。

成品無法正確安裝或執行有幾個可能的原因。 當成品似乎停止回應時,請先嘗試判斷其停滯位置。 成品安裝可以於初始要求期間遭封鎖,或在要求執行期間失敗。

您可以從 Azure 入口網站或針對成品失敗的 VM 來進行疑難排解。

從 Azure 入口網站的成品失敗來進行疑難排解

如果您無法將成品套用至 VM,請先在 Azure 入口網站中檢查下列項目:

  • 確認 VM 正在執行。
  • 瀏覽至實驗室 VM 的 [Artifacts] 頁面,確定 VM 已準備好套用成品。 如果無法使用 [套用成品] 功能,您會看到頁面頂端的訊息。

執行 PowerShell 命令

您也可以使用 Azure PowerShell 來判斷 VM 是否能套用成品。 檢查旗標canApplyArtifacts,當您展開作業時會傳回此旗標GET。 例如:

Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null
$vm = Get-AzResource `
        -Name "$LabName/$VmName" `
        -ResourceGroupName $LabRgName `
        -ResourceType 'microsoft.devtestlab/labs/virtualmachines' `
        -ApiVersion '2018-10-15-preview' `
        -ODataQuery '$expand=Properties($expand=ComputeVm)'
$vm.Properties.canApplyArtifacts

調查失敗的成品

成品可以停止回應,最後會顯示為失敗。 如要調查失敗的成品:

  1. 在實驗室 [概觀] 頁面上,從 [我的虛擬機器] 底下清單中,選取具有您要調查成品的 VM。

  2. 在 VM 的 [概觀] 頁面上,選取左側瀏覽中的 [Artifacts][Artifacts] 頁面會列出與 VM 相關聯的成品及其狀態。

    Screenshot showing the list of artifacts and their status.

  3. 選取顯示 [失敗] 狀態的成品。 此構件會隨即開啟並顯示延伸訊息,其中包含有關構件失敗的詳細資料。

    Screenshot of the error message for a failed artifact.

檢視活動記錄

為了安裝成品,DevTest Labs 會建立及部署 Azure Resource Manager (ARM) 範本,以要求使用自訂指令碼延伸模組 (CSE)。 此等級的錯誤會顯示在訂閱的 活動記錄 和 VM 資源群組的活動記錄中。

如果成品無法安裝,請檢查建立或更新虛擬機器擴充功能活動記錄專案,如果您直接套用成品,或是在 VM 建立過程中套用成品,請建立或更新虛擬機器。 在這些專案下尋找失敗。 有時候您必須展開專案以查看失敗。

選取失敗的專案以查看錯誤的詳細資料。 在失敗頁面上,選取 [JSON] 來檢閱 JSON 所承載的內容。 您可以在 JSON 檔的結尾看到錯誤。

調查私人成品存放庫和實驗室儲存體帳戶

當 DevTest Labs 套用成品時,它會從連線的存放庫讀取成品組態和檔案。 根據預設,DevTest Labs 可存取 DevTest Labs 公用成品存放庫。 您也可以將實驗室連線到私人存放庫,以存取自訂成品。 如果自訂成品無法安裝,請確定私人存放庫的個人存取權杖 (PAT) 尚未過期。 如果 PAT 已過期,則不會將成品列出,而且從該存放庫參考成品的任何指令碼都會失敗。

根據設定,實驗室 VM 可能無法直接存取成品存放庫。 DevTest Labs 會快取實驗室儲存體帳戶中第一次初始化實驗室時已建立的成品。 如果封鎖此儲存體帳戶的存取,例如當流量從 VM 封鎖至 Azure 儲存體服務時,您可能會看到以下類似的錯誤:

CSE Error: Failed to download all specified files. Exiting. Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (403) Forbidden. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

此錯誤會出現在 VM 資源群組的 活動記錄 中。

如要針對 Azure 儲存體帳戶的連線問題進行疑難排解:

  • 檢查是否已新增網路安全性群組 (NSG)。 如果已新增訂閱原則以在所有虛擬網路中自動設定 NSG,則會影響用來建立實驗室 VM 的虛擬網路。

  • 確認 NSG 規則。 使用 IP 流量驗證 來判斷 NSG 規則是否封鎖流量或是從 VM 封鎖流量。 您也可以檢閱有效的安全性群組規則,以確保輸入 [允許] NSG 規則存在。 如需詳細資訊,請參閱使用有效安全性規則對 VM 流量流程進行疑難排解

  • 檢查實驗室的預設儲存體帳戶。 預設儲存體帳戶為建立實驗室時所建立的第一個儲存體帳戶。 名稱通常會以字母「a」開頭,並以多重數位結尾,例如 <alabname> #。

    1. 瀏覽至實驗室資源群組。
    2. 找出名稱符合慣例儲存體帳戶類型的資源。
    3. 在 [儲存體帳戶] [概觀] 頁面上,從左側導覽選取 [網路]
    4. [防火牆和虛擬網络] 索引標籤上,確定 [公用網络存取] 設定為 [從所有網络啟用]。 或者,如果已選取 [已從選取的虛擬網络和 IP 位址啟用] 選項,請確定實驗室用來建立 VM 的虛擬網路會新增至清單中。

如需深入的疑難排解,請參閱 設定 Azure 儲存體防火牆和虛擬網路

從 Azure 入口網站的成品失敗來進行疑難排解

您可以連線到成品失敗的實驗室 VM,並調查該處的問題。

檢查自訂指令碼延伸模組記錄檔

  1. 在實驗室上,移至 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\*1.10.12*\Status\,其中 *1.10.12* 為 CSE 版本號碼。

    Screenshot of the Status folder on the lab V M.

  2. 開啟並檢查 STATUS 檔案以檢視錯誤。

如需在 Linux VM 上尋找記錄檔的指示,請參閱 搭配 Linux 虛擬機器使用 Azure 自訂指令碼延伸模組第 2 版

檢查 VM 代理程式

請確定已在 VM 上安裝妥當 Azure 虛擬機器代理程式 (VM Agent)

VM 第一次啟動時,或 CSE 第一次安裝以處理套用成品的要求時,VM 可能需要升級 VM 代理程式,或等候 VM 代理程式初始化。 VM 代理程式可能會需要很長的時間才能初始化所相依的服務。 如需進一步的疑難排解,請參閱 Azure 虛擬機器代理程式

如要確認成品是否因為 VM 代理程式而停止回應:

  1. 在實驗室 VM 上,瀏覽至 C:\WindowsAzure\logs

  2. 開啟 WaAppAgent.log 檔案。

  3. 尋找顯示 VM 代理程式開始、完成初始化,以及第一個傳送活動訊號的專案,以及您歷經成品問題的時間。

    [00000006] [11/14/2019 05:52:13.44] [INFO]  WindowsAzureGuestAgent starting. Version 2.7.41491.949
    ...
    [00000006] [11/14/2019 05:52:31.77] [WARN]  Waiting for OOBE to Complete ...
    ...
    [00000006] [11/14/2019 06:02:30.43] [WARN]  Waiting for OOBE to Complete ...
    [00000006] [11/14/2019 06:02:33.43] [INFO]  StateExecutor initialization completed.
    [00000020] [11/14/2019 06:02:33.43] [HEART] WindowsAzureGuestAgent Heartbeat.
    

在上述範例中,VM 代理程式需要 10 分鐘又 20 秒才能啟動。 原因是 OOBE 服務需要很長的時間才能啟動。

如需有關虛擬機器擴充功能的一般資訊,請參閱 Azure 虛擬機器延伸模組和功能

調查指令碼問題

成品安裝可能會因為成品安裝指令碼的撰寫方式而失敗。 例如:

  • 指令碼具有強制參數,但無法傳遞值,無論是允許使用者將其保留空白,或者是因為 artifactfile.json 定義檔中並無預設值。 指令碼會停止回應,因為它正在等候使用者輸入。

  • 指令碼需要在執行過程中輸入使用者。 指令碼應該以無訊息方式運作,而無需使用者介入。

如要針對指令碼是否導致成品顯示為停止回應的問題進行疑難排解:

  1. 請將指令碼複製至 VM,或在成品指令碼的下載位置,C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads 來找到它。
  2. 使用系統管理命令提示字元,在 VM 上執行指令碼,並提供造成問題的相同參數值。
  3. 判斷指令碼是否顯示任何不想要的行為。 如果是,請要求更新或更正指令碼。

提示

您可以針對 DevTest Labs公用存放庫所裝載的成品提交建議的指令碼修正。 如需詳細資訊,請參閱 [自述] 檔中的 [貢獻] 一節。

注意

自訂成品必須具有適當結構。 如需如何正確建構構件的資訊,請參閱建立自訂構件。 如要查看正確結構化的成品,請參閱測試參數類型成品。

如需撰寫和更正成品指令碼的詳細資訊,請參閱 AUTHORING

下一步

如果您需要更多協助,請嘗試下列其中一個支援通道:

  • 您也可以連絡 MSDN Azure 和 Stack Overflow 論壇 上的 Azure DevTest Labs 專家。
  • 透過 Azure 論壇獲得由 Azure 專家所提供的解答。
  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 Azure 支援會將 Azure 社群連線到解答、支援及專家。
  • 移至 Azure 支援網站,然後選取 [提交支援票證] 以提出 Azure 支援事件。