

终止支持通知：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 设备测试器 (IDT) AWS IoT Greengrass 来验证 AWS IoT Greengrass 核心软件是否在您的硬件上运行并且可以与通信。 AWS 云它还使用执行 end-to-end测试 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 设备目录中，请运行 AWS IoT Greengrass V2 资格套件以生成可以提交到的测试报告 AWS IoT。有关更多信息，请参阅[AWS 设备资格认证计划](https://aws.amazon.com/partners/dqp/)和[AWS IoT Greengrass V2 IDT 支持的版本。](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-test-versions.html)

除了测试设备外，IDT 还会在中 AWS IoT Greengrass 创建资源（例如， AWS IoT 事物、 AWS IoT Greengrass 群组、Lambda 函数等），以简化认证 AWS 账户 流程。

<a name="idt-aws-credentials"></a>要创建这些资源，IDT fo AWS IoT Greengrass r 使用`config.json`文件中配置的 AWS 凭据代表您进行 API 调用。这些资源将在测试过程的不同时间进行预置。

当您使用 IDT 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 设备测试器的 Support 政策 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 设备目录的资格。    
AWS IoT Greengrass 核心依赖关系  
验证您的设备是否满足 C AWS IoT Greengrass ore 软件的所有软件和硬件要求。  
在 [Docker 容器](docker-config-setup.md)中进行测试时，此测试组中的 `Software Packages Dependencies` 测试用例不适用。  
部署  
验证 Lambda 函数是否可以部署到您的设备上。  
MQTT  
通过检查 Greengrass 核心和客户端设备（即本地物联网设备）之间的本地通信来验证 AWS IoT Greengrass 消息路由器的功能。  
Over-the-Air （OTA）  
验证您的设备能否成功执行 C AWS IoT Greengrass ore 软件的 OTA 更新。  
<a name="n-a-docker"></a>在 [Docker 容器](docker-config-setup.md)中进行测试时，此测试组不适用。  
版本  
检查 AWS IoT Greengrass 提供的版本是否与您正在使用的 AWS IoT 设备测试器版本兼容。

**可选测试组**  
这些测试组可选。如果您选择符合可选测试的资格，则您的设备将在 AWS Partner 设备目录中列出其他功能。    
容器依赖项  
<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。 APIs HSM 和共享库必须能够签署 CSR，执行 TLS 操作，并提供正确的密钥长度和公有密钥算法。  
流管理器依赖项（IDT v2.2.0 及更高版本支持）  
<a name="description-sm"></a>验证设备是否满足运行 AWS IoT Greengrass 直播管理器所需的所有技术依赖项。  
机器学习依赖项（IDT 版本 3.1.0 及更高版本支持）  
<a name="description-ml"></a>验证设备是否满足在本地执行 ML 推理所需的所有技术依赖项。  
机器学习推理测试（IDT 版本 3.1.0 及更高版本支持）  
<a name="description-mlit"></a>验证是否可以在给定的被测设备上执行 ML 推理。有关更多信息，请参阅 [可选：配置设备进行 ML 资格认证](idt-ml-qualification.md)。  
机器学习推理容器测试（IDT 版本 3.1.0 及更高版本支持）  
<a name="description-mlict"></a>验证是否可以在给定的被测设备上执行 ML 推理，以及是否可以在 Greengrass 核心上以容器模式运行 ML 推理。有关更多信息，请参阅 [可选：配置设备进行 ML 资格认证](idt-ml-qualification.md)。

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

**核心资格必备测试组**  
必须进行这些测试才能使您的 AWS IoT Greengrass 设备符合 AWS Partner 设备目录的资格。    
AWS IoT Greengrass 核心依赖关系  
验证您的设备是否满足 C AWS IoT Greengrass ore 软件的所有软件和硬件要求。  
Combination（设备安全交互）  
通过更改云中 Greengrass 组的连接信息来验证 Greengrass 核心设备上的设备证书管理器和 IP 检测的功能。测试组轮换 AWS IoT Greengrass 服务器证书并验证是否 AWS IoT Greengrass 允许连接。  
部署（是 IDT v1.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   
Native  
验证是否 AWS IoT Greengrass 可以运行本机（已编译的）Lambda 函数。  
Over-the-Air （OTA）  
验证您的设备能否成功执行 C AWS IoT Greengrass ore 软件的 OTA 更新。  
Penetration  
如果未启用硬链接/软链接保护和 s [eccom](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt) p，则验证 AWS IoT Greengrass 核心软件是否无法启动。它还可用于验证其他与安全相关的功能。  
影子  
验证本地影子和影子云同步功能。  
Spooler  
验证 MQTT 消息是否依据默认后台处理程序配置进行排队。  
Token Exchange Service (TES)  
验证是否 AWS IoT Greengrass 可以将其核心证书交换为有效 AWS 凭证。  
版本  
检查 AWS IoT Greengrass 提供的版本是否与您正在使用的 AWS IoT 设备测试器版本兼容。

**可选测试组**  
这些测试是可选的。如果您选择符合可选测试的资格，则您的设备将在 AWS Partner 设备目录中列出其他功能。    
容器依赖项  
检查设备是否满足在容器模式下运行 Lambda 函数所需的所有依赖项。  
硬件安全性集成 (HSI)  
验证提供的 HSI 共享库是否可以与硬件安全模块 (HSM) 接口并正确实现所需的 PKCS \$111。 APIs HSM 和共享库必须能够签署 CSR，执行 TLS 操作，并提供正确的密钥长度和公有密钥算法。  
本地资源访问  
 AWS IoT Greengrass 通过 LRA 向容器化 Lambda 函数提供对各种 Linux 用户和组拥有的本地文件和目录的访问权限，从而验证的本地资源访问 (LRA) 功能。 AWS IoT Greengrass APIs应基于本地资源访问配置允许或拒绝 Lambda 函数访问本地资源。  
网络  
验证是否可以从 Lambda 函数建立套接字连接。应根据 Greengrass 核心配置来允许或拒绝这些套接字连接。

------

# 运行 AWS IoT Greengrass 资格套件的先决条件
<a name="dev-tst-prereqs"></a>

本节介绍使用 AWS IoT 设备测试器 (IDT) 运行 AWS IoT Greengrass 资格套件的 AWS IoT Greengrass 先决条件。

## 下载最新版本的 AWS IoT 设备测试器 AWS IoT Greengrass
<a name="install-dev-tst-gg"></a>

下载 IDT 的[最新版本](dev-test-versions.md)并将软件提取到文件系统中您具有读取和写入权限的位置。

**注意**  
<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>

在使用 IDT 之前 AWS IoT Greengrass，必须执行以下步骤：

1. [创建一个 AWS 账户.]() 如果您已经有 AWS 账户，请跳至步骤 2。

1. [为 IDT 配置权限。]()

这些账户权限允许 IDT 代表您访问 AWS 服务和创建 AWS 资源，例如 AWS IoT 事物、Greengrass 群组和 Lambda 函数。

<a name="idt-aws-credentials"></a>要创建这些资源，IDT fo AWS IoT Greengrass r 使用`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/注册。](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，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 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 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS 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 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

### 步骤 2：为 IDT 配置权限
<a name="configure-idt-permissions"></a>

在此步骤中，配置 IDT 用于运行测试和收集 IDT AWS IoT Greengrass 使用情况数据的权限。您可以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 为 IDT 创建 IAM 策略和测试用户，然后将策略附加到该用户。如果您已经为 IDT 创建了测试用户，请跳转至 [配置设备以运行 IDT 测试](device-config-setup.md) 或 [可选：为 IDT 配置你的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)。
+ [为 IDT 配置权限（控制台）](#configure-idt-permissions-console)
+ [为 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>
以下策略授权来创建和管理适用于 AWS IoT Greengrass的 IDT 所需的角色。这包括附加以下 AWS 托管策略的权限：  
[AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy)
[Greengrass OTAUpdate ArtifactAccess](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 设备测试器的托管策略](#idt-managed-policy)。

   1. 选择**下一步：标签**。

   1. 选择 **Next: Review (下一步：审核)** 以查看您的选择摘要。

   1. 选择**创建用户**。

   1. 要查看用户的访问密钥（访问密钥 IDs 和私有访问密钥），请选择密码和访问密钥旁边的**显示**。要保存访问密钥，请选择**Download.csv (下载 .csv)**，然后将文件保存到安全位置。稍后您可以使用此信息配置 AWS 凭证文件。

1. <a name="aws-account-config-next-steps"></a>下一步：配置[物理设备](device-config-setup.md)。

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

**为 IDT 配置权限 (AWS CLI)**

按照以下步骤 AWS CLI 使用配置 IDT 的 AWS IoT Greengrass权限。如果您已在控制台中配置权限，请跳转至 [配置设备以运行 IDT 测试](device-config-setup.md) 或 [可选：为 IDT 配置你的 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 是一个开源工具，可用于通过命令行 shell 与 AWS 服务进行交互。

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 用户并附加适用于 AWS IoT Greengrass的 IDT 所需的权限。

   1. 创建 IAM 用户。在此示例设置中，用户被命名为 `IDTGreengrassUser`。

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

   1. 将您在步骤 2 中创建的 `IDTGreengrassIAMPermissions` 策略附加到您的 IAM 用户。*<account-id>*在命令中替换为您的 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 设备测试器的托管策略](#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 设备测试器的托管策略
<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 f AWS IoT Greengrass or 测试您的设备之前，请确保您已[按照 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 用于 AWS IoT Greengrass 测试您的设备是否与特定版本的 AWS IoT Greengrass兼容。IDT 提供了两种 AWS IoT Greengrass 在您的设备上进行测试的选项：
+ 下载并使用某一版本的 [AWS IoT Greengrass 核心软件](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 核心软件并配置 AWS IoT 设备测试器以使用它
<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 设备测试器一起使用
<a name="existing-gg"></a>

通过向`<device-tester-extract-location>/configs`文件夹中的`device.json`文件添加`greengrassLocation`属性，配置 IDT 以测试设备上安装的 C AWS IoT Greengrass ore 软件。例如：

```
"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/) 或 [Pu TTYgen](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 私有密钥以登录被测设备，请在主机上使用 **ssh-copy-id** 命令。此命令会将您的公有密钥添加到被测设备上的 `~/.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`）。如果公有密钥采用其他名称或存储在其他位置，则必须使用 **-i** 选项与 **ssh-copy-id** 指定 SSH 公有密钥的完全限定路径（例如，**ssh-copy-id -i \$1/my/path/myKey.pub**）。有关创建 SSH 密钥和复制公有密钥的更多信息，请参阅 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

**使用 Pu 创建 SSH 密钥TTYgen （仅限 Windows）**

1. 确保您在被测设备上安装了 OpenSSH 服务器和客户端。有关更多信息，请参阅 [OpenSSH](https://www.openssh.com/)。

1. 在被测设备TTYgen上安装 [Pu](https://www.puttygen.com/)。

1. 打开 Pu TTYgen。

1. 选择 **Generate (生成)**，然后在框中移动鼠标光标以生成私有密钥。

1. 从 **Conversions (转换)** 菜单中，选择 **Export OpenSSH key (导出 OpenSSH 密钥)**，然后使用 `.pem` 文件扩展名保存私有密钥 。

1. 将公有密钥添加到被测设备上的 `/home/<user>/.ssh/authorized_keys` 文件中。

   1. 从 Pu TTYgen 窗口复制公钥文本。

   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 fo AWS IoT Greengrass r 必须能够在不被提示输入密码的情况下使用 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 配置你的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)
+ [可选：配置设备进行 ML 资格认证](idt-ml-qualification.md)

# 可选：为 IDT 配置你的 Docker 容器 AWS IoT Greengrass
<a name="docker-config-setup"></a>

AWS IoT Greengrass 提供了 Docker 镜像和 Dockerfile，可以更轻松地在 Docker 容器中运行 AWS IoT Greengrass 核心软件。设置 AWS IoT Greengrass 容器后，您可以运行 IDT 测试。目前，只有 x86\$164 Docker 架构支持运行适用于 AWS IoT Greengrass的 IDT。

此功能需要 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

在 Docker 容器 AWS IoT Greengrass 中运行时，以下功能不可用：<a name="docker-image-unsupported-features"></a>
+ 在 **Greengrass 容器模式**下运行的[连接器](connectors.md)。要在 Docker 容器中运行连接器，该连接器必须在**无容器**模式下运行。要查找支持**无容器**模式的连接器，请参阅[AWS提供的 Greengrass 连接器](connectors-list.md)。其中一些连接器具有隔离模式参数，您必须将此参数设为**无容器**。
+ [本地设备和卷资源](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 或更高版本。
    + 要安装 AWS CLI 版本 2，请参阅[安装 AWS CLI 版本 2](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 或更高版本
    + 要安装 AWS CLI 版本 1，请参阅[安装 AWS CLI 版本 1](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 上使用 [MSI 安装](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) AWS CLI 版本 1，请注意以下几点：  
如果 AWS CLI 版本 1 安装无法安装 botocore，请尝试使用 Pyth [on 和 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>` 装载 Config 文件

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

     **示例：**从 `proc/config.gz` 装载 Config 文件

     ```
     -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>

按照以下步骤配置从 Dockerf AWS IoT Greengrass ile 构建的 Docker 镜像以运行 IDT 测试。

1. 从 [AWS IoT Greengrass Docker 软件](what-is-gg.md#gg-docker-download)，将 Dockerfile 包下载到您的主机并将其解压缩。

1. 打开 `README.md`。接下来的三个步骤将参考此文件中的部分。

1. 请确保您满足**先决条件**部分中的要求。

1. 仅限 Linux 用户：完成**启用符号链接和硬链接保护**以及**启用 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>` 装载 Config 文件

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

     **示例：**从 `proc/config.gz` 装载 Config 文件

     ```
     -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 的 Docker 容器设置进行故障排除 AWS IoT Greengrass
<a name="docker-config-setup-troubleshooting"></a>

使用以下信息来帮助解决运行适用于 IDT 的 Docker 容器进行测试时遇到的问题。 AWS IoT Greengrass 

### 警告：加载配置时出错 <user>//.docker file:/home/user/.docker/config.json - stat /home /config.json：权限被拒绝
<a name="docker-config-permissions-linux"></a>

如果在 Linux 上运行 `docker` 命令时出现此错误，请运行以下命令。将以下命令替换*<user>*为运行 IDT 的用户。

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

# 可选：配置设备进行 ML 资格认证
<a name="idt-ml-qualification"></a>

IDT fo AWS IoT Greengrass r 提供机器学习 (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)运行的 Lambda 函数（在 **Greengrass 容器**模式下），则不支持为 `/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>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](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/source)代码](https://www.tensorflow.org/install/pip)安装 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>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](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 深度学习运行时 (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>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](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 提供的机器学习模型。此模型已使用 Ap MXNet ache 进行预训练。

1. 验证 A SageMaker I 是否支持您的设备类型。有关更多信息，请参阅 *Amazon AI AP SageMaker I 参考*中的[目标设备选项](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_cn/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. 对于**输入配置**，请使用以下值：
      + 对于**数据输入配置**，请输入 `{"data": [1, 3, 224, 224]}`。
      + 对于**机器学习框架**，请选择 `MXNet`。

   1. 对于**输出配置**，请使用以下值：
      + 对于 **S3 输出位置**，请输入要存储已编译模型的 Amazon S3 存储桶或文件夹的路径。
      + 对于**目标设备**，请选择您的设备类型。

1. 从指定的输出位置下载已编译的模型，然后解压缩该文件。

1. 将 `synset.txt` 复制到已编译的模型目录中。

1. 将已编译的模型目录的名称更改为 `resnet18`。

   已编译的模型目录必须具有以下目录结构。  
![\[已编译的 resnet18 模型目录中包含四个文件。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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. 更新[在 Relay 中定义神经网络](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#define-neural-network-in-relay)的代码。可以使用以下选项之一：
      + 选项 1：使用 `mxnet.gluon.model_zoo.vision.get_model` 获取 Relay 模块和参数：

        ```
        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` 文件所在的目录。这些文件中包含了 Relay 模块和参数。
        + `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_cn/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 用户凭证。使用中创建的 AWS IoT Greengrass 用户的 IDT 凭证。[创建和配置 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>
```

要将 IDT 配置 AWS IoT Greengrass 为使用`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 fo AWS IoT Greengrass r 可以使用`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 还 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 设备目录中发布您的主板，则在此处指定的 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。 APIs 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`、`streamManager`、`hsi` 或 `ml` 功能，则可以将对应的 `value` 设置为 `no`。  
Docker 仅支持 `streamManagement` 和`ml` 的功能资格认证。

`machineLearning`  
可选。ML 资格认证测试的配置信息。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](#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 \$1 11 支持）的绝对路径。由 AWS IoT Greengrass OTA 更新代理使用。

`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 核心软件版本。  
通过提供的 Docker 镜像或 Dockerfile 在 Docker 容器中运行测试时 AWS IoT Greengrass，请将此值设置为。`/greengrass`

`kernelConfigLocation`  
可选。内核配置文件的路径。 AWS IoT 设备测试器使用此文件来检查设备是否启用了所需的内核功能。如果未指定，IDT 将使用以下路径搜索内核配置文件：`/proc/config.gz`和`/boot/config-<kernel-version>`。 AWS IoT Device Tester 使用它所找到的第一个路径。

## 为 ML 资格认证配置 device.json
<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`，则必须将该文件重命名为 `device.json`，然后再运行 IDT 测试。

有关不适用于 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 或更高版本。  
+ 选择 `process`，将使用非容器化的 Lambda 函数运行 ML 推理代码。此选项需要 AWS IoT Greengrass v1.10.x 或更高版本。
+ 选择 `container`，将使用容器化的 Lambda 函数运行 ML 推理代码。
+ 选择 `both`，可在两种模式下运行 ML 推理代码。此选项需要 AWS IoT Greengrass v1.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 命令的更多信息，请参阅 [命令的同意 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
```

## 命令的同意 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`  
列出当前 IDT AWS IoT Greengrass 版本支持的产品（在本例中为版本）和测试套件版本。

`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 的提示的响应。如果 IDT 检测到有更新的版本，输入 `Y` 将会停止执行测试。输入 `N` 将会继续执行测试。
+ `update-managed-policy`。如果 IDT 检测到用户的托管策略未更新，输入 `Y` 将会停止执行测试。输入 `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 用于在设备目录中列出您的 AWS Partner 设备。该报告包含以下元素：
+ 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 服务互操作。如果您想在设备目录中列出您的 AWS Partner 设备，则可以使用此报告作为资格证据。

如果出现测试失败或错误，则可以通过检查 `<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 执行测试用例的次数。

当测试失败或出现错误时，将会在 `<testcase>` 标签中添加包含用于故障排除的信息的 `<failure>` 或 `<error>` 标签。例如：

```
<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`  
从 Dev AWS IoT ice Tester 的 Test Manager 组件生成的日志（例如，与配置、测试排序和报告生成相关的日志）。

`<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)。