

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

# 對 IDT for AWS IoT Greengrass V2 進行故障診斷
<a name="idt-troubleshooting"></a>

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

## 在哪裡尋找錯誤
<a name="where-to-look"></a>

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

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


| 檔案 | Description | 
| --- | --- | 
| test\_manager.log | 測試執行時寫入主控台的日誌。此檔案結尾的結果摘要包含測試失敗的清單。<br />這個檔案中的警告和錯誤日誌提供有關失敗的一些資訊。 | 
| {{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](troubleshooting.md)。 | 
| {{test-group-id}}/{{test-case-id}}/{{component-name}}.log | 測試執行期間部署之 Greengrass 元件的詳細日誌。IDT 會在執行部署特定元件的測試時，從待測裝置複製元件日誌檔案。每個元件日誌檔的名稱對應於已部署元件的名稱。如需此日誌檔案中訊息的詳細資訊，請參閱 [故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。 | 

## 解決 IDT for AWS IoT Greengrass V2 錯誤
<a name="idt-gg-resolve-errors"></a>

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

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

**Topics**
+ [別名解析錯誤](#alias-resolution-errors)
+ [衝突錯誤](#conflict-error)
+ [無法開始測試錯誤](#could-not-start-test)
+ [Docker 資格映像存在錯誤](#docker-qualification-image-exists)
+ [無法讀取登入資料](#failed-to-read-credential-windows)
+ [PreInstalled Greengrass 的 Guice 錯誤](#guice-errors)
+ [無效的簽章例外狀況](#invalid-signature-exception-lambda)
+ [機器學習資格錯誤](#machine-learning-qualification-failure)
+ [開放測試架構 (OTF) 失敗的部署](#otf-deployment-failure)
+ [剖析錯誤](#parse-error)
+ [拒絕許可錯誤](#permission-denied-pwd-sudo)
+ [資格報告產生錯誤](#qualification-report-policy-error)
+ [遺漏必要參數錯誤](#required-param-missing)
+ [macOS 上的安全例外狀況](#security-exception-macos)
+ [SSH 連線錯誤](#ssh-connect-errors)
+ [串流管理員資格錯誤](#stream-manager-qualification-failure)
+ [逾時錯誤](#test-timeout)
+ [版本檢查錯誤](#version-compatibility-check-failure)

### 別名解析錯誤
<a name="alias-resolution-errors"></a>

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

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

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

### 衝突錯誤
<a name="conflict-error"></a>

當您同時在多個裝置上執行 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 資格套件尚未支援並行測試執行。為每個裝置依序執行資格套件。

### 無法開始測試錯誤
<a name="could-not-start-test"></a>

您可能會遇到錯誤，指出測試嘗試啟動時發生的失敗。有數種可能的原因，因此，請執行下列動作：
+ 請確定執行命令中的集區名稱確實存在。IDT 會直接從您的 `device.json` 檔案參考集區名稱。
+ 確保您集區中的裝置都有正確的組態參數。

### Docker 資格映像存在錯誤
<a name="docker-qualification-image-exists"></a>

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`容器，請務必在執行資格測試之前，從受測裝置移除此映像。

### 無法讀取登入資料
<a name="failed-to-read-credential-windows"></a>

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

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

如需詳細資訊，請參閱[設定 Windows 裝置的使用者登入資料](device-config-setup.md#configure-windows-user-for-idt)。

### PreInstalled Greengrass 的 Guice 錯誤
<a name="guice-errors"></a>

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

如需詳細資訊，請參閱[設定 Windows 裝置的使用者登入資料](device-config-setup.md#configure-windows-user-for-idt)。

### 無效的簽章例外狀況
<a name="invalid-signature-exception-lambda"></a>

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

### 機器學習資格錯誤
<a name="machine-learning-qualification-failure"></a>

當您執行機器學習 (ML) 資格測試時，如果裝置不符合部署 AWS所提供 ML 元件[的需求](dlr-component.md#dlr-component-requirements)，您可能會遇到資格失敗。若要疑難排解 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) 失敗的部署
<a name="otf-deployment-failure"></a>

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

```
sudo chmod 755 {{folder-name}}
```

### 剖析錯誤
<a name="parse-error"></a>

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

### 拒絕許可錯誤
<a name="permission-denied-pwd-sudo"></a>

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

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

**注意**  
`user` 和 `username` 是指 IDT 存取待測裝置時所使用的 SSH 使用者。

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

1. 登出後再登入，以使變更生效。

1. 開啟 `/etc/sudoers` 檔案，然後在檔案結尾處新增以下一行：`{{<ssh-username>}} ALL=(ALL) NOPASSWD: ALL`
**注意**  
最佳實務為建議您在編輯 `/etc/sudoers` 時使用 **sudo visudo**。

### 資格報告產生錯誤
<a name="qualification-report-policy-error"></a>

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

如果您對支援政策有任何疑問，請聯絡 [AWS 支援](https://aws.amazon.com/contact-us/)。

### 遺漏必要參數錯誤
<a name="required-param-missing"></a>

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

### macOS 上的安全例外狀況
<a name="security-exception-macos"></a>

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

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

1. 在 macOS 電腦上的 Apple 功能表上，開啟**系統偏好設定**。

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

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

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

### SSH 連線錯誤
<a name="ssh-connect-errors"></a>

當 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。

### 串流管理員資格錯誤
<a name="stream-manager-qualification-failure"></a>

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

```
Failed to upload data to S3
```

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

### 逾時錯誤
<a name="test-timeout"></a>

您可以指定套用至每個測試逾時預設值的逾時乘數，以增加每個測試的逾時。此旗標設定的任何值必須大於或等於 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](set-config.md#userdata-config)。
+ 如果 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`檔案中用於哪些資料夾。
  + 請確定您的裝置已設定正確的使用者許可。如需詳細資訊，請參閱[在裝置上設定使用者許可](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-config-setup.html#root-access)。

### 版本檢查錯誤
<a name="version-compatibility-check-failure"></a>

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

```
Failed to check version compatibility
```

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