配置 IDT 设置以运行 AWS IoT Greengrass 资格认证套件 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 IDT 设置以运行 AWS IoT Greengrass 资格认证套件

在运行测试之前,必须配置主机上的 AWS 凭证和设备的设置。

配置 AWS凭证

您必须在 <device-tester-extract-location> /configs/config.json 文件中配置 IAM 用户凭证。使用在创建和配置 AWS 账户中创建的适用于 AWS IoT Greengrass 的 IDT 用户的凭证。您可以采用以下两种方法之一来指定凭证:

  • 凭证文件

  • 环境变量

IDT 使用与 AWS CLI 相同的凭证文件。有关更多信息,请参阅配置和凭证文件

凭证文件的位置因您使用的操作系统而异:

  • 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 配置为使用 credentials 文件中的 AWS 凭证,请编辑 config.json 文件,如下所示:

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

如果您未使用 default AWS 配置文件,请确保在 config.json 文件中更改配置文件名。有关更多信息,请参阅命名配置文件

环境变量是由操作系统维护且由系统命令使用的变量。如果您关闭 SSH 会话,则不会保存它们。适用于 AWS IoT Greengrass 的 IDT 可使用 AWS_ACCESS_KEY_IDAWS_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

除了 AWS 凭证以外,适用于 AWS IoT Greengrass 的 IDT 还需要有关运行测试的设备的信息(例如,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

包含设备支持的功能的数组。所有功能都是必需的。

osarch

支持的操作系统 (OS) 和架构组合:

  • linux, x86_64

  • linux, armv6l

  • linux, armv7l

  • linux, aarch64

  • ubuntu, x86_64

  • openwrt, armv7l

  • openwrt, aarch64

注意

如果您使用 IDT 测试在 Docker 容器中运行 AWS IoT Greengrass,则仅支持 x86_64 Docker 架构。

container

验证设备是否满足在 Greengrass 核心上以容器模式运行 Lambda 函数的所有软硬件要求。

有效值为 yesno

docker

验证设备是否满足使用 Greengrass Docker 应用程序部署连接器以运行容器的所有必要技术依赖项

有效值为 yesno

streamManagement

验证设备是否满足运行 AWS IoT Greengrass 流管理器所需的所有技术依赖项。

有效值为 yesno

hsi

验证提供的 HSI 共享库是否可以与硬件安全模块 (HSM) 交互,并正确实施所需的 PKCS#11 API。HSM 和共享库必须能够签署 CSR,执行 TLS 操作,并提供正确的密钥长度和公有密钥算法。

有效值为 yesno

ml

验证设备是否满足在本地执行 ML 推理所需的所有技术依赖项。

有效值可以是 mxnettensorflowdlrno 的任意组合(例如 mxnetmxnet,tensorflowmxnet,tensorflow,dlrno)。

mlLambdaContainerizationMode

验证设备是否满足在 Greengrass 设备的容器模式下执行 ML 推理所需的所有技术依赖关系。

有效值为 containerprocessboth

processor

验证设备是否满足指定处理器类型的所有硬件要求。

有效值为 cpugpu

注意

如果您不想使用 containerdockerstreamManagerhsiml 功能,则可以将对应的 value 设置为 no

Docker 仅支持 streamManagementml 的功能资格认证。

machineLearning

可选。ML 资格认证测试的配置信息。有关更多信息,请参阅为 ML 资格认证配置 device.json

hsm

可选。用于通过 AWS IoT Greengrass 硬件安全模块 (HSM) 进行测试的配置信息。否则,应忽略 hsm 属性。有关更多信息,请参阅硬件安全性集成

此属性仅在 connectivity.protocol 设置为 ssh 时适用。

hsm.p11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

hsm.slotLabel

用于标识硬件模块的槽标签。

hsm.slotUserPin

用于针对模块对 AWS IoT Greengrass 核心进行身份验证的用户 PIN。

hsm.privateKeyLabel

用于标识硬件模块中的键的标签。

hsm.openSSLEngine

指向 OpenSSL 引擎的 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。由 AWS IoT Greengrass OTA 更新代理使用。

devices.id

用户定义的测试的设备的唯一标识符。

connectivity.protocol

用于与此设备通信的通信协议。目前,唯一支持的值,对于物理设备为 ssh,对于 Docker 容器为 docker

connectivity.ip

测试的设备 IP 地址。

此属性仅在 connectivity.protocol 设置为 ssh 时适用。

connectivity.containerId

所测试的 Docker 容器的容器 ID 或名称。

此属性仅在 connectivity.protocol 设置为 docker 时适用。

connectivity.auth

连接的身份验证信息。

此属性仅在 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 核心软件的位置。

对于物理设备,此值仅在您使用 AWS IoT Greengrass 的现有安装时使用。使用该属性可告知 IDT 使用设备上安装的 AWS IoT Greengrass 核心软件版本。

在源自 AWS IoT Greengrass 提供的 Docker 镜像或 Dockerfile 的 Docker 容器中运行测试时,请将此值设置为 /greengrass

kernelConfigLocation

可选。内核配置文件的路径。AWS IoTDevice Tester 使用此文件检查设备是否启用了所需的内核功能。如果未指定,IDT 使用以下路径搜索内核配置文件:/proc/config.gz/boot/config-<kernel-version>。AWS IoTDevice Tester 使用它所找到的第一个路径。

为 ML 资格认证配置 device.json

本节介绍设备配置文件中适用于 ML 资格认证的可选属性。如果计划运行 ML 资格认证测试,则必须定义适用于您的使用案例的属性。

您可以使用 device-ml.json 模板来定义设备的配置设置。此模板包含可选的 ML 属性。您也可以使用 device.json 并添加 ML 资格认证属性。这些文件位于 <device-tester-extract-location>/configs 中,包括 ML 资格认证属性。如果使用 device-ml.json,则必须将该文件重命名为 device.json,然后再运行 IDT 测试。

有关不适用于 ML 资格认证的设备配置属性的信息,请参阅配置 device.json

 

features 数组中的 ml

您的主板支持的 ML 框架。此属性需要 IDT v3.1.0 或更高版本。

  • 如果您的主板仅支持一个框架,请指定该框架。例如:

    { "name": "ml", "value": "mxnet" }
  • 如果您的主板支持多个框架,请以逗号分隔列表的形式指定这些框架。例如:

    { "name": "ml", "value": "mxnet,tensorflow" }
features 数组中的 mlLambdaContainerizationMode

测试将采用的容器化模式此属性需要 IDT v3.1.0 或更高版本。

  • 选择 process,将使用非容器化的 Lambda 函数运行 ML 推理代码。此选项需要 AWS IoT Greengrass 1.10.x 或更高版本。

  • 选择 container,将使用容器化的 Lambda 函数运行 ML 推理代码。

  • 选择 both,可在两种模式下运行 ML 推理代码。此选项需要 AWS IoT Greengrass 1.10.x 或更高版本。

features 数组中的 processor

指示您的主板支持的硬件加速器。此属性需要 IDT v3.1.0 或更高版本。

  • 如果主板使用 CPU 作为处理器,则选择 cpu

  • 如果主板使用 GPU 作为处理器,则选择 gpu

machineLearning

可选。ML 资格认证测试的配置信息。此属性需要 IDT v3.1.0 或更高版本。

dlrModelPath

使用 dlr 框架时需要。DLR 已编译模型目录的绝对路径,必须命名为 resnet18。有关更多信息,请参阅编译 DLR 模型

注意

以下是 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 函数,请为 GPU 库添加环境变量。这将使得 GPU 执行计算成为可能。要使用不同的 GPU 库,请参阅库或设备的官方文档。

注意

如果将 mlLambdaContainerizationMode 功能设置为 containerboth,请配置以下键。

"environmentVariables": [ { "key": "PATH", "value": "<path/to/software/bin>:$PATH" }, { "key": "LD_LIBRARY_PATH", "value": "<path/to/ld/lib>" }, ... ]
deviceResources

对于 GPU 设备为必需。包含可通过 Lambda 函数访问的本地资源。可使用此部分来添加本地设备和卷资源。

  • 对于设备资源,请指定 "type": "device"。对于 GPU 设备,设备资源应为 /dev 下的与 GPU 相关的设备文件。

    注意

    /dev/shm 目录除外。只能将其配置为卷资源。

  • 对于卷资源,请指定 "type": "volume"