IDT for AWS IoT Greengrass V2 故障診斷 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

IDT for AWS IoT Greengrass V2 故障診斷

IDT for AWS IoT Greengrass V2 會根據錯誤類型,將錯誤寫入各個位置。IDT 會將錯誤寫入主控台、日誌檔案和測試報告。

在哪裡尋找錯誤

測試執行時,主控台上會顯示高階錯誤,而所有測試完成後會顯示失敗測試的摘要。 awsiotdevicetester_report.xml包含導致測試失敗的所有錯誤摘要。IDT 會將每個測試執行的日誌檔案存放在具有測試執行 UUID 的目錄中,並在測試執行期間顯示在主控台上。

IDT 測試日誌目錄為 <device-tester-extract-location>/results/<execution-id>/logs/。此目錄包含資料表中顯示的下列檔案。這適用於除錯。

檔案 描述
test_manager.log

測試執行時寫入主控台的日誌。此檔案結尾的結果摘要包含測試失敗的清單。

這個檔案中的警告和錯誤日誌提供有關失敗的一些資訊。

test-group-id/test-case-id/test-name.log 測試群組中特定測試的詳細日誌。對於部署 Greengrass 元件的測試,測試案例日誌檔案稱為 greengrass-test-run.log
test-group-id/test-case-id/greengrass.log AWS IoT Greengrass Core 軟體的詳細日誌。IDT 會在執行在裝置上安裝 AWS IoT Greengrass Core 軟體的測試時,從受測裝置複製此檔案。如需此日誌檔案中訊息的詳細資訊,請參閱 故障診斷 AWS IoT Greengrass V2
test-group-id/test-case-id/component-name.log 在測試執行期間部署的 Greengrass 元件詳細日誌。IDT 會在執行部署特定元件的測試時,從受測裝置複製元件日誌檔案。每個元件日誌檔的名稱對應於部署元件的名稱。如需此日誌檔案中訊息的詳細資訊,請參閱 故障診斷 AWS IoT Greengrass V2

解決 IDT for AWS IoT Greengrass V2 錯誤

執行 IDT for 之前 AWS IoT Greengrass,請先取得正確的組態檔案。如果您收到剖析和組態錯誤,您的第一個步驟是找出並使用適合您環境的組態範本。

如果您仍然有問題,請參閱下列除錯程序。

別名解析錯誤

當您執行自訂測試套件時,您可能會在 主控台和 中看到下列錯誤test_manager.log

Couldn't resolve placeholders: couldn't do a json lookup: index out of range

當 IDT 測試協調器中設定的別名未正確解析,或已解析的值不存在於組態檔案中時,就會發生此錯誤。若要解決此錯誤,請確定您的 device.jsonuserdata.json 包含測試套件所需的正確資訊。如需 AWS IoT Greengrass 資格所需組態的資訊,請參閱 設定 IDT AWS IoT Greengrass 設定以執行資格套件

衝突錯誤

當您同時在多個裝置上執行 AWS IoT Greengrass 資格套件時,您可能會看到下列錯誤。

ConflictException: Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE] { RespMetadata: { StatusCode: 409, RequestID: “id” }, Message_: “Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE]” }

AWS IoT Greengrass 資格套件尚未支援並行測試執行。為每個裝置依序執行資格套件。

無法開始測試錯誤

您可能會遇到錯誤,指出嘗試啟動測試時所發生的失敗。有數種可能的原因,因此,請執行下列動作:

  • 請確定執行命令中的集區名稱確實存在。IDT 會直接從您的 device.json 檔案參考集區名稱。

  • 確保您集區中的裝置都有正確的組態參數。

Docker 資格映像存在錯誤

Docker 應用程式管理員資格測試使用 Amazon ECR 中的amazon/amazon-ec2-metadata-mock容器映像來驗證受測裝置。

如果正在測試之裝置上的 Docker 容器中已存在映像,您可能會收到下列錯誤。

The Docker image amazon/amazon-ec2-metadata-mock:version already exists on the device.

如果您先前已下載此映像並在裝置上執行amazon/amazon-ec2-metadata-mock容器,請務必在執行資格測試之前,從受測裝置移除此映像。

無法讀取登入資料

測試 Windows 裝置時,如果您用來連線至測試中裝置的使用者未在該裝置的登入資料管理員中設定,您可能會遇到 greengrass.log 檔案中的Failed to read credential錯誤。

若要解決此錯誤,請在受測裝置的登入資料管理員中設定 IDT 使用者的使用者名稱和密碼。

如需詳細資訊,請參閱設定 Windows 裝置的使用者登入資料

PreInstalled Greengrass 的 Guice 錯誤

使用 PreInstalled Greengrass 執行 IDT 時,如果您遇到 Guice或 的錯誤ErrorInCustomProvider,請檢查檔案是否已將 userdata.json InstalledDirRootOnDevice 設定為 Greengrass 安裝資料夾。IDT 會檢查 effectiveConfig.yaml下的檔案<InstallationDirRootOnDevice>/config/effectiveConfig.yaml

如需詳細資訊,請參閱設定 Windows 裝置的使用者登入資料

無效的簽章例外狀況

當您執行 Lambda 資格測試時,如果 IDT 主機機器遇到網路存取問題,您可能會遇到invalidsignatureexception錯誤。重設您的路由器並再次執行測試。

機器學習資格錯誤

當您執行機器學習 (ML) 資格測試時,如果您的裝置不符合部署 AWS所提供 ML 元件的要求,則可能會遇到資格失敗。若要對 ML 資格錯誤進行疑難排解,請執行下列動作:

  • 在元件日誌中尋找測試執行期間所部署元件的錯誤詳細資訊。元件日誌位於 <device-tester-extract-location>/results/<execution-id>/logs/<test-group-id>目錄中。

  • -Dgg.persist=installed.software 引數新增至失敗測試案例test.json的檔案。test.json 檔案位於 <device-tester-extract-location>/tests/GGV2Q_version directory.

開放測試架構 (OTF) 失敗的部署

如果 OTF 測試無法完成部署,則可能是為 TempResourcesDirOnDevice和 的父資料夾設定的許可InstallationDirRootOnDevice。若要正確設定此資料夾的許可,請執行下列命令。folder-name 將 取代為父資料夾的名稱。

sudo chmod 755 folder-name

剖析錯誤

JSON 組態中的 Typos 可能會導致剖析錯誤。在大部分的情況下,問題是出在 JSON 檔案中省略了括弧、逗號或引號。IDT 會執行 JSON 驗證並列印除錯資訊。該工具會印出發生錯誤的行、行號和語法錯誤的欄號。此資訊應足以協助您修正錯誤,但如果您仍然找不到錯誤,您可以在 IDE、Atom 或 Sublime 等文字編輯器,或透過 JSONLint 等線上工具手動執行驗證。

拒絕許可錯誤

IDT 會在待測裝置的各種目錄和檔案上執行操作。這些操作中有些需要根存取。IDT 必須能夠在不輸入密碼的情況下使用 sudo 執行命令,才能自動化這些操作。

依照以下步驟,在不輸入密碼的情況下允許 sudo 存取。

注意

userusername 是指 IDT 存取待測裝置時所使用的 SSH 使用者。

  1. 使用 sudo usermod -aG sudo <ssh-username> 將您的 SSH 使用者新增至 sudo 群組。

  2. 登出後再登入,以使變更生效。

  3. 開啟 /etc/sudoers 檔案,然後在檔案結尾處新增以下一行:<ssh-username> ALL=(ALL) NOPASSWD: ALL

    注意

    最佳實務為建議您在編輯 /etc/sudoers 時使用 sudo visudo

資格報告產生錯誤

IDT 支援 V AWS IoT Greengrass V2 資格套件 (GGV2Q) 的四個major.minor最新版本,以產生資格報告,您可以提交至 AWS Partner Network 以將裝置包含在 AWS Partner Device Catalog 中。舊版的資格套件不會產生資格報告。

如果您對支援政策有任何疑問,請聯絡 AWS 支援

遺漏必要參數錯誤

當 IDT 新增新功能時,可能會將變更引入組態檔案。使用舊的組態檔案可能會破壞組態。如果發生這種情況,/results/<execution-id>/logs 下的 <test_case_id>.log 檔案會明確列出所有遺漏的參數。IDT 也會驗證您的 JSON 組態檔案結構描述,以確認您使用的是最新的支援版本。

macOS 上的安全例外狀況

當您在 macOS 主機電腦上執行 IDT 時,它會封鎖 IDT 執行。若要執行 IDT,請將安全例外授予 IDT 執行期功能一部分的可執行檔。當您在主機電腦上看到警告訊息顯示時,請針對每個適用的可執行檔執行下列動作:

將安全例外狀況授予 IDT 可執行檔

  1. 在 macOS 電腦上的 Apple 選單上,開啟系統偏好設定

  2. 選擇安全與隱私權,然後在一般索引標籤上,選擇鎖定圖示以變更安全設定。

  3. 如果 遭到封鎖devicetester_mac_x86-64,請尋找訊息"devicetester_mac_x86-64" was blocked from use because it is not from an identified developer.,然後選擇允許任何方式

  4. 繼續進行 IDT 測試,直到您完成所有涉及的可執行檔為止。

SSH 連線錯誤

當 IDT 無法連線至受測裝置時,它會在 中記錄連線失敗/results/<execution-id>/logs/<test-case-id>.log。SSH 訊息會出現在此日誌檔案的頂端,因為連線至測試中的裝置是 IDT 執行的第一個操作之一。

大多數 Windows 組態使用 PuTTy 終端機應用程式來連線至 Linux 主機。此應用程式要求您將標準 PEM 私有金鑰檔案轉換為名為 PPK 的專有 Windows 格式。如果您在device.json檔案中設定 SSH,請使用 PEM 檔案。如果您使用 PPK 檔案,IDT 無法與 AWS IoT Greengrass 裝置建立 SSH 連線,也無法執行測試。

從 IDT v4.4.0 開始,如果您尚未在受測裝置上啟用 SFTP,則您可能會在日誌檔案中看到下列錯誤。

SSH connection failed with EOF

若要解決此錯誤,請在裝置上啟用 SFTP。

串流管理員資格錯誤

當您執行串流管理員資格測試時,您可能會在 com.aws.StreamManagerExport.log 檔案中看到下列錯誤。

Failed to upload data to S3

當串流管理員使用您裝置上的 ~/root/.aws/credentials 檔案中的 AWS 登入資料,而不是使用 IDT 匯出到受測裝置的環境登入資料時,可能會發生此錯誤。若要避免此問題,請刪除您裝置上的credentials檔案,然後重新執行資格測試。

逾時錯誤

您可以指定套用至每個測試逾時預設值的逾時乘數,以增加每個測試的逾時。此旗標設定的任何值必須大於或等於 1.0。

若要使用逾時乘數,請在執行測試時使用旗標 --timeout-multiplier。例如:

./devicetester_linux run-suite --suite-id GGV2Q_1.0.0 --pool-id DevicePool1 --timeout-multiplier 2.5

如需詳細資訊,請執行 run-suite --help

當 IDT 測試案例因為組態問題而無法完成時,會發生一些逾時錯誤。您無法透過增加逾時乘數來解決這些錯誤。使用測試執行中的日誌來疑難排解基礎組態問題。

  • 如果 MQTT 或 Lambda 元件日誌包含Access denied錯誤,您的 Greengrass 安裝資料夾可能沒有正確的檔案許可。為您在 userdata.json 檔案中定義的安裝路徑中的每個資料夾執行下列命令。

    sudo chmod 755 folder-name
  • 如果 Greengrass 日誌指出 Greengrass CLI 部署未完成,請執行下列動作:

    • 確認 bash 已安裝在受測裝置上。

    • 如果您的userdata.json檔案包含GreengrassCliVersion組態參數,請將其移除。此參數在 IDT v4.1.0 和更新版本中已棄用。如需詳細資訊,請參閱設定 userdata.json

  • 如果 Lambda 部署測試失敗,且錯誤訊息為「驗證 Lambda 發佈:逾時」,而且您在測試日誌檔案中收到錯誤,指出 (idt-gg2-lambda-function-idt-<resource-id>.log)Error: Could not find or load main class com.amazonaws.greengrass.runtime.LambdaRuntime.,請執行下列動作:

    • 確認 userdata.json 檔案InstallationDirRootOnDevice中用於哪些資料夾。

    • 請確定您的裝置已設定正確的使用者許可。如需詳細資訊,請參閱在裝置上設定使用者許可

版本檢查錯誤

當 IDT AWS 使用者的使用者登入資料沒有必要的 IAM 許可時,IDT 會發出下列錯誤。

Failed to check version compatibility

沒有必要 IAM 許可 AWS 的使用者。