适用于 Amazon IoT Greengrass 的 IDT 问题排查 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

适用于 Amazon IoT Greengrass 的 IDT 问题排查

适用于 Amazon IoT Greengrass 的 IDT 根据错误类型将这些错误写入各种位置。错误将被写入到控制台、日志文件和测试报告。

错误代码

下表列出了由适用于 Amazon IoT Greengrass 的 IDT 生成的错误代码。

错误代码 错误代码名称 可能的根本原因 故障排查

101

InternalError

出现内部错误。

检查 <device-tester-extract-location>/results 目录下的日志。如果您无法调试该问题,请联系 Amazon 开发人员支持

102

TimeoutError

测试无法在限定的时间范围内完成。在以下条件下会出现这种情况:

  • 测试计算机与设备之间的网络连接速度很慢(例如,如果您使用的是 VPN 网络)。

  • 慢速网络延迟了设备和云之间的通信。

  • 测试配置文件 (test.json) 中的 timeout 字段被错误地修改。

  • 检查网络连接和速度。

  • 确保您未修改 /test 目录下的任何文件。

  • 尝试使用 "--group-id" 标志手动运行失败的测试组。

  • 尝试通过增加测试超时来运行测试套件。有关更多信息,请参阅超时错误

103

PlatformNotSupportError

device.json 中指定的操作系统/架构组合不正确。

将您的配置更改为支持的组合之一:

  • Linux,x86_64

  • Linux,ARMv6l

  • Linux,ARMv7l

  • Linux,AArch64

  • Ubuntu,x86_64

  • OpenWRT,ARMv7l

  • OpenWrt,AArch64

有关更多信息,请参阅配置 device.json

104

VersionNotSupportError

您使用的 IDT 版本不支持 Amazon IoT Greengrass 核心软件版本。

使用 device_tester_bin version 命令查找支持的 Amazon IoT Greengrass 核心软件版本。例如,如果您使用的是 macOS,请使用 ./devicetester_mac_x86_64 version

查找您使用的 Amazon IoT Greengrass Core 软件的版本:

  • 如果您使用预安装的 Amazon IoT Greengrass Core 软件运行测试,请使用 SSH 连接到您的 Amazon IoT Greengrass 核心设备并运行 <path-to-preinstalled-greengrass-location>/greengrass/ggc/core/greengrassd --version

  • 如果您使用其他版本的 Amazon IoT Greengrass Core 软件运行测试,请转到 devicetester_greengrass_ <os>/products/greengrass/gcc 目录。Amazon IoT Greengrass 核心软件版本是 .zip 文件名的一部分。

您可以测试不同版本的 Amazon IoT Greengrass 核心软件。有关更多信息,请参阅开始使用 Amazon IoT Greengrass

105

LanguageNotSupportError

IDT 仅对于 Amazon IoT Greengrass 库和开发工具包支持 Python。

确保:

  • devicetester_greengrass_<os>/products/greengrass/ggsdk 下的开发工具包是 Python 开发工具包。

  • devicetester_greengrass_<os> /tests/GGQ_1.0.0/suite/resources/run.runtimefarm/bin 下的 bin 文件夹中的内容尚未更改。

106

ValidationError

device.jsonconfig.json 中的有些字段无效。

检查报告中错误代码右侧的错误消息。

  • 设备的身份验证类型无效:指定连接到设备的正确方法。有关更多信息,请参阅配置 device.json

  • 私有密钥路径无效:指定私有密钥的正确路径。有关更多信息,请参阅配置 device.json

  • 无效的 Amazon Web Services 区域:在您的 config.json 文件中指定有效的 Amazon Web Services 区域。有关更多信息,请参阅Amazon服务端点

  • Amazon 凭证:在测试计算机上设置有效的 Amazon 凭证(使用环境变量或 credentials 文件进行设置)。验证 auth 字段是否配置正确。有关更多信息,请参阅创建和配置 Amazon Web Services 账户

  • 无效的 HSM 输入:检查 device.json 中的 p11ProviderprivateKeyLabelslotLabelslotUserPinopenSSLEngine 字段。

107

SSHConnectionFailed

测试计算机无法连接到已配置的设备。

验证 device.json 文件中的以下字段是否正确:

  • ip

  • user

  • privKeyPath

  • password

有关更多信息,请参阅配置 device.json

108

RunCommandError

测试在测试中的设备上执行命令失败。

验证是否允许在 device.json 中配置的用户拥有根访问权限。

当通过根访问权限执行命令时,某些设备需要密码。确保在使用不密码的情况下允许获得根访问权限。有关更多信息,请参阅设备的文档。

尝试在您的设备上手动运行失败的命令以查看是否发生错误。

109

PermissionDeniedError

无根访问权限。

在您的设备上为配置的用户设置根访问权限。

110

CreateFileError

无法创建文件。

检查您设备的磁盘空间和目录权限。

111

CreateDirError

无法创建目录。

检查您设备的磁盘空间和目录权限。

112

InvalidPathError

指向 Amazon IoT Greengrass 核心软件的路径不正确。

验证错误消息中的路径是有效的。请勿编辑 devicetester_greengrass_<os> 目录下的任何文件。

113

InvalidFileError

文件无效。

验证错误消息中的文件是否有效。

114

ReadFileError

无法读取指定的文件。

请验证以下内容:

  • 文件权限正确无误。

  • limits.config 允许打开足够的文件。

  • 错误消息中指定的文件存在,并且是有效的。

如果您正在 macOS 上进行测试,请增加打开文件数量限制。默认限制为 256,这足够用于测试。

115

FileNotFoundError

找不到所需的文件。

请验证以下内容:

  • 压缩的 Greengrass 文件位于 devicetester_greengrass_<os>/products/greengrass/ggc 下。您可以从 Amazon IoT Greengrass核心软件下载页面下载 Amazon IoT Greengrass 核心 tar 文件。

  • 开发工具包存在于 devicetester_greengrass_<os>/products/greengrass/ggsdk 下。

  • devicetester_greengrass_<os>/tests 下的文件未经修改。

116

OpenFileFailed

无法打开指定的文件。

请验证以下内容:

  • 错误消息中指定的文件存在,并且是有效的。

  • limits.config 允许打开足够的文件。

如果您正在 macOS 上进行测试,请增加打开文件数量限制。默认限制为 256,这足够用于测试。

117

WriteFileFailed

无法写入文件(可以是 DUT 或测试机)。

验证错误消息中指定的目录是否存在,并且您是否具有写入权限。

118

FileCleanUpError

测试未能删除指定的文件或目录,或未能在远程设备上卸载指定的文件。

如果二进制文件仍在运行,则文件可能被锁定。结束进程并删除指定的文件。

119

InvalidInputError

配置无效。

验证 suite.json 文件是否有效。

120

InvalidCredentialError

Amazon 凭证无效。

  • 验证您的 Amazon 凭证。有关更多信息,请参阅配置 Amazon凭证

  • 检查您的网络连接并重新运行测试组。网络问题也可能导致此错误。

121

AWSSessionError

未能创建 Amazon 会话。

如果 Amazon 凭证无效或 Internet 连接不稳定,也可能会发生此错误。尝试使用 Amazon CLI 来调用 Amazon API 操作。

122

AWSApiCallError

发生了 Amazon API 错误。

此错误可能是由于网络问题导致的。检查您的网络,然后重试测试组。

123

IpNotExistError

IP 地址未包含在连接信息中。

检查您的 Internet 连接。您可以使用 Amazon IoT Greengrass 控制台检查测试正在使用的 Amazon IoT Greengrass 核心事物的连接信息。如果连接信息中包含 10 个端点,则您可以删除部分或所有端点并重新运行测试。有关更多信息,请参阅连接信息

124

OTAJobNotCompleteError

一个 OTA 作业未完成。

检查您的 Internet 连接并重试 OTA 测试组。

125

CreateGreengrassServiceRoleError

发生了以下错误之一:

  • 创建角色时出错。

  • 将策略附加到 Amazon IoT Greengrass 服务角色时出错。

  • 与服务角色关联的策略无效。

  • 将角色与 Amazon Web Services 账户 关联时出错。

配置 Amazon IoT Greengrass 服务角色。有关更多信息,请参阅Greengrass 服务角色

126

DependenciesNotPresentError

设备上不存在特定测试所需的一个或多个依赖项。

检查测试日志以查看该设备上缺少哪些依赖项:<device-tester-extract-location>/results/<execution-id>/logs/<test-case-name.log>

127

InvalidHSMConfiguration

提供的 HSM/PKCS 配置不正确。

device.json 文件中,提供使用 PKCS#11 与 HSM 交互所需的配置。

128

OTAJobNotSuccededError

该 OTA 作业没有获得成功。

  • 如果单独运行 ota 测试组,请运行 ggcdependencies 测试组以验证是否存在所有依赖项(例如 wget)。然后重试 ota 测试组。

  • 查看 <device-tester-extract-location>/results/<execution-id>/logs/ 下面的详细日志,了解故障排除和错误信息。具体来说,请查看以下日志:

    • 控制台日志 (test_manager.log)

    • OTA 测试用例日志 (ota_test.log)

    • GGC 守护程序日志 (ota_test_ggc_logs.tar.gz)

    • OTA 代理日志 (ota_test_ota_logs.tar.gz)

  • 检查您的 Internet 连接并重试 ota 测试组。

  • 如果问题仍然存在,请联系 Amazon 开发人员支持

129

NoConnectivityError

主机代理无法连接到 Internet。

请检查您的网络连接和防火墙设置。连接问题得到解决后,重试此测试组。

130

NoPermissionError

您用于运行适用于 Amazon IoT Greengrass 的 IDT 的 IAM 用户不具备创建运行 IDT 所需的 Amazon 资源的权限。

请参阅权限策略模板,以了解授予运行适用于 Amazon IoT Greengrass 的 IDT 所需的权限的策略模板。

131

LeftoverAgentExistError

当您尝试启动适用于 Amazon IoT Greengrass 的 IDT 时,设备正在运行 Amazon IoT Greengrass 进程。

确保您的设备上没有正在运行的 Greengrass 守护程序。

  • 您可以使用此命令来停止守护程序:sudo ./<absolute-path-to-greengrass-daemon>/greengrassd stop

  • 您也可以通过 PID 终止 Greengrass 守护程序。

注意

如果您使用的是已配置为在重新引导后自动启动的现有 Amazon IoT Greengrass 安装,则必须在重新引导之后、运行测试套件之前停止守护程序。

132

DeviceTimeOffsetError

设备的时间不正确。

将设备设置为正确的时间。

133

InvalidMLConfiguration

提供的 ML 配置不正确。

device.json 文件中,提供运行 ML 推理测试所需的正确配置。有关更多信息,请参阅可选:配置设备进行 ML 资格认证

纠正适用于 Amazon IoT Greengrass 的 IDT 错误

在使用 IDT 时,您必须先获取正确的配置文件,然后再运行适用于 Amazon IoT Greengrass 的 IDT。如果出现解析和配置错误,第一步应找到并使用适合您的环境的配置模板。

如果仍有问题,请参阅以下调试过程。

应该在哪里寻找错误?

在执行期间,控制台上会显示高级别错误,并且在所有测试完成后会显示失败测试及其错误的摘要。awsiotdevicetester_report.xml 包含导致测试失败的所有错误的摘要。每次测试运行的日志文件都存储在一个以 UUID 命名的目录中,用于在测试运行期间在控制台上显示的测试执行。

测试日志目录位于 <device-tester-extract-location>/results/<execution-id>/logs/。此目录包含以下对调试有用的文件。

文件 描述
test_manager.log

在测试执行期间写入控制台的所有日志。结果的摘要位于该文件的末尾,其中包含失败的测试的列表。

此文件中的警告和错误日志可以为您提供有关失败的一些信息。

<test-group-id>__<test-name>.log 特定测试的详细日志。
<test-name>_ggc_logs.tar.gz Amazon IoT Greengrass 核心守护程序在测试期间生成的所有日志的压缩集合。有关更多信息,请参阅故障排除Amazon IoT Greengrass
<test-name>_ota_logs.tar.gz Amazon IoT Greengrass OTA 代理在测试期间生成的日志的压缩集合。仅适用于 OTA 测试。
<test-name>_basic_assertion_publisher_ggad_logs.tar.gz 测试期间由 Amazon IoT 发布者设备生成的日志的压缩集合。
<test-name>_basic_assertion_subscriber_ggad_logs.tar.gz 测试期间由 Amazon IoT 订阅者设备生成的日志的压缩集合。

解析错误

有时候,JSON 配置中的输入错误会导致解析错误。大部分情况下,问题是因 JSON 文件中漏掉括号、逗号或引号所导致。IDT 执行 JSON 验证并输入调试信息。它输出发生错误的行、行号以及语法错误的列号。这些信息应足以帮助您修复错误,但是如果仍不能定位错误,则可以通过您的 IDE、文本编辑器(例如 Atom 或 Sublime)或 JSONLint 等在线工具手动执行验证。

缺少必需参数错误

由于将新功能添加到 IDT 中,可能会对配置文件进行更改。使用旧配置文件可能会破坏您的配置。如果出现这种情况,/results/<execution-id>/logs 下的 <test_case_id>.log 文件明确列出了所有缺少的参数。IDT 还将验证 JSON 配置文件架构,以确保使用支持的最新版本。

无法启动测试错误

在测试启动期间,您可能遇到指示失败的错误。有几种可能的原因,因此,请执行以下操作:

  • 确保包含在执行命令中的池名称实际存在。池名称将从您的 device.json 文件中直接引用。

  • 确保池中的设备具有正确的配置参数。

无权访问资源错误

您可能会在终端输出或 /results/<execution-id>/logs 下的 test_manager.log 文件中看到 <user or role> is not authorized to access this resource 错误消息。要解决此问题,请将 AWSIoTDeviceTesterForGreengrassFullAccess 托管策略附加到您的测试用户。有关更多信息,请参阅创建和配置 Amazon Web Services 账户

权限被拒绝错误

IDT 将对所测试设备中的各种目录和文件执行操作。其中一些操作需要根用户访问权限。要自动执行这些操作,IDT 必须能够在不键入密码的情况下使用 sudo 运行命令。

请按照以下步骤操作,以允许在不键入密码的情况下进行 sudo 访问。

注意

userusername 是指 IDT 用来访问所测试设备的 SSH 用户。

  1. 使用 sudo usermod -aG sudo <ssh-username> 将 SSH 用户添加到 sudo 组。

  2. 注销,然后重新登录,以使更改生效。

  3. 打开 /etc/sudoers 文件,并将以下行添加到文件末尾:<ssh-username> ALL=(ALL) NOPASSWD: ALL

    注意

    作为最佳实践,我们建议您在编辑 /etc/sudoers 时使用 sudo visudo

SSH 连接错误

当 IDT 无法连接到所测试设备时,会在 /results/<execution-id>/logs/<test-case-id>.log 中记录连接失败。SSH 失败消息将显示在此日志文件的顶部,因为连接到所测试设备是 IDT 最先执行的操作之一。

大多数 Windows 设置使用 PuTTy 终端应用程序连接到 Linux 主机。该应用程序要求将标准 PEM 私有密钥文件转换为称为 PPK 的专有 Windows 格式。在 device.json 文件中配置 IDT 时,仅使用 PEM 文件。如果使用 PPK 文件,IDT 将无法与 Amazon IoT Greengrass 设备建立 SSH 连接,并且无法运行测试。

超时错误

您可以通过指定超时乘数来增加每个测试的超时,该超时乘数应用于每个测试超时的默认值。为此标志配置的任何值都必须大于或等于 1.0。

要使用超时乘数,请在运行测试时使用标志 --timeout-multiplier。例如:

./devicetester_linux run-suite --suite-id GGQ_1.0.0 --pool-id DevicePool1 --timeout-multiplier 2.5

有关更多信息,请运行 run-suite --help

测试时出现找不到命令错误

您需要较旧版本的 OpenSSL 库 (libssl1.0.0) 才能在 Amazon IoT Greengrass 设备上运行测试。当前的大多数 Linux 发行版都使用 libssl 1.0.2 或更高版本 (v1.1.0)。

例如,在 Raspberry Pi 上,可以运行以下命令来安装所需的 libssl 版本:

  1. wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb
  2. sudo dpkg -i libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb

macOS 上的安全例外

当在使用 macOS 10.15 的主机上运行 IDT 时,系统无法正确检测到 IDT 的公证票证,而且 IDT 也会被阻止运行。要运行 IDT,您需要为 devicetester_mac_x86-64 可执行文件授予安全例外。

为 IDT 可执行文件授予安全例外

  1. 从 Apple 菜单中启动系统偏好设置

  2. 选择 安全与隐私,然后在通用选项卡上,单击小锁图标以更改安全设置。

  3. 查找以下消息并选择仍然允许"devicetester_mac_x86-64" was blocked from use because it is not from an identified developer.

  4. 接受安全警告。

如果您对 IDT 支持策略有疑问,请联系 Amazon 客户支持