AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

适用于 AWS IoT Greengrass 的 IDT 故障排除

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

错误代码

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

错误代码 错误代码名称 可能的根源 问题排查

101

InternalError

出现内部错误。

联系 AWS 开发人员支持

102

TimeoutError

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

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

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

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

  • 检查网络连接和速度。

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

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

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

103

PlatformNotSupportError

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

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

  • Linux,x86_64

  • Linux,ARMv7l

  • Linux,AArch64

  • Ubuntu,x86_64

  • OpenWRT,ARMv7l

  • OpenWrt,ARM11

有关更多信息,请参阅 设备配置

104

VersionNotSupportError

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

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

查找您使用的 AWS IoT Greengrass 核心软件的版本:

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

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

您可以测试不同版本的 AWS IoT Greengrass 核心软件。有关更多信息,请参阅 AWS IoT Greengrass 入门

105

LanguageNotSupportError

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

确保:

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

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

106

ValidationError

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

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

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

  • AWS 区域无效:在 config.json 文件中指定有效的 AWS 区域。有关 AWS 区域的更多信息,请参阅区域和终端节点

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

107

SSHConnectionFailed

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

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

  • ip

  • user

  • privKeyPath

有关更多信息,请参阅 设备配置

108

RunCommandError

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

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

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

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

109

PermissionDeniedError

无根访问权限。

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

110

CreateFileError

无法创建文件。

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

111

CreateDirError

无法创建目录。

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

112

InvalidPathError

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

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

113

InvalidFileError

文件无效。

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

114

ReadFileError

无法读取指定的文件。

请验证以下内容:

  • 文件权限正确无误。

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

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

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

115

FileNotFoundError

找不到所需的文件。

请验证以下内容:

  • 开发工具包存在于 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

AWS 凭证无效。

验证您的 AWS 凭证。由于此错误也可能是由于网络问题导致的,请检查您的网络连接,然后重新运行测试组。

121

AWSSessionError

未能创建 AWS 会话。

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

122

AWSApiCallError

发生了 AWS API 错误。

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

123

IpNotExistError

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

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

124

OTAJobNotCompleteError

一个 OTA 作业未完成。

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

125

CreateGreengrassServiceRoleError

发生了以下错误之一:

  • 创建角色时出错。

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

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

  • 将角色与 AWS 账户关联时出错。

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

126

DependenciesNotPresentError

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

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

127

InvalidHSMConfiguration

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

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

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

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

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

在哪里查找问题?

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

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

File 描述
test_manager.log

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

此文件中的警告和错误日志可以为您提供有关失败的一些信息。如果您需要其他详细信息,请参阅下面更具体的日志。

<test-name>.log 包含有关特定测试发生的情况的详细日志。
<test-name>_ggc_logs.tar.gz AWS IoT Greengrass Core 守护程序在测试期间生成的所有日志的压缩集合。有关更多信息,请参阅 AWS IoT Greengrass 故障排除
<test-name>_ota_logs.tar.gz 该文件仅用于 OTA 测试。它是 AWS IoT Greengrass OTA 代理在测试期间生成的日志的压缩集合。

解析错误

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

缺少必需参数错误

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

无法启动测试错误

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

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

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

权限被拒绝错误

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

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

超时错误

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

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

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

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

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

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

例如,在 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