

终止支持通知：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="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"`。