

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 使用 IDT AWS IoT Greengrass 執行資格套件
<a name="idt-gg-qualification"></a>

您可以使用 AWS IoT Device Tester (IDT) for AWS IoT Greengrass 來驗證 AWS IoT Greengrass Core 軟體是否在您的硬體上執行，並且可以與 通訊 AWS 雲端。也會使用 AWS IoT Core執行端對端測試。例如，它會驗證您的裝置是否可以傳送和接收 MQTT 訊息，並正確處理它們。

因為 AWS IoT Greengrass Version 1 已移至[維護模式](https://docs.aws.amazon.com/greengrass/v1/developerguide/maintenance-policy.html)，所以 IDT for AWS IoT Greengrass V1 不再產生已簽署的資格報告。如果您想要將硬體新增至 AWS Partner Device Catalog，請執行 AWS IoT Greengrass V2 資格套件來產生可提交的測試報告 AWS IoT。如需詳細資訊，請參閱 [AWS 裝置資格計劃](https://aws.amazon.com/partners/dqp/)和 [IDT for 的支援版本 AWS IoT Greengrass V2](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-test-versions.html)。

除了測試裝置之外，IDT for 還會在您的 中 AWS IoT Greengrass 建立資源 （例如 AWS IoT 物件、 AWS IoT Greengrass 群組、Lambda 函數等） AWS 帳戶 ，以促進資格程序。

<a name="idt-aws-credentials"></a>若要建立這些資源，IDT for AWS IoT Greengrass 會使用 `config.json` 檔案中設定的 AWS 登入資料，代表您進行 API 呼叫。系統會在測試期間的不同時間點內佈建這些資源。

當您使用 IDT for AWS IoT Greengrass AWS IoT Greengrass 執行資格套件時，IDT 會執行下列步驟：

1. 載入並驗證您的裝置和登入資料組態。

1. 對所需的本機和雲端資源執行選取的測試。

1. 清除本機和雲端資源。

1. 產生測試報告，指出您的裝置是否通過資格所需的測試。

## 測試套件版本
<a name="idt-test-suite-versions"></a>

IDT for 會將測試 AWS IoT Greengrass 組織成測試套件和測試群組。<a name="idt-test-suites-groups"></a>
+ 測試套件是一組測試群組，用來驗證裝置是否適用於特定版本的 AWS IoT Greengrass。
+ 測試群組是一組與特定功能相關的個別測試，例如 Greengrass 群組部署和 MQTT 簡訊。

從 IDT v3.0.0 開始，測試套件使用 `major.minor.patch` 格式進行版本化，例如，`GGQ_1.0.0`。當您下載 IDT 時，套件會包含最新的測試套件版本。

**重要**  
IDT 支援三種最新的測試套件版本，以符合裝置資格。如需詳細資訊，請參閱[AWS IoT Device Tester for 的支援政策 AWS IoT Greengrass V1](idt-support-policy.md)。  
您可以執行 `list-supported-products`來列出目前 IDT 版本支援的 AWS IoT Greengrass 和 測試套件版本。來自不支援的測試套件版本的測試不符合裝置資格。IDT 不會列印不支援版本的資格報告。

### IDT 組態設定的更新
<a name="idt-test-suite-versions-config-changes"></a>

新測試可能會引入新的 IDT 組態設定。
+ 如果這些是選用設定，IDT 會繼續執行測試。
+ 如果這些是必要設定，IDT 會通知您並停止執行。設定組態之後，請重新啟動測試回合。

  組態設定位於 `<device-tester-extract-location>/configs` 資料夾中。如需詳細資訊，請參閱[設定 IDT AWS IoT Greengrass 設定以執行資格套件](set-config.md)。

如果更新的測試套件版本新增了組態設定，IDT 會在 `<device-tester-extract-location>/configs` 中建立原始組態檔的副本。

## 測試群組描述
<a name="dt-test-groups"></a>

------
#### [ IDT v2.0.0 and later ]

**核心資格的必要測試群組**  
這些測試群組是讓您的 AWS IoT Greengrass 裝置符合 AWS Partner Device Catalog 資格的必要項目。    
AWS IoT Greengrass 核心相依性  
驗證您的裝置是否符合 AWS IoT Greengrass Core 軟體的所有軟體和硬體需求。  
在 [Docker 容器中](docker-config-setup.md)`Software Packages Dependencies`測試時，此測試群組中的測試案例不適用。  
部署  
驗證 Lambda 函數是否可以部署在您的裝置上。  
MQTT  
檢查 Greengrass 核心和用戶端裝置之間的本機通訊，以驗證 AWS IoT Greengrass 訊息路由器功能，這些裝置是本機 IoT 裝置。  
無線 (OTA)  
驗證您的裝置是否可以成功執行 AWS IoT Greengrass 核心軟體的 OTA 更新。  
<a name="n-a-docker"></a>在 [Docker 容器](docker-config-setup.md)中進行測試時，此測試群組不適用。  
版本  
檢查 AWS IoT Greengrass 提供的 版本是否與您正在使用的 AWS IoT Device Tester 版本相容。

**選用測試群組**  
這些測試群組是選用的。如果您選擇符合選用測試的資格，您的裝置會在 AWS Partner Device Catalog 中列出其他功能。    
容器相依性  
<a name="description-container"></a>驗證裝置是否符合在 Greengrass 核心上以容器模式執行 Lambda 函數的所有軟體和硬體需求。  
<a name="n-a-docker"></a>在 [Docker 容器](docker-config-setup.md)中進行測試時，此測試群組不適用。  
部署容器  
<a name="description-deployment-container"></a>驗證 Lambda 函數是否可以部署在裝置上，並在 Greengrass 核心上以容器模式執行。  
<a name="n-a-docker"></a>在 [Docker 容器](docker-config-setup.md)中進行測試時，此測試群組不適用。  
Docker 相依性 (對 IDT v2.2.0 及更新版本的支援)  
<a name="description-docker"></a>驗證裝置是否符合所有必要的技術相依性，以使用 Greengrass Docker 應用程式部署連接器來執行容器  
<a name="n-a-docker"></a>在 [Docker 容器](docker-config-setup.md)中進行測試時，此測試群組不適用。  
硬體安全整合 (HSI)  
<a name="description-hsi"></a>驗證提供的 HSI 共用程式庫是否可以與硬體安全模組 (HSM) 溝通，並正確實作所需的 PKCS\$111 API。HSM 和共用程式庫必須能夠簽署 CSR、執行 TLS 操作並提供正確的金鑰長度和公開金鑰演算法。  
串流管理員相依性 (支援 IDT v2.2.0 及更新版本)  
<a name="description-sm"></a>驗證裝置是否符合執行 AWS IoT Greengrass 串流管理員所需的所有技術相依性。  
機器學習相依性 (IDT v3.1.0 及更新版本支援)  
<a name="description-ml"></a>驗證裝置符合所有必要的技術相依性，以便在本機執行 ML 推論。  
機器學習推論測試 (IDT v3.1.0 及更新版本支援)  
<a name="description-mlit"></a>驗證 ML 推斷可以在給定受測裝置上執行。如需詳細資訊，請參閱[選用：設定您的裝置以取得 ML 資格](idt-ml-qualification.md)。  
機器學習推論容器測試 (IDT v3.1.0 及更新版本支援)  
<a name="description-mlict"></a>驗證 ML 推斷可以在給定受測裝置上執行，並在 Greengrass 核心的容器模式上執行。如需詳細資訊，請參閱[選用：設定您的裝置以取得 ML 資格](idt-ml-qualification.md)。

------
#### [ IDT v1.3.3 and earlier ]

**核心資格的必要測試群組**  
需要這些測試才能讓您的 AWS IoT Greengrass 裝置符合 AWS Partner Device Catalog 的資格。    
AWS IoT Greengrass 核心相依性  
驗證您的裝置是否符合 AWS IoT Greengrass Core 軟體的所有軟體和硬體需求。  
組合 (裝置安全互動)  
在雲端變更 Greengrass 群組的連線資訊，以驗證 Greengrass 核心裝置上憑證管理員和 IP 偵測的功能。測試群組會輪換 AWS IoT Greengrass 伺服器憑證並驗證 是否 AWS IoT Greengrass 允許連線。  
部署 (IDT 第 1.2 版及更早版本的必要項目)  
驗證 Lambda 函數是否可以部署在您的裝置上。  
Device Certificate Manager (DCM)  
驗證 AWS IoT Greengrass 裝置憑證管理員是否可以在啟動時產生伺服器憑證，並在憑證即將過期時輪換憑證。  
IP 偵測 (IPD)  
Greengrass 核心裝置中的 IP 地址變更時，會驗證核心連線資訊是否更新。如需詳細資訊，請參閱[啟動自動 IP 偵測](gg-core.md#ip-auto-detect)。  
日誌  
驗證 AWS IoT Greengrass 記錄服務是否可以使用以 Python 撰寫的使用者 Lambda 函數寫入日誌檔案。  
MQTT  
透過傳送路由到兩個 Lambda 函數之主題上的訊息，來驗證 AWS IoT Greengrass 訊息路由器功能。  
原生  
驗證 AWS IoT Greengrass 可以執行原生 （編譯） Lambda 函數。  
無線 (OTA)  
驗證您的裝置是否可以成功執行 AWS IoT Greengrass 核心軟體的 OTA 更新。  
滲透  
如果未啟用硬連結/軟連結保護和 [seccomp](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt)，則驗證 AWS IoT Greengrass Core 軟體是否無法啟動。它也用來驗證其他安全相關功能。  
影子  
驗證本機陰影和陰影雲端同步功能。  
多工緩衝處理區域  
驗證 MQTT 訊息是否依預設的多工緩衝處理區域組態佇列。  
字符交換服務 (TES)  
驗證 AWS IoT Greengrass 是否可以交換其核心憑證以取得有效的 AWS 憑證。  
版本  
檢查 AWS IoT Greengrass 提供的 版本是否與您正在使用的 AWS IoT Device Tester 版本相容。

**選用測試群組**  
這些測試是選用的。如果您選擇符合選用測試的資格，您的裝置會在 AWS Partner Device Catalog 中列出其他功能。    
容器相依性  
檢查裝置是否符合在容器模式下執行 Lambda 函數所需的所有必要相依性。  
硬體安全整合 (HSI)  
驗證提供的 HSI 共用程式庫是否可以與硬體安全模組 (HSM) 溝通，並正確實作所需的 PKCS\$111 API。HSM 和共用程式庫必須能夠簽署 CSR、執行 TLS 操作並提供正確的金鑰長度和公開金鑰演算法。  
本機資源存取  
透過透過 LRA API，將各種 Linux 使用者和群組擁有的本機檔案和目錄的存取權提供給容器化 Lambda 函數， AWS IoT Greengrass 以驗證 的本機資源存取 ( AWS IoT Greengrass LRA) 功能。 APIs 應允許或拒絕 Lambda 函數根據本機資源存取組態存取本機資源。  
網路  
驗證是否可以從 Lambda 函數建立通訊端連線。這些通訊端連線應該根據 Greengrass 核心組態而允許或拒絕。

------

# 執行 AWS IoT Greengrass 資格套件的先決條件
<a name="dev-tst-prereqs"></a>

本節說明使用 AWS IoT Device Tester (IDT) for AWS IoT Greengrass AWS IoT Greengrass 執行資格套件的先決條件。

## 下載適用於 的最新版 AWS IoT Device Tester AWS IoT Greengrass
<a name="install-dev-tst-gg"></a>

下載[最新版本](dev-test-versions.md)的 IDT，並將軟體解壓縮到檔案系統上具有讀取和寫入許可的位置。

**注意**  
<a name="unzip-package-to-local-drive"></a>IDT 不支援由多位使用者從共用位置執行，例如 NFS 目錄或 Windows 網路共用資料夾。我們建議您將 IDT 套件解壓縮到本機磁碟機，並在本機工作站上執行 IDT 二進位檔。  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請將 IDT 解壓縮到根目錄，例如 `C:\ ` 或 `D:\`，使路徑保持在 260 個字元的限制以下。

## 建立和設定 AWS 帳戶
<a name="config-aws-account-for-idt"></a>

您必須先執行下列步驟 AWS IoT Greengrass，才能使用 IDT for：

1. [建立 AWS 帳戶。]()如果您已有 AWS 帳戶，請跳到步驟 2。

1. [設定 IDT 的許可。]()

這些帳戶許可允許 IDT 代表您存取 AWS 服務和建立 AWS 資源，例如 AWS IoT 物件、Greengrass 群組和 Lambda 函數。

<a name="idt-aws-credentials"></a>若要建立這些資源，IDT for AWS IoT Greengrass 會使用 `config.json` 檔案中設定的 AWS 登入資料來代表您進行 API 呼叫。系統會在測試期間的不同時間點內佈建這些資源。

**注意**  <a name="free-tier-tests"></a>
雖然大多數測試都符合 [Amazon Web Services 免費方案](https://aws.amazon.com/free)的資格，但您必須在註冊 時提供信用卡 AWS 帳戶。如需詳細資訊，請參閱[如果我的帳戶適用於免費方案，為何需要付款方式？](https://aws.amazon.com/premiumsupport/knowledge-center/free-tier-payment-method/)。

### 步驟 1：建立 AWS 帳戶
<a name="create-aws-account-for-idt"></a>

在此步驟中，建立和設定 AWS 帳戶。如果您已有 AWS 帳戶，請跳至 [步驟 2：設定 IDT 的許可](#configure-idt-permissions)。

#### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

#### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

### 步驟 2：設定 IDT 的許可
<a name="configure-idt-permissions"></a>

在此步驟中，設定 IDT for AWS IoT Greengrass 用來執行測試和收集 IDT 用量資料的許可。您可以使用 AWS 管理主控台 或 AWS Command Line Interface (AWS CLI) 來建立 IAM 政策和 IDT 的測試使用者，然後將政策連接到使用者。如果您已經為 IDT 建立測試使用者，請跳至[設定您的裝置以執行 IDT 測試](device-config-setup.md) 或 [選用：設定 IDT for 的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)。
+ [設定 IDT (主控台) 的許可](#configure-idt-permissions-console)
+ [步驟 2：設定 IDT (AWS CLI) 的許可](#configure-idt-permissions-cli)<a name="configure-idt-permissions-console"></a>

**設定 IDT (主控台) 的許可**

請依照下列步驟使用主控台來設定 IDT for AWS IoT Greengrass的許可。

1. 登入 [IAM 主控台](https://console.aws.amazon.com/iam)。

1. 建立客戶受管政策，該政策授與建立具有特定許可之角色的許可。

   1. 在導覽窗格中，選擇**政策**，然後選擇**建立政策**。

   1. 在 **JSON** 標籤上，用以下政策取代預留位置內容。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "ManageRolePoliciesForIDTGreengrass",
                  "Effect": "Allow",
                  "Action": [
                      "iam:DetachRolePolicy",
                      "iam:AttachRolePolicy"
                  ],
                  "Resource": [
                      "arn:aws:iam::*:role/idt-*",
                      "arn:aws:iam::*:role/GreengrassServiceRole"
                  ],
                  "Condition": {
                      "ArnEquals": {
                          "iam:PolicyARN": [
                              "arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy",
                              "arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess",
                              "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                          ]
                      }
                  }
              },
              {
                  "Sid": "ManageRolesForIDTGreengrass",
                  "Effect": "Allow",
                  "Action": [
                      "iam:CreateRole",
                      "iam:DeleteRole",
                      "iam:PassRole",
                      "iam:GetRole"
                  ],
                  "Resource": [
                    "arn:aws:iam::123456789012:role/idt-*",
                    "arn:aws:iam::123456789012:role/GreengrassServiceRole"
                  ]
              }
          ]
      }
      ```

------
**重要**  <a name="policy-grants-role-perms"></a>
下列政策會授予許可來建立和管理 IDT for AWS IoT Greengrass所需的角色。這包括連接下列 AWS 受管政策的許可：  
[AWSGreengrassResourceAccessRolePolicy (AWSGreengrassResourceAccessRolePolicy)](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy)
[GreengrassOTAUpdateArtifactAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess)
[AWSLambdaBasicExecutionRole](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole)

   1. 選擇下**一步：標籤**。

   1. 選擇下**一步：檢閱**。

   1. 對於**名稱**，輸入 **IDTGreengrassIAMPermissions**。在 **Summary (摘要)** 下，檢閱您的政策所授與的許可。

   1. 選擇**建立政策**。

1. 建立 IAM 使用者並連接 IDT for 所需的許可 AWS IoT Greengrass。

   1. 建立 IAM 使用者。請遵循《IAM *使用者指南*》中[建立 IAM 使用者 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) 的步驟 1 到 5。

   1. 將許可連接至您的 IAM 使用者：

      1. 在**設定許可**頁面上，選擇**直接連接現有政策**。

      1. 搜尋您在上一個步驟中建立的 **IDTGreengrassIAMPermissions** 政策。選取核取方塊。

      1. 搜尋 **AWSIoTDeviceTesterForGreengrassFullAccess** 政策。選取核取方塊。
**注意**  <a name="AWSIoTDeviceTesterForGreengrassFullAccess"></a>
[AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess) 是一種 AWS 受管政策，定義 IDT 建立和存取用於測試 AWS 的資源所需的許可。如需詳細資訊，請參閱[AWS AWS IoT Device Tester 的 受管政策](#idt-managed-policy)。

   1. 選擇下**一步：標籤**。

   1. 選擇 **Next: Review (下一步：檢閱)** 以檢視選擇的摘要。

   1. 選擇 **Create user** (建立使用者)。

   1. 若要檢視使用者的存取金鑰 (存取金鑰 ID 和私密存取金鑰)，請選擇密碼和存取金鑰旁的 **Show (顯示)**。若要儲存存取金鑰，請選擇 **Download.csv**，並將檔案儲存到安全的位置。您稍後會使用此資訊來設定您的 AWS 登入資料檔案。

1. <a name="aws-account-config-next-steps"></a>下一步：設定您的[實體裝置](device-config-setup.md)。

 <a name="configure-idt-permissions-cli"></a>

**步驟 2：設定 IDT (AWS CLI) 的許可**

請依照下列步驟使用 AWS CLI 來設定 IDT for 的許可 AWS IoT Greengrass。如果您已在主控台中設定許可，請跳至[設定您的裝置以執行 IDT 測試](device-config-setup.md)或[選用：設定 IDT for 的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)。

1. 如果尚未安裝 ，請在電腦上安裝和設定 AWS CLI 。請遵循*AWS Command Line Interface 《 使用者指南*》中的[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 中的步驟。
**注意**  
 AWS CLI 是開放原始碼工具，可用來與 AWS 命令列 Shell 中的 服務互動。

1. 建立客戶受管政策，以授予管理 IDT 和 AWS IoT Greengrass 角色的許可。

------
#### [ Linux, macOS, or Unix ]

   ```
   aws iam create-policy --policy-name IDTGreengrassIAMPermissions --policy-document '{
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ManageRolePoliciesForIDTGreengrass",
               "Effect": "Allow",
               "Action": [
                   "iam:DetachRolePolicy",
                   "iam:AttachRolePolicy"
               ],
               "Resource": [
                   "arn:aws:iam::*:role/idt-*",
                   "arn:aws:iam::*:role/GreengrassServiceRole"
               ],
               "Condition": {
                   "ArnEquals": {
                       "iam:PolicyARN": [
                           "arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy",
                           "arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess",
                           "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                       ]
                   }
               }
           },
           {
               "Sid": "ManageRolesForIDTGreengrass",
               "Effect": "Allow",
               "Action": [
                   "iam:CreateRole",
                   "iam:DeleteRole",
                   "iam:PassRole",
                   "iam:GetRole"
               ],
               "Resource": [
                 "arn:aws:iam::123456789012:role/idt-*",
                 "arn:aws:iam::123456789012:role/GreengrassServiceRole"
               ]
           }
       ]
   }'
   ```

------
#### [ Windows command prompt ]

   ```
   aws iam create-policy --policy-name IDTGreengrassIAMPermissions --policy-document '{\"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{\"Sid\": \"ManageRolePoliciesForIDTGreengrass\",\"Effect\": \"Allow\",\"Action\": [\"iam:DetachRolePolicy\", \"iam:AttachRolePolicy\"], \"Resource\": [\"arn:aws:iam::*:role/idt-*\",\"arn:aws:iam::*:role/GreengrassServiceRole\"],\"Condition\": {\"ArnEquals\": {\"iam:PolicyARN\": [\"arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy\",\"arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess\",\"arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole\"]}}},{\"Sid\": \"ManageRolesForIDTGreengrass\",\"Effect\": \"Allow\",\"Action\": [\"iam:CreateRole\",\"iam:DeleteRole\", \"iam:PassRole\", \"iam:GetRole\"],\"Resource\": [\"arn:aws:iam::*:role/idt-*\",\"arn:aws:iam::*:role/GreengrassServiceRole\"]}]}'
   ```

**注意**  
此步驟包含 Windows 命令提示字元範例，因為它使用的 JSON 語法與 Linux、macOS 或 Unix 終端機命令不同。

------

1. 建立 IAM 使用者並連接 IDT for 所需的許可 AWS IoT Greengrass。

   1. 建立 IAM 使用者。在此範例設定中，使用者命名為 `IDTGreengrassUser`。

      ```
      aws iam create-user --user-name IDTGreengrassUser
      ```

   1. 將您在步驟 2 中建立`IDTGreengrassIAMPermissions`的政策連接到您的 IAM 使用者。使用 的 ID 取代 命令中的 *<account-id>* AWS 帳戶。

      ```
      aws iam attach-user-policy --user-name IDTGreengrassUser --policy-arn arn:aws:iam::<account-id>:policy/IDTGreengrassIAMPermissions
      ```

   1. 將`AWSIoTDeviceTesterForGreengrassFullAccess`政策連接至您的 IAM 使用者。

      ```
      aws iam attach-user-policy --user-name IDTGreengrassUser --policy-arn arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess
      ```
**注意**  <a name="AWSIoTDeviceTesterForGreengrassFullAccess"></a>
[AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess) 是一種 AWS 受管政策，定義 IDT 建立和存取用於測試 AWS 的資源所需的許可。如需詳細資訊，請參閱[AWS AWS IoT Device Tester 的 受管政策](#idt-managed-policy)。

1. 為使用者建立私密存取金鑰。

   ```
   aws iam create-access-key --user-name IDTGreengrassUser
   ```

   將輸出儲存在安全的位置。您稍後會使用此資訊來設定您的 AWS 登入資料檔案。

1. <a name="aws-account-config-next-steps"></a>下一步：設定您的[實體裝置](device-config-setup.md)。

## AWS AWS IoT Device Tester 的 受管政策
<a name="idt-managed-policy"></a>

[AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess) 受管政策允許 IDT 執行操作和收集用量指標。此政策可授予下列 IDT 許可：
+ `iot-device-tester:CheckVersion`。 檢查一組 AWS IoT Greengrass、測試套件和 IDT 版本是否相容。
+ `iot-device-tester:DownloadTestSuite`。 下載測試套件。
+ `iot-device-tester:LatestIdt`。 取得可供下載的最新 IDT 版本相關資訊。
+ `iot-device-tester:SendMetrics`。 發佈 IDT 收集的有關測試的使用資料。
+ `iot-device-tester:SupportedVersion`。 取得 IDT 支援的 AWS IoT Greengrass 和 測試套件版本清單。此資訊會顯示在命令列視窗中。

# 設定您的裝置以執行 IDT 測試
<a name="device-config-setup"></a>

若要設定您的裝置，您必須安裝 AWS IoT Greengrass 相依性、設定 AWS IoT Greengrass Core 軟體、設定主機電腦以存取您的裝置，以及在裝置上設定使用者許可。

## 驗證待測裝置的 AWS IoT Greengrass 相依性
<a name="install-gg-dependencies"></a>

在 IDT for AWS IoT Greengrass 可以測試您的裝置之前，請確定您已如 [入門 AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-gs.html)中所述設定您的裝置。如需受支援平台的相關資訊，請參閱[支援的平台](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html#gg-platforms)。

## 設定 AWS IoT Greengrass 軟體
<a name="config-gg"></a>

IDT for 會 AWS IoT Greengrass 測試您的裝置與特定 版本的相容性 AWS IoT Greengrass。IDT 提供兩種 AWS IoT Greengrass 在裝置上進行測試的選項：
+ 下載並使用某個版本的 [AWS IoT Greengrass Core 軟體](what-is-gg.md#gg-core-download-tab)。IDT 會為您安裝此軟體。
+ 使用您裝置上已安裝的 AWS IoT Greengrass Core 軟體版本。

**注意**  
的每個 版本 AWS IoT Greengrass 都有對應的 IDT 版本。您必須下載對應 AWS IoT Greengrass 至您正在使用之 版本的 IDT 版本。

下列各節描述這些選項。您只需要執行一個選項。

### 選項 1：下載 AWS IoT Greengrass Core 軟體並設定 AWS IoT Device Tester 使用它
<a name="download-gg"></a>

您可以從 AWS IoT Greengrass 核心軟體下載頁面下載[AWS IoT Greengrass 核心軟體](what-is-gg.md#gg-core-download-tab)。

1. 尋找正確的架構和 Linux 發行版本，然後選擇 **Download (下載)**。

1. 將 tar.gz 檔案複製到 `<device-tester-extract-location>/products/greengrass/ggc`。

**注意**  
請勿變更 AWS IoT Greengrass tar.gz 檔案的名稱。請勿將相同作業系統和架構的多個檔案放在這個目錄中。例如，將 `greengrass-linux-armv7l-1.7.1.tar.gz` 和 `greengrass-linux-armv7l-1.8.1.tar.gz` 檔案放在該目錄中將導致測試失敗。

### 選項 2： AWS IoT Greengrass 搭配 AWS IoT Device Tester 使用 的現有安裝
<a name="existing-gg"></a>

設定 IDT 將 `greengrassLocation` 屬性新增至 `<device-tester-extract-location>/configs` 資料夾中的 `device.json` 檔案，以測試安裝在裝置上的 AWS IoT Greengrass Core 軟體。例如：

```
"greengrassLocation" : "<path-to-greengrass-on-device>"
```

如需 `device.json` 詳細資訊，請參閱 [設定 device.json](set-config.md#device-config)。

在 Linux 裝置上， AWS IoT Greengrass 核心軟體的預設位置為 `/greengrass`。

**注意**  
您的裝置應安裝尚未啟動的 AWS IoT Greengrass Core 軟體。  
請確定您已在裝置上新增 `ggc_user` 使用者和 `ggc_group`。如需詳細資訊，請參閱 [AWS IoT Greengrass的環境設定](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html)。

## 設定主機電腦以存取待測裝置
<a name="configure-host"></a>

IDT 是在您的主機電腦上執行，而且必須能夠使用 SSH 連線到您的裝置。有兩個選項允許 IDT 取得待測裝置的 SSH 存取權：

1. 依照此處的指示來建立 SSH 金鑰對，並授權您的金鑰可以登入待測裝置，無需指定密碼。

1. 提供 `device.json` 檔案中每個裝置的使用者名稱和密碼。如需詳細資訊，請參閱[設定 device.json](set-config.md#device-config)。

您可以使用任何 SSL 實作來建立 SSH 金鑰。以下指示展示如何使用 [SSH-KEYGEN](https://www.ssh.com/ssh/keygen/) 或 [ PuTTYgen](https://www.ssh.com/ssh/putty/windows/puttygen) (適用於 Windows)。如果您使用的是另一個 SSL 實作，請參閱該實作的文件。

IDT 使用 SSH 金鑰向待測裝置進行驗證。

**使用 SSH-KEYGEN 建立 SSH 金鑰**

1. 建立 SSH 金鑰。

   您可以使用 Open SSH **ssh-keygen** 命令建立 SSH 金鑰對。如果您的主機電腦上已有 SSH 金鑰對，則最佳實務是特別為 IDT 建立 SSH 金鑰對。如此一來，在您完成測試之後，若沒有輸入密碼，主機電腦再也無法連接至您的裝置。它還可讓您限制只有需要遠端裝置的人，才能存取該裝置。
**注意**  
Windows 沒有安裝的 SSH 用戶端。如需在 Windows 上安裝 SSH 用戶端的詳細資訊，請參閱[下載 SSH 用戶端軟體](https://www.ssh.com/ssh/#sec-Download-client-software)。

   **ssh-keygen** 命令會提示您提供金鑰對的存放名稱和路徑。根據預設，該金鑰對檔案會命名為 `id_rsa` (私有金鑰) 和 `id_rsa.pub` (公有金鑰)。在 macOS 和 Linux 上，這些檔案的預設位置是 `~/.ssh/`。在 Windows 上，預設位置為 `C:\Users\<user-name>\.ssh`。

   出現提示時，請輸入金鑰字詞來保護您的 SSH 金鑰。如需詳細資訊，請參閱[產生新的 SSH 金鑰](https://www.ssh.com/ssh/keygen/)。

1. 將授權的 SSH 金鑰新增至待測裝置。

   IDT 必須使用您的 SSH 私有金鑰登入待測裝置。請從您的主機電腦使用 **ssh-copy-id** 命令，授權您的 SSH 私有金鑰登入待測裝置。此命令會將您的公有金鑰新增至待測裝置上的 `~/.ssh/authorized_keys` 檔案。例如：

   **\$1 ssh-copy-id *<remote-ssh-user>*@*<remote-device-ip>***

   *remote-ssh-user* 是用來登入測試裝置的使用者名稱，而 *remote-device-ip* 是要執行測試的測試裝置 IP 地址。例如：

   **ssh-copy-id pi@192.168.1.5**

   出現提示時，請輸入您在 **ssh-copy-id** 命令中指定的使用者名稱密碼。

   **ssh-copy-id** 假設公有金鑰名為 `id_rsa.pub`，並存放在預設位置 (macOS 和 Linux 為 `~/.ssh/`，Windows 為 `C:\Users\<user-name>\.ssh`)。如果您給公有金鑰不同的名稱，或將其存放在不同的位置中，則必須在 **ssh-copy-id** 中使用 **-i** 選項，以指定 SSH 公有金鑰的完整路徑 (例如，**ssh-copy-id -i \$1/my/path/myKey.pub**)。如需有關建立 SSH 金鑰和複製公有金鑰的詳細資訊，請參閱 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

**使用 PuTTYgen 建立 SSH 金鑰 (僅限 Windows)**

1. 確定您的待測裝置上已安裝 OpenSSH 伺服器和用戶端。如需詳細資訊，請參閱 [OpenSSH](https://www.openssh.com/)。

1. 在您的待測裝置上安裝 [PuTTYgen](https://www.puttygen.com/)。

1. 開啟 PuTTYgen。

1. 選擇 **Generate (產生)**，並將滑鼠游標移到方塊內以產生私有金鑰。

1. 從 **Conversions (轉換)** 功能表中，選擇 **Export OpenSSH key (匯出 OpenSSH 金鑰)**，然後以 `.pem` 副檔名儲存私有金鑰。

1. 將公有金鑰新增至待測裝置上的 `/home/<user>/.ssh/authorized_keys` 檔案。

   1. 從 PuTTYgen 視窗複製公有金鑰文字。

   1. 使用 PuTTY 在您的待測裝置上建立工作階段。

      1. 從命令提示字元或 Windows Powershell 視窗中，執行下列命令：

         **C:/*<path-to-putty>*/putty.exe -ssh *<user>*@*<dut-ip-address>***

      1. 出現提示時，請輸入您裝置的密碼。

      1. 使用 vi 或其他文字編輯器，將公有金鑰附加到待測裝置上的 `/home/<user>/.ssh/authorized_keys` 檔案。

1. 使用您的使用者名稱、IP 地址，以及私有金鑰檔案的路徑 (您剛針對待測裝置將該檔案儲存在主機電腦上) 來更新 `device.json` 檔案。如需詳細資訊，請參閱[設定 device.json](set-config.md#device-config)。請務必提供私有金鑰的完整路徑和檔案名稱，並使用正斜線 ('/')。例如，若為 Windows 路徑 `C:\DT\privatekey.pem`，請在 `device.json` 檔案中使用 `C:/DT/privatekey.pem`。

## 在您的裝置上設定使用者許可
<a name="root-access"></a>

IDT 會在待測裝置的各種目錄和檔案上執行操作。其中某些操作需要較高的許可 (使用 **sudo**)。若要自動化這些操作，IDT for AWS IoT Greengrass 必須能夠使用 sudo 執行命令，而不會提示您輸入密碼。

在待測裝置上依照以下步驟，在不提示輸入密碼的情況下允許 sudo 存取。

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

**將使用者新增至 sudo 群組**

1. 在待測裝置上，執行 `sudo usermod -aG sudo <username>`。

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

1. 若要驗證是否已成功新增您的使用者名稱，請執行 **sudo echo test**。如果未提示您輸入密碼，表示已正確設定您的使用者。

1. 開啟 `/etc/sudoers` 檔案，然後在檔案結尾處新增以下一行：

   `<ssh-username> ALL=(ALL) NOPASSWD: ALL`

## 設定您的裝置以測試選用功能
<a name="optional-feature-config"></a>

下列主題說明如何設定您的裝置以針對選用功能執行 IDT 測試。只有在您想要測試這些功能時，才需遵循這些設定步驟。否則，請繼續進行[設定 IDT AWS IoT Greengrass 設定以執行資格套件](set-config.md)。

**Topics**
+ [驗證待測裝置的 AWS IoT Greengrass 相依性](#install-gg-dependencies)
+ [設定 AWS IoT Greengrass 軟體](#config-gg)
+ [設定主機電腦以存取待測裝置](#configure-host)
+ [在您的裝置上設定使用者許可](#root-access)
+ [設定您的裝置以測試選用功能](#optional-feature-config)
+ [選用：設定 IDT for 的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)
+ [選用：設定您的裝置以取得 ML 資格](idt-ml-qualification.md)

# 選用：設定 IDT for 的 Docker 容器 AWS IoT Greengrass
<a name="docker-config-setup"></a>

AWS IoT Greengrass 提供 Docker 映像和 Dockerfile，可讓您更輕鬆地在 Docker 容器中執行 AWS IoT Greengrass Core 軟體。設定 AWS IoT Greengrass 容器之後，您可以執行 IDT 測試。目前，僅支援 x86\$164 Docker 架構來執行 IDT for AWS IoT Greengrass。

此功能需要 IDT v2.3.0 或更新版本。

設定 Docker 容器以執行 IDT 測試的程序取決於您使用的是 提供的 Docker 映像或 Dockerfile AWS IoT Greengrass。
+ [使用 Docker 映像](#docker-config-setup-docker-image)。Docker 映像檔已安裝 AWS IoT Greengrass 核心軟體和相依性。
+ [使用 Dockerfile](#docker-config-setup-dockerfile)。Dockerfile 包含可用來建置自訂 AWS IoT Greengrass 容器映像的原始碼。您可以修改映像，以在不同平台架構上執行或減少映像大小。
**注意**  
AWS IoT Greengrass 不提供 AWS IoT Greengrass 核心軟體版本 1.11.1 的 Dockerfile 或 Docker 映像。若要在您自己的自訂容器映像上執行 IDT 測試，映像必須包含 提供的 Dockerfile 中定義的相依性 AWS IoT Greengrass。

當您 AWS IoT Greengrass 在 Docker 容器中執行 時，無法使用下列功能：<a name="docker-image-unsupported-features"></a>
+ 在 **Greengrass 容器**模式下執行[的連接器](connectors.md)。若要在 Docker 容器中執行連接器，連接器必須以 **No container (無容器)** 模式執行。若要尋找支援 **No container (無容器)** 模式的連接器，請參閱 [AWS提供的 Greengrass 連接器](connectors-list.md)。其中一些連接器具有隔離模式參數，您必須設定為 **No container (無容器)**。
+ [本機裝置和磁碟區資源](access-local-resources.md)。在 Docker 容器中執行的使用者定義 Lambda 函數必須直接存取核心上的裝置和磁碟區。

## 設定 提供的 Docker 映像 AWS IoT Greengrass
<a name="docker-config-setup-docker-image"></a>

請依照下列步驟設定 AWS IoT Greengrass Docker 映像以執行 IDT 測試。

**先決條件**

開始本教學課程之前，您必須執行下列動作。<a name="docker-image-prereq-list"></a>
+ 您必須根據您選擇的 AWS Command Line Interface (AWS CLI) 版本，在主機電腦上安裝下列軟體和版本。

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) 18.09 版或更新版本。舊版可能也適用，但我們建議使用 18.09 或更新版本。
  + AWS CLI 2.0.0 版或更新版本。
    + 若要安裝第 2 AWS CLI 版，請參閱[安裝第 2 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
    + 若要設定 AWS CLI，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
**注意**  
若要在 Windows 電腦上升級至更新 AWS CLI 版本 2，您必須重複 [MSI 安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html)程序。

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) 18.09 版或更新版本。舊版可能也適用，但我們建議使用 18.09 或更新版本。
  + [Python](https://www.python.org/downloads/) 3.6 版或更新版本。
  + [pip](https://pip.pypa.io/en/stable/installing) 版本 18.1 或更新版本。
  + AWS CLI 版本 - 第 1.17.10 版或更新版本
    + 若要安裝第 1 AWS CLI 版，請參閱[安裝第 1 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html)。
    + 若要設定 AWS CLI，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
    + 若要升級至最新版本的 第 1 AWS CLI 版，請執行下列命令。

      ```
      pip install awscli --upgrade --user
      ```
**注意**  
如果您在 Windows 上使用 AWS CLI 版本 1 的 [MSI 安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows)，請注意下列事項：  
如果第 1 AWS CLI 版安裝無法安裝 botocore，請嘗試使用 [Python 和 pip 安裝](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip)。
若要升級到更新 AWS CLI 版本 1，您必須重複 MSI 安裝程序。

------
+ 若要存取 Amazon Elastic Container Registry (Amazon ECR) 資源，您必須授予下列許可。
  + Amazon ECR 要求使用者透過 AWS Identity and Access Management (IAM) 政策授予`ecr:GetAuthorizationToken`許可，才能向登錄檔進行身分驗證，並從 Amazon ECR 儲存庫推送或提取映像。如需詳細資訊，請參閱《[Amazon Elastic Container Registry 使用者指南》中的 Amazon ECR 儲存庫政策範例](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)*和*[存取一個 Amazon ECR 儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket)。

 

1. 下載 Docker 映像並設定容器。您可以從 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 或 [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR) 下載預先建置的映像，並在 Windows、macOS 和 Linux (x86\$164) 平台上執行。

   若要從 Amazon ECR 下載 Docker 映像，請完成 中的所有步驟[步驟 1：從 Amazon ECR 取得 AWS IoT Greengrass 容器映像](run-gg-in-docker-container.md#docker-pull-image)。然後，返回此主題以繼續進行設定。

1. <a name="docker-linux-non-root"></a>僅限 Linux 使用者：確定執行 IDT 的使用者具備執行 Docker 命令的許可。如需詳細資訊，請參閱 Docker 文件中的[以非根使用者身分管理 Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。

1. <a name="docker-run-gg-container"></a>若要執行 AWS IoT Greengrass 容器，請針對您的作業系統使用 命令：

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + 將 *<host-path-to-kernel-config-file>* 替換為主機上核心組態檔案的路徑，並將 *<container-path>* 替換為容器中裝載磁碟區的路徑。

     主機上的核心組態圖通常位於 `/proc/config.gz` 或 `/boot/config-<kernel-release-date>`。您可以執行 `uname -r` 以尋找 *<kernel-release-date>* 值。

     **範例：**若要從 `/boot/config-<kernel-release-date>` 裝載組態檔

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **範例：**若要從 `proc/config.gz` 裝載組態檔

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令。

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ Windows ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**重要**  
使用 IDT 進行測試時，請勿包含用來執行映像以供一般 AWS IoT Greengrass 使用的`--entrypoint /greengrass-entrypoint.sh \`引數。

1. <a name="docker-config-next-steps"></a>下一步：[設定您的 AWS 登入資料和`device.json`檔案](set-config.md)。

## 設定 提供的 dockerfile AWS IoT Greengrass
<a name="docker-config-setup-dockerfile"></a>

請依照下列步驟設定從 Dockerfile 建置的 AWS IoT Greengrass Docker 映像檔，以執行 IDT 測試。

1. 從 [AWS IoT Greengrass Docker 軟體](what-is-gg.md#gg-docker-download) 中，將 Dockerfile 套件下載到您的主機電腦，並將其解壓縮。

1. 打開 `README.md`. 接下來的三個步驟，請參閱此檔案中的章節。

1. 請確定您符合**先決條件**一節中的需求。

1. 僅限 Linux 使用者：完成**啟用 Symlink 和 Hardlink 保護**和**啟用 IPv4 網路轉送**步驟。

1. 若要建置 Docker 映像，請完成**步驟 1 中的所有步驟。建置 AWS IoT Greengrass Docker 映像**。然後，返回此主題以繼續進行設定。

1. <a name="docker-run-gg-container"></a>若要執行 AWS IoT Greengrass 容器，請針對您的作業系統使用 命令：

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + 將 *<host-path-to-kernel-config-file>* 替換為主機上核心組態檔案的路徑，並將 *<container-path>* 替換為容器中裝載磁碟區的路徑。

     主機上的核心組態圖通常位於 `/proc/config.gz` 或 `/boot/config-<kernel-release-date>`。您可以執行 `uname -r` 以尋找 *<kernel-release-date>* 值。

     **範例：**若要從 `/boot/config-<kernel-release-date>` 裝載組態檔

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **範例：**若要從 `proc/config.gz` 裝載組態檔

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令。

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ Windows ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 將命令中的 *<image-repository>*:*<tag>* 替換為儲存庫的名稱和目標映像的標籤。

     **範例：**指向最新版的 AWS IoT Greengrass Core 軟體

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     若要取得 AWS IoT Greengrass Docker 映像的清單，請執行下列命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**重要**  
使用 IDT 進行測試時，請勿包含用來執行映像以供一般 AWS IoT Greengrass 使用的`--entrypoint /greengrass-entrypoint.sh \`引數。

1. <a name="docker-config-next-steps"></a>下一步：[設定您的 AWS 登入資料和`device.json`檔案](set-config.md)。

## 對 IDT for 的 Docker 容器設定進行故障診斷 AWS IoT Greengrass
<a name="docker-config-setup-troubleshooting"></a>

使用下列資訊來協助疑難排解執行 Docker 容器進行 IDT AWS IoT Greengrass 測試的問題。

### 警告：載入 config file:/home/user/.docker/config.json - stat /home/<user>/.docker/config.json 時發生錯誤：權限遭拒
<a name="docker-config-permissions-linux"></a>

如果在 Linux 上執行 `docker` 命令時發生錯誤，請執行下列命令。使用執行 IDT 的使用者取代下列命令中的 *<user>*。

```
sudo chown <user>:<user> /home/<user>/.docker -R
sudo chmod g+rwx /home/<user>/.docker -R
```

# 選用：設定您的裝置以取得 ML 資格
<a name="idt-ml-qualification"></a>

IDT for AWS IoT Greengrass 提供機器學習 (ML) 資格測試，以驗證您的裝置是否可以使用雲端訓練模型在本機執行 ML 推論。

若要執行 ML 資格測試，您必須先按照[設定您的裝置以執行 IDT 測試](device-config-setup.md)中所述設定裝置。然後，依照本主題中的步驟，安裝您想要執行之 ML 框架的相依性。

需要 IDT v3.1.0 或更高版本才能執行 ML 資格的測試。

## 安裝 ML 框架相依性
<a name="ml-qualification-framework-dependencies"></a>

所有 ML 框架相依性必須安裝在 `/usr/local/lib/python3.x/site-packages` 目錄下。為了確保它們安裝在正確的目錄下，我們建議您在安裝相依性時使用 `sudo` root 許可。資格測試不支援虛擬環境。

**注意**  
如果您要測試使用[容器化](lambda-group-config.md#lambda-containerization-considerations) （在 **Greengrass 容器**模式下） 執行的 Lambda 函數，`/usr/local/lib/python3.x`則不支援在 下建立 Python 程式庫的符號連結。若要避免錯誤，您必須在正確的目錄下安裝相依性。

按照下列步驟，安裝目標框架的相依性：
+ [安裝 MXNet 相依性](#ml-qualification-mxnet-dependencies)
+ [安裝 TensorFlow 相依性](#ml-qualification-tensorflow-dependencies)
+ [安裝 DLR 相依性](#ml-qualification-dlr-dependencies)

 

## 安裝 Apache MXNet 相依性
<a name="ml-qualification-mxnet-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 資格測試具有以下相依性：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，則必須建立從 Python 3.7 到 Python 3.6 二進位檔的符號連結。這會設定您的裝置以符合 AWS IoT Greengrass的 Python 需求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ Apache MXNet v1.2.1 或更高版本。
+ NumPy. 該版本必須與您的 MxNet 版本相容。

### 安裝 MXNet
<a name="ml-qualification-mxnet-install"></a>

請遵循 MxNet 文件中的指示來[安裝 MxNet](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&)。

**注意**  
<a name="run-python3-commands"></a>如果您的裝置上同時安裝了 Python 2.x 和 Python 3.x，則請在您執行的安裝相依性命令中使用 Python 3.x。

### 驗證 MxNet 安裝
<a name="ml-qualification-mxnet-validate"></a>

選擇下列其中一個選項來驗證 MXNet 安裝。

#### 選項 1：使用 SSH 連接到您的裝置並執行指令碼
<a name="ml-qualification-validate-mxnet-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>使用 SSH 連接到您的裝置。

1. <a name="ssh-validate-framework-install-run-scripts"></a>執行下列指令碼，確認相依性已正確安裝。

   ```
   sudo python3.7 -c "import mxnet; print(mxnet.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>輸出會列印版本號碼，指令碼應該會沒有錯誤地退出。

#### 選項 2：執行 IDT 相依性測試
<a name="ml-qualification-validate-mxnet-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>執行框架的相依性測試。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id mxnet_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>測試摘要會顯示 `mldependencies` 的 `PASSED` 結果。

 

## 安裝 TensorFlow 相依性
<a name="ml-qualification-tensorflow-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 資格測試具有以下相依性：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，則必須建立從 Python 3.7 到 Python 3.6 二進位檔的符號連結。這會設定您的裝置以符合 AWS IoT Greengrass的 Python 需求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ TensorFlow 1.x.

### 安裝 TensorFlow
<a name="ml-qualification-tensorflow-install"></a>

按照 TensorFlow 文件中的說明，[使用 pip](https://www.tensorflow.org/install/pip) 或[從來源](https://www.tensorflow.org/install/source)安裝 TensorFlow 1.x。

**注意**  
<a name="run-python3-commands"></a>如果您的裝置上同時安裝了 Python 2.x 和 Python 3.x，則請在您執行的安裝相依性命令中使用 Python 3.x。

### 驗證 TensorFlow 安裝
<a name="ml-qualification-tensorflow-validate"></a>

選擇下列其中一個選項來驗證 TensorFlow 安裝。

#### 選項 1：使用 SSH 連接到您的裝置並執行指令碼
<a name="ml-qualification-validate-tensorflow-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>使用 SSH 連接到您的裝置。

1. 執行下列指令碼，確認相依性已正確安裝。

   ```
   sudo python3.7 -c "import tensorflow; print(tensorflow.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>輸出會列印版本號碼，指令碼應該會沒有錯誤地退出。

#### 選項 2：執行 IDT 相依性測試
<a name="ml-qualification-validate-tensorflow-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>執行框架的相依性測試。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id tensorflow_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>測試摘要會顯示 `mldependencies` 的 `PASSED` 結果。

 

## 安裝 Amazon SageMaker AI Neo Deep Learning Runtime (DLR) 相依性
<a name="ml-qualification-dlr-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 資格測試具有以下相依性：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，則必須建立從 Python 3.7 到 Python 3.6 二進位檔的符號連結。這會設定您的裝置以符合 AWS IoT Greengrass的 Python 需求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ SageMaker AI Neo DLR。
+ numpy.

安裝 DLR 測試相依性之後，您必須[編譯模型](#ml-qualification-dlr-compile-model)。

### 安裝 DLR
<a name="ml-qualification-dlr-install"></a>

請依照 DLR 文件中的指示[安裝 Neo DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html#building-on-linux)。

**注意**  
<a name="run-python3-commands"></a>如果您的裝置上同時安裝了 Python 2.x 和 Python 3.x，則請在您執行的安裝相依性命令中使用 Python 3.x。

### 驗證 DLR 安裝
<a name="ml-qualification-dlr-validate"></a>

選擇下列其中一個選項來驗證 DLR 安裝。

#### 選項 1：使用 SSH 連接到您的裝置並執行指令碼
<a name="ml-qualification-validate-dlr-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>使用 SSH 連接到您的裝置。

1. <a name="ssh-validate-framework-install-run-scripts"></a>執行下列指令碼，確認相依性已正確安裝。

   ```
   sudo python3.7 -c "import dlr; print(dlr.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>輸出會列印版本號碼，指令碼應該會沒有錯誤地退出。

#### 選項 2：執行 IDT 相依性測試
<a name="ml-qualification-validate-dlr-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>執行框架的相依性測試。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id dlr_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>測試摘要會顯示 `mldependencies` 的 `PASSED` 結果。

## 編譯 DLR 模型
<a name="ml-qualification-dlr-compile-model"></a>

您必須先編譯 DLR 模型，才能將其用於 ML 資格測試。針對步驟，選擇以下其中一個選項：

### 選項 1：使用 Amazon SageMaker AI 編譯模型
<a name="ml-qualification-compile-dlr-option-1"></a>

請依照下列步驟使用 SageMaker AI 編譯 IDT 提供的 ML 模型。此模式已使用 Apache MXNET 預先訓練。

1. 確認 SageMaker AI 支援您的裝置類型。如需詳細資訊，請參閱 *Amazon SageMaker AI API 參考*中的[目標裝置選項](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html#sagemaker-Type-OutputConfig-TargetDevice)。如果 SageMaker AI 目前不支援您的裝置類型，請遵循中的步驟[選項 2：使用 TVM 編譯 DLR 模型](#ml-qualification-compile-dlr-option-2)。
**注意**  
使用 SageMaker AI 編譯的模型執行 DLR 測試可能需要 4 或 5 分鐘。在這段時間內不要停止 IDT。

1. <a name="compile-dlr-download-uncompiled-model"></a>下載包含適用於 DLR 之未編譯、預先訓練 MxNet 模型的 tarball 檔案：
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>解壓縮 tarball。此命令會產生以下目錄結構。  
![\[resnet18 目錄包含三個檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. 將 `synset.txt` 移出 `resnet18` 目錄。記下新位置。您稍後會將此檔案複製到編譯的模型目錄中。

1. 壓縮 `resnet18` 目錄的內容。

   ```
   tar cvfz model.tar.gz resnet18v1-symbol.json resnet18v1-0000.params
   ```

1. 將壓縮檔案上傳到 中的 Amazon S3 儲存貯體 AWS 帳戶，然後遵循[編譯模型 （主控台）](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation-console.html) 中的步驟來建立編譯任務。

   1. 對於 **Input configuration (輸入組態)**，請使用下列值：
      + 對於 **Data input configuration (資料輸入組態)**，請輸入 `{"data": [1, 3, 224, 224]}`。
      + 對於 **Machine learning framework (機器學習框架)**，請選擇 `MXNet`。

   1. 對於 **Output configuration (輸出組態)**，請使用下列值：
      + 針對 **S3 輸出位置**，輸入您要存放已編譯模型之 Amazon S3 儲存貯體或資料夾的路徑。
      + 對於 **Target device (目標裝置)**，選擇您的裝置類型。

1. 從您指定的輸出位置下載已編譯的模型，然後解壓縮檔案。

1. 將 `synset.txt` 複製到已編譯的模型目錄中。

1. 將已編譯模型目錄的名稱變更為 `resnet18`。

   您編譯的模型目錄必須具有以下目錄結構。  
![\[resnet18 編譯的模型目錄包含四個檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-sm.png)

### 選項 2：使用 TVM 編譯 DLR 模型
<a name="ml-qualification-compile-dlr-option-2"></a>

請依照下列步驟，使用 TVM 編譯 IDT 所提供的 ML 模型。此模型已使用 Apache MxNet 進行預先訓練，因此您必須在編譯模型的電腦或裝置上安裝 MxNet。若要安裝 MxNet，請依照 [MxNet 文件](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&)中的指示進行。

**注意**  
我們建議您在目標裝置上編譯模型。這種做法是選用的，但它可以協助確保相容性並減輕潛在問題。

 

1. <a name="compile-dlr-download-uncompiled-model"></a>下載包含適用於 DLR 之未編譯、預先訓練 MxNet 模型的 tarball 檔案：
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>解壓縮 tarball。此命令會產生以下目錄結構。  
![\[resnet18 目錄包含三個檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. 遵循 TVM 文件中的指示，[從您平台的來源建置和安裝 TVM](https://docs.tvm.ai/install/from_source.html)。

1. 建置 TVM 之後，請針對 resnet18 模型執行 TVM 編譯。以下步驟是以 TVM 文件中的[編譯深度學習模型的快速入門教學](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#sphx-glr-tutorials-get-started-relay-quick-start-py)為基礎。

   1. 從複製的 TVM 儲存庫中開啟 `relay_quick_start.py` 檔案。

   1. 更新[在轉送中定義神經網路](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#define-neural-network-in-relay)的程式碼。您可以使用下列其中一個選項：
      + 選項 1：使用 `mxnet.gluon.model_zoo.vision.get_model` 取得轉送模組和參數：

        ```
        from mxnet.gluon.model_zoo.vision import get_model
        block = get_model('resnet18_v1', pretrained=True)
        mod, params = relay.frontend.from_mxnet(block, {"data": data_shape})
        ```
      + 選項 2：從您在步驟 1 中下載的未編譯模型，將下列檔案複製到與 `relay_quick_start.py` 檔案相同的目錄中。這些檔案包含轉送模組和參數。
        + `resnet18v1-symbol.json`
        + `resnet18v1-0000.params`

   1. 更新[儲存並載入已編譯模組](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#save-and-load-compiled-module)的程式碼，以使用下列程式碼。

      ```
      from tvm.contrib import util
      path_lib = "deploy_lib.so"
      #  Export the model library based on your device architecture
      lib.export_library("deploy_lib.so", cc="aarch64-linux-gnu-g++")
      with open("deploy_graph.json", "w") as fo:
          fo.write(graph)
      with open("deploy_param.params", "wb") as fo:
          fo.write(relay.save_param_dict(params))
      ```

   1. 建置模型：

      ```
      python3 tutorials/relay_quick_start.py --build-dir ./model
      ```

      此命令會產生下列檔案。
      + `deploy_graph.json`
      + `deploy_lib.so`
      + `deploy_param.params`

1. 將產生的模型檔案複製到名為 `resnet18` 的目錄中。這是您編譯的模型目錄。

1. 將編譯後的模型目錄複製到您的主機電腦。然後從您在步驟 1 中下載的未編譯模型，將 `synset.txt` 複製到已編譯的模型目錄中。

   您編譯的模型目錄必須具有以下目錄結構。  
![\[resnet18 編譯的模型目錄包含四個檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-tvm.png)

接著，[設定您的 AWS 登入資料和`device.json`檔案](set-config.md)。

# 設定 IDT AWS IoT Greengrass 設定以執行資格套件
<a name="set-config"></a>

執行測試之前，您必須在主機電腦上設定 AWS 登入資料和裝置的設定。

## 設定您的 AWS 登入資料
<a name="cfg-aws-gg"></a>

您必須在 `<device-tester-extract-location> /configs/config.json` 檔案中設定 IAM 使用者登入資料。使用在 中建立之 IDT for AWS IoT Greengrass 使用者的登入資料[建立和設定 AWS 帳戶](dev-tst-prereqs.md#config-aws-account-for-idt)。您可以使用下列兩種方式的其中之一指定登入資料：
+ 憑證檔案
+ 環境變數

### 使用 AWS 登入資料檔案設定登入資料
<a name="config-cred-file"></a>

IDT 會使用與 AWS CLI相同的登入資料檔案。如需詳細資訊，請參閱[組態與登入資料檔案](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)。

登入資料檔案的位置會有所不同，取決於您使用的作業系統：
+ macOS, Linux: `~/.aws/credentials`
+ Windows：`C:\Users\UserName\.aws\credentials`

以下列格式將您的 AWS 登入資料新增至 `credentials` 檔案：

```
[default]
aws_access_key_id = <your_access_key_id>
aws_secret_access_key = <your_secret_access_key>
```

若要 AWS IoT Greengrass 將 IDT for 設定為使用 `credentials` 檔案中的 AWS 登入資料，請編輯 `config.json` 檔案，如下所示：

```
{
	"awsRegion": "us-west-2",
	"auth": {
		"method": "file",
		"credentials": {
			"profile": "default"
		}
	}
}
```

**注意**  
如果您不使用`default` AWS 設定檔，請務必變更`config.json`檔案中的設定檔名稱。如需詳細資訊，請參閱[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)。

### 使用環境變數設定 AWS 登入資料
<a name="config-env-vars"></a>

環境變數是由作業系統維護且由系統命令使用的變數。如果您關閉 SSH 工作階段，則不會儲存它們。IDT for AWS IoT Greengrass 可以使用 `AWS_ACCESS_KEY_ID`和 `AWS_SECRET_ACCESS_KEY` 環境變數來存放您的 AWS 登入資料。

若要在 Linux、macOS 或 Unix 上設定這些變數，請使用 **export**：

```
export AWS_ACCESS_KEY_ID=<your_access_key_id>
export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

若要在 Windows 上設定這些變數，請使用 **set**：

```
set AWS_ACCESS_KEY_ID=<your_access_key_id>
set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

若要設定 IDT 來使用環境變數，請在 `config.json` 檔案中編輯 `auth` 區段。請見此處範例：

```
{
	"awsRegion": "us-west-2",
	"auth": {
		"method": "environment"
	}
}
```

## 設定 device.json
<a name="device-config"></a>

除了 AWS 登入資料之外，IDT for AWS IoT Greengrass 還需要測試執行所在裝置的相關資訊 （例如 IP 地址、登入資訊、作業系統和 CPU 架構）。

您必須使用位於 ` <device_tester_extract_location>/configs/device.json` 中的 `device.json` 範本提供此資訊：

------
#### [ Physical device ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "os",
        "value": "linux | ubuntu | openwrt"
      },
      {
        "name": "arch",
        "value": "x86_64 | armv6l | armv7l | aarch64"
      },
      {
        "name": "container",
        "value": "yes | no"
      },
      {
        "name": "docker",
        "value": "yes | no"
      },
      {
        "name": "streamManagement",
        "value": "yes | no"
      },
      {
        "name": "hsi",
        "value": "yes | no"
      },
      {
        "name": "ml",
        "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no"
      },
      *********** Remove the section below if the device is not qualifying for ML **************,
      {
        "name": "mlLambdaContainerizationMode",
        "value": "container | process | both"
      },
      {
        "name": "processor",
        "value": "cpu | gpu"
      },
      ******************************************************************************************
    ],
    *********** Remove the section below if the device is not qualifying for HSI ***************
    "hsm": {
      "p11Provider": "/path/to/pkcs11ProviderLibrary",
      "slotLabel": "<slot_label>",
      "slotUserPin": "<slot_pin>",
      "privateKeyLabel": "<key_label>",
      "openSSLEngine": "/path/to/openssl/engine"
    },
    ********************************************************************************************
    *********** Remove the section below if the device is not qualifying for ML ****************
    "machineLearning": {
      "dlrModelPath": "/path/to/compiled/dlr/model",
      "environmentVariables": [
        {
          "key": "<environment-variable-name>",
          "value": "<Path:$PATH>"
        }
      ],
      "deviceResources": [
        {
          "name": "<resource-name>",
          "path": "<resource-path>",
          "type": "device | volume"
        }
      ]
    },
    ******************************************************************************************
    "kernelConfigLocation": "",
    "greengrassLocation": "",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": 22,
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

**注意**  
如果 `method` 是設定為 `pki`，則指定 `privKeyPath`  
如果 `method` 是設定為 `password`，則指定 `password`

------
#### [ Docker container ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "os",
        "value": "linux | ubuntu | openwrt"
      },
      {
        "name": "arch",
        "value": "x86_64"
      },
      {
        "name": "container",
        "value": "no"
      },
      {
        "name": "docker",
        "value": "no"
      },
      {
        "name": "streamManagement",
        "value": "yes | no"
      },
      {
        "name": "hsi",
        "value": "no"
      },
      {
        "name": "ml",
        "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no"
      },
      *********** Remove the section below if the device is not qualifying for ML **************,
      {
        "name": "mlLambdaContainerizationMode",
        "value": "process"
      },
      {
        "name": "processor",
        "value": "cpu | gpu"
      },
      ******************************************************************************************
    ],
    *********** Remove the section below if the device is not qualifying for ML ****************
    "machineLearning": {
      "dlrModelPath": "/path/to/compiled/dlr/model",
      "environmentVariables": [
        {
          "key": "<environment-variable-name>",
          "value": "<Path:$PATH>"
        }
      ],
      "deviceResources": [
        {
          "name": "<resource-name>",
          "path": "<resource-path>",
          "type": "device | volume"
        }
      ]
    },
    ******************************************************************************************
    "kernelConfigLocation": "",
    "greengrassLocation": "",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "docker",
          "containerId": "<container-name | container-id>",
          "containerUser": "<user>"
        }
      }
    ]
  }
]
```

------

如下所述，包含值的所有欄位皆為必要：

`id`  
使用者定義的英數字元 ID，可唯一識別裝置的集合，稱為「裝置集區」**。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件，集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

`sku`  
可唯一識別測試裝置的英數字元值。SKU 用來追蹤合格的主機板。  
如果您想要在 AWS Partner Device Catalog 中列出您的電路板，您在此處指定的 SKU 必須符合您在列出程序中使用的 SKU。

`features`  
包含裝置支援功能的陣列。所有功能都是必要的。    
`os` 和 `arch`  
  
支援的作業系統 (OS) 和架構組合：  
+ `linux`, `x86_64`
+ `linux`, `armv6l`
+ `linux`, `armv7l`
+ `linux`, `aarch64`
+ `ubuntu`, `x86_64`
+ `openwrt`, `armv7l`
+ `openwrt`, `aarch64`
如果您使用 IDT 來測試在 Docker 容器中 AWS IoT Greengrass 執行，則僅支援 x86\$164 Docker 架構。  
`container`  
<a name="description-container"></a>驗證裝置是否符合在 Greengrass 核心上以容器模式執行 Lambda 函數的所有軟體和硬體需求。  
有效值為 `yes`或 `no`。  
`docker`  
<a name="description-docker"></a>驗證裝置是否符合所有必要的技術相依性，以使用 Greengrass Docker 應用程式部署連接器來執行容器  
有效值為 `yes`或 `no`。  
`streamManagement`  
<a name="description-sm"></a>驗證裝置是否符合執行 AWS IoT Greengrass 串流管理員所需的所有技術相依性。  
有效值為 `yes`或 `no`。  
`hsi`  
<a name="description-hsi"></a>驗證提供的 HSI 共用程式庫是否可以與硬體安全模組 (HSM) 溝通，並正確實作所需的 PKCS\$111 API。HSM 和共用程式庫必須能夠簽署 CSR、執行 TLS 操作並提供正確的金鑰長度和公開金鑰演算法。  
有效值為 `yes`或 `no`。  
`ml`  
<a name="description-ml"></a>驗證裝置符合所有必要的技術相依性，以便在本機執行 ML 推論。  
有效值可以是 `mxnet`、`tensorflow`、 `dlr`和 的任意組合 `no`（例如 `mxnet`、`mxnet,tensorflow`、 `mxnet,tensorflow,dlr`或 `no`)。  
`mlLambdaContainerizationMode`  
驗證裝置是否符合在 Greengrass 裝置上以容器模式執行 ML 推論所需的所有技術相依性。  
有效值為 `container`、 `process`或 `both`。  
`processor`  
驗證裝置是否符合指定處理器類型的所有硬體需求。  
有效值為 `cpu`或 `gpu`。
如果您不想使用 `container`、`docker`、`hsi`、 `streamManager`或 `ml`功能，您可以將對應的 設定為 `value` `no`。  
Docker 僅支援 `streamManagement`和 的功能資格`ml`。

`machineLearning`  
選用。ML 資格測試的組態資訊。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](#device-json-ml-qualification)。

`hsm`  
選用。使用 AWS IoT Greengrass 硬體安全模組 (HSM) 進行測試的組態資訊。否則，應省略 `hsm` 屬性。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。    
`hsm.p11Provider`  
PKCS\$111 實作的 libdl-loadable 程式庫的絕對路徑。  
`hsm.slotLabel`  
用於識別硬體模組的插槽標籤。  
`hsm.slotUserPin`  
用來向模組驗證 AWS IoT Greengrass 核心的使用者 PIN 碼。  
`hsm.privateKeyLabel`  
用於識別硬體模組中之金鑰的標籤。  
`hsm.openSSLEngine`  
OpenSSL 引擎 `.so` 檔案的絕對路徑，此檔案可在 OpenSSL 上啟用 PKCS\$111 支援。由 OTA AWS IoT Greengrass 更新代理程式使用。

`devices.id`  
使用者定義的唯一識別符，用於識別要測試的裝置。

`connectivity.protocol`  
用來與此裝置通訊的通訊協定。目前，唯一支援的值是實體裝置的 `ssh`，以及 Docker 容器的 `docker`。

`connectivity.ip`  
要測試之裝置的 IP 位址。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。

`connectivity.containerId`  
要測試之 Docker 容器的容器 ID 或名稱。  
<a name="connectivity-protocol-docker-only"></a>只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。

`connectivity.auth`  
連線的驗證資訊。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。    
`connectivity.auth.method`  
用來透過指定的連線通訊協定存取裝置的驗證方法。  
支援的值如下：  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
用於驗證的燈入資料。    
`connectivity.auth.credentials.password`  
用於登入要測試裝置的密碼。  
只有當 `connectivity.auth.method` 設為 `password` 時，才會套用此值。  
`connectivity.auth.credentials.privKeyPath`  
用來登入待測裝置之私有金鑰的完整路徑。  
只有當 `connectivity.auth.method` 設為 `pki` 時，才會套用此值。  
`connectivity.auth.credentials.user`  
登入要測試之裝置的使用者名稱。  
`connectivity.auth.credentials.privKeyPath`  
用來登入要測試之裝置的私有金鑰的完整路徑。

`connectivity.port`  
選用。用於 SSH 連線的連接埠號碼。  
預設值為 22。  
此屬性僅適用於 `connectivity.protocol` 設為 的情況`ssh`。

`greengrassLocation`  
您裝置上 AWS IoT Greengrass Core 軟體的位置。  
對於實體裝置，只有在您使用 的現有安裝時，才會使用此值 AWS IoT Greengrass。使用此屬性指示 IDT 使用安裝在您裝置上的 AWS IoT Greengrass Core 軟體版本。  
從 Docker 映像或 提供的 Dockerfile 在 Docker 容器中執行測試時 AWS IoT Greengrass，請將此值設定為 `/greengrass`。

`kernelConfigLocation`  
選用。核心組態檔案的路徑。 AWS IoT Device Tester 使用此檔案來檢查裝置是否已啟用必要的核心功能。如果未指定，IDT 會使用下列路徑來搜尋核心組態檔案： `/proc/config.gz`和 `/boot/config-<kernel-version>`。 AWS IoT Device Tester 會使用其找到的第一個路徑。

## 設定 device.json 以取得 ML 資格
<a name="device-json-ml-qualification"></a>

本節說明裝置組態檔案中適用於 ML 資格的選用屬性。如果您計劃針對 ML 資格執行測試，則必須定義適用於您的使用案例的屬性。

您可以使用 `device-ml.json` 範本來定義裝置的組態設定。此範本包含選用的 ML 屬性。您也可以使用 `device.json` 並新增 ML 資格屬性。這些檔案位於 `<device-tester-extract-location>/configs` 中，並包含 ML 資格屬性。如果您使用 `device-ml.json`，您必須在執行 IDT 測試之前將檔案重新命名為 `device.json`。

如需不適用於 ML 資格之裝置組態屬性的相關資訊，請參閱 [設定 device.json](#device-config)。

 

`features` 陣列中的 `ml`  
您的主機板支援的 ML 框架。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 如果您的主機板只支援一個框架，請指定該框架。例如：

  ```
  {
      "name": "ml",
      "value": "mxnet"
  }
  ```
+ 如果您的主機板支援多個框架，請以逗號分隔的清單指定框架。例如：

  ```
  {
      "name": "ml",
      "value": "mxnet,tensorflow"
  }
  ```

`features` 陣列中的 `mlLambdaContainerizationMode`  
您想要測試的[容器化模式](lambda-group-config.md#lambda-containerization-considerations)。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 選擇使用非容器化 Lambda 函數`process`執行 ML 推論程式碼。此選項需要 v1 AWS IoT Greengrass .10.x 或更新版本。
+ 選擇使用容器化 Lambda 函數`container`執行 ML 推論程式碼。
+ 選擇 `both` 以兩種模式執行 ML 推論程式碼。此選項需要 v1 AWS IoT Greengrass .10.x 或更新版本。

`features` 陣列中的 `processor`  
指出主機板支援的硬體加速器。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 如果您的主機板使用 CPU 做為處理器，請選擇 `cpu`。
+ 如果您的主機板使用 GPU 做為處理器，請選擇 `gpu`。

`machineLearning`  
選用。ML 資格測試的組態資訊。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。    
`dlrModelPath`  
使用 `dlr` 框架時需要。DLR 編譯模型目錄的絕對路徑，必須命名為 `resnet18`。如需詳細資訊，請參閱[編譯 DLR 模型](idt-ml-qualification.md#ml-qualification-dlr-compile-model)。  
以下是 macOS 上的範例路徑：`/Users/<user>/Downloads/resnet18`。  
`environmentVariables`  
鍵值組的陣列，可以動態地將設定傳遞給 ML 推論測試。對於 CPU 裝置為選用。您可以使用此區段來新增裝置類型所需的框架特定環境變數。如需這些需求的相關資訊，請參閱框架或裝置的官方網站。例如，若要在某些裝置上執行 MxNet 推論測試，可能需要下列環境變數。  

```
"environmentVariables": [
    ...
    {
        "key": "PYTHONPATH",      
        "value": "$MXNET_HOME/python:$PYTHONPATH"    
    },
    {
        "key": "MXNET_HOME",
        "value": "$HOME/mxnet/"
    },
    ...
]
```
`value` 欄位可能會根據您的 MxNet 安裝而有所不同。
如果您要測試在 GPU 裝置上使用[容器化](lambda-group-config.md#lambda-containerization-considerations)執行的 Lambda 函數，請新增 GPU 程式庫的環境變數。這使得 GPU 可以執行計算。若要使用不同的 GPU 程式庫，請參閱程式庫或裝置的官方文件。  
如果 `mlLambdaContainerizationMode` 功能設定為 `container` 或 `both`，請設定下列鍵。

```
"environmentVariables": [
    {
        "key": "PATH",      
        "value": "<path/to/software/bin>:$PATH"    
    },
    {
        "key": "LD_LIBRARY_PATH",      
        "value": "<path/to/ld/lib>"    
    },
    ...
]
```  
`deviceResources`  
GPU 裝置所需。包含可由 Lambda 函數存取的[本機資源](access-local-resources.md#lra-resource-types)。使用此區段可新增本機裝置和磁碟區資源。  
+ 對於裝置資源，請指定 `"type": "device"`。對於 GPU 裝置，裝置資源應該是 `/dev` 下的 GPU 相關裝置檔案。
**注意**  
`/dev/shm` 目錄是例外狀況。它僅能設為磁碟區資源。
+ 對於磁碟區資源，請指定 `"type": "volume"`。

# 執行 AWS IoT Greengrass 資格套件
<a name="run-tests"></a>

在您[設定必要組態](set-config.md)之後，便可開始測試。完整測試套件的執行時間取決於您的硬體。做為參考，在 Raspberry Pi 3B 上完成整個測試套件約需 30 分鐘。

下列範例 `run-suite` 命令示範如何執行裝置集區的資格測試。裝置集區是一組相同的裝置。

------
#### [ IDT v3.0.0 and later ]

執行指定的測試套件中的所有測試群組。  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1.0.0 --pool-id <pool-id>
```
使用 `list-suites` 命令列出 `tests` 資料夾中的測試套件。

執行測試套件中的特定測試群組。  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1.0.0 --group-id <group-id> --pool-id <pool-id>
```
使用 `list-groups` 命令列出測試套件中的測試群組。

執行測試群組中的特定測試案例。  

```
devicetester_[linux | mac | win_x86-64] run-suite --group-id <group-id> --test-id <test-id>
```

執行測試群組中的多個測試案例。  

```
devicetester_[linux | mac | win_x86-64] run-suite --group-id <group-id> --test-id <test-id1>,<test-id2>
```

列出測試群組中的測試案例。  

```
devicetester_[linux | mac | win_x86-64] list-test-cases --group-id <group-id>
```

`run-suite` 命令的選項是選擇性的。例如，如果 `device.json` 檔案中只定義一個裝置集區，則可以省略 `pool-id`。或者，如果您想要執行 `tests` 資料夾中最新的測試套件版本，則可以省略 `suite-id`。

**注意**  
如果線上有較新的測試套件版本，IDT 會提示您。如需詳細資訊，請參閱[設定預設更新行為](#idt-update-behavior)。

如需 `run-suite` 和其他 IDT 命令的詳細資訊，請參閱 [IDT for AWS IoT Greengrass 命令](#bk-cli)。

------
#### [ IDT v2.3.0 and earlier ]

執行指定套件中的所有測試群組。  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1 --pool-id <pool-id>
```

執行特定的測試群組。  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1 --group-id <group-id> --pool-id <pool-id>
```
如果您在單一裝置集區上執行單一測試套件，則 `suite-id` 和 `pool-id` 是選擇性的。這表示您的 `device.json` 檔案中只定義了一個裝置集區。

------

## 檢查 Greengrass 相依性
<a name="idt-dependency-checker"></a>

我們建議您在執行相關測試群組之前，先執行相依性檢查程式測試群組，以確定所有 Greengrass 相依性都已安裝。例如：
+ 在執行核心資格測試組之前執行 `ggcdependencies`。
+ 在執行容器特定測試群組之前執行 `containerdependencies`。
+ 在執行 Docker 特定測試群組之前執行 `dockerdependencies`。
+ 在執行串流管理員特定測試群組之前執行 `ggcstreammanagementdependencies`。

## 設定預設更新行為
<a name="idt-update-behavior"></a>

當您開始測試回合時，IDT 會在線上檢查是否有較新的測試套件版本。如果有新版本，IDT 會提示您更新至最新的可用版本。您可以設定 `upgrade-test-suite` (或 `u`) 旗標來控制預設的更新行為。有效的 值如下：
+ `y`。 IDT 會下載並使用最新的可用版本。
+ `n` (預設)。IDT 使用 `suite-id` 選項中指定的版本。如果`suite-id`未指定 ，IDT 會在 `tests` 資料夾中使用最新版本。

如果您未包含 `upgrade-test-suite` 旗標，IDT 會在有可用的更新時提示您，並等待 30 秒供您輸入 (`y` 或 `n`)。如果未輸入項目，它會預設為 `n` 並繼續執行測試。

下列範例顯示此功能的常用案例：

**自動使用測試群組可用的最新測試。**  

```
devicetester_linux run-suite -u y --group-id mqtt --pool-id DevicePool1
```

**在特定測試套件版本中執行測試。**  

```
devicetester_linux run-suite -u n --suite-id GGQ_1.0.0 --group-id mqtt --pool-id DevicePool1
```

**在執行時間提示更新。**  

```
devicetester_linux run-suite --pool-id DevicePool1
```

## IDT for AWS IoT Greengrass 命令
<a name="bk-cli"></a>

IDT 命令位於 `<device-tester-extract-location>/bin` 目錄中。將它們用於下列操作：

------
#### [ IDT v3.0.0 and later ]

`help`  <a name="idt-command-help"></a>
列出所指定命令的相關資訊。

`list-groups`  <a name="idt-command-list-groups"></a>
列出指定測試套件中的群組。

`list-suites`  <a name="idt-command-list-suites"></a>
列出可用的測試套件。

`list-supported-products`  
列出支援的 產品，在此案例中為 AWS IoT Greengrass IDT 版本，以及測試套件版本。

`list-test-cases`  
列出特定測試群組中的測試案例。支援下列選項：  
+ `group-id`。 要搜尋的測試群組。此選項為必要選項，且必須指定單一群組。

`run-suite`  
在裝置集區上執行測試套件。以下是一些支援的選項：  
+ `suite-id`。 要執行的測試套件版本。如果未指定，IDT 會使用 `tests` 資料夾中的最新版本。
+ `group-id`。 要執行的測試群組，以逗號分隔的清單。如果未指定，IDT 會執行測試套件中的所有測試群組。
+ `test-id`。 要執行的測試案例，以逗號分隔的清單。指定時，`group-id` 必須指定單一群組。
+ `pool-id`。 要測試的裝置集區。如果 `device.json` 檔案中已定義多個裝置集區，則必須指定集區。
+ `upgrade-test-suite`。 控制測試套件版本更新的處理方式。從 IDT v3.0.0 開始，IDT 會在線上檢查是否有更新的測試套件版本。如需詳細資訊，請參閱[測試套件版本](idt-gg-qualification.md#idt-test-suite-versions)。
+ `stop-on-first-failure`。 設定 IDT 在第一次失敗時停止執行。此選項應與 `group-id` 搭配使用以偵錯指定的測試群組。執行完整測試套件產生資格報告時，請勿使用此選項。
+ `update-idt`。 設定提示更新 IDT 的回應。`Y`當 輸入在 IDT 偵測到有較新的版本時停止測試執行。`N`當輸入繼續測試執行時。
+ `update-managed-policy`。輸入 `Y` 會在 IDT 偵測到使用者的受管政策未更新時停止測試執行。輸入 `N` 則繼續測試執行。
如需 `run-suite` 選項的詳細資訊，請使用下列 `help` 選項：  

```
devicetester_[linux | mac | win_x86-64] run-suite -h
```

------
#### [ IDT v2.3.0 and earlier ]

`help`  <a name="idt-command-help"></a>
列出所指定命令的相關資訊。

`list-groups`  <a name="idt-command-list-groups"></a>
列出指定測試套件中的群組。

`list-suites`  <a name="idt-command-list-suites"></a>
列出可用的測試套件。

`run-suite`  
在裝置集區上執行測試套件。  
如需 `run-suite` 選項的詳細資訊，請使用下列 `help` 選項：  

```
devicetester_[linux | mac | win_x86-64] run-suite -h
```

------

# 了解結果和日誌
<a name="results-logs"></a>

本節說明如何檢視和解譯 IDT 結果報告與日誌。

## 檢視結果
<a name="view-results"></a>

執行期間，IDT 會將錯誤寫入主控台、日誌檔和測試報告。IDT 完成資格測試套件後會產生兩份測試報告。您可以在 `<device-tester-extract-location>/results/<execution-id>/` 中找到這些報告。這兩份報告都會從資格測試套件執行擷取結果。

`awsiotdevicetester_report.xml` 是您提交 AWS 至 以在 Device AWS Partner Catalog 中列出裝置的資格測試報告。該報告包含下列元素：
+ IDT 版本。
+ 已測試的 AWS IoT Greengrass 版本。
+ `device.json` 檔案中指定的 SKU 和裝置集區名稱。
+ `device.json` 檔案中指定的裝置集區的功能。
+ 測試結果的彙總摘要。
+ 依照基於裝置功能 (例如，本機資源存取、影子、MQTT 等) 而測試的程式庫來分類的測試結果。

`GGQ_Result.xml` 報告採用 [JUnit XML 格式](https://llg.cubic.org/docs/junit/)。您可以將它整合到持續整合和部署平台，例如 [Jenkins](https://jenkins.io/)、[Bamboo](https://www.atlassian.com/software/bamboo) 等。該報告包含下列元素：
+ 測試結果的彙總摘要。
+ 依已測試 AWS IoT Greengrass 的功能分類測試結果。

## 解譯 IDT 報告
<a name="interpreting-results-gg"></a>

`awsiotdevicetester_report.xml` 或 `awsiotdevicetester_report.xml` 的報告區段會列出已執行的測試及結果。

第一個 XML 標籤 `<testsuites>` 包含測試執行的摘要。例如：

```
<testsuites name="GGQ results" time="2299" tests="28" failures="0" errors="0" disabled="0">
````<testsuites>` 標籤中使用的屬性

`name`  
測試套件的名稱。

`time`  
執行資格套件所花費的時間 (以秒為單位)。

`tests`  
執行的測試次數。

`failures`  
已執行但未通過的測試次數。

`errors`  
IDT 無法執行的測試次數。

`disabled`  
此屬性未使用，可忽略。

`awsiotdevicetester_report.xml` 檔案包含 `<awsproduct>` 標籤，其中包含關於受測產品和經過一系列測試驗證後之產品功能的資訊。`<awsproduct>` 標籤中使用的屬性

`name`  
受測產品名稱。

`version`  
受測產品版本。

`features`  
驗證的功能。標記為 `required` 的功能為提交主機板獲得資格時所需。以下片段顯示此資訊如何出現在 `awsiotdevicetester_report.xml` 檔案中。  

```
<feature name="aws-iot-greengrass-no-container" value="supported" type="required"></feature>
```
標記為 `optional` 的功能不需要進行資格測試。以下程式碼片段顯示選用功能。  

```
<feature name="aws-iot-greengrass-container" value="supported" type="optional"></feature> 
<feature name="aws-iot-greengrass-hsi" value="not-supported" type="optional"></feature>
```

如果必要功能沒有測試失敗或錯誤，您的裝置符合執行的技術需求， AWS IoT Greengrass 並且可以與 AWS IoT 服務互通。如果您想要在 Device AWS Partner Catalog 中列出您的裝置，您可以使用此報告做為資格證據。

如果測試發生失敗或錯誤，您可以檢閱 `<testsuites>` XML 標籤來識別失敗的測試。`<testsuites>` 標籤內的 `<testsuite>` XML 標籤會顯示測試群組的測試結果摘要。例如：

```
<testsuite name="combination" package="" tests="1" failures="0" time="161" disabled="0" errors="0" skipped="0">
```

其格式類似於 `<testsuites>` 標籤，但有不使用且可忽略的 `skipped` 屬性。在每個 `<testsuite>` XML 標籤內，測試群組每個執行的測試都有 `<testcase>` 標籤。例如：

```
<testcase classname="Security Combination (IPD + DCM) Test Context" name="Security Combination IP Change Tests sec4_test_1: Should rotate server cert when IPD disabled and following changes are made:Add CIS conn info and Add another CIS conn info" attempts="1"></testcase>>
````<testcase>` 標籤中使用的屬性

`name`  
測試的名稱。

`attempts`  
IDT 執行測試案例的次數。

當測試案例失敗或發生錯誤時，系統就會將 `<failure>` 或 `<error>` 標籤新增至 `<testcase>` 標籤，其中附有相關資訊以利故障診斷。例如：

```
<testcase classname="mcu.Full_MQTT" name="AFQP_MQTT_Connect_HappyCase" attempts="1">
	<failure type="Failure">Reason for the test failure</failure>
	<error>Reason for the test execution error</error>
</testcase>
```

## 檢視日誌
<a name="view-logs-gg"></a>

IDT 會在 `<devicetester-extract-location>/results/<execution-id>/logs` 中從測試執行產生日誌。該工具會產生兩組日誌：

`test_manager.log`  
從 AWS IoT Device Tester 的測試管理員元件產生的日誌 （例如，與組態、測試排序和報告產生相關的日誌）。

`<test_case_id>.log (for example, ota.log)`  
測試群組的日誌，包括來自待測裝置的日誌。測試失敗時，將會建立 tar.gz 檔案 (例如，`ota_prod_test_1_ggc_logs.tar.gz`)，內含所建立測試的待測裝置日誌。

如需詳細資訊，請參閱[IDT 故障 AWS IoT Greengrass 診斷](idt-troubleshooting.md)。