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

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

适用于 Amazon IoT Greengrass V2 的 IDT 故障排除

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

查找错误的位置

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

IDT 测试日志目录是 <device-tester-extract-location>/results/<execution-id>/logs/。此目录包含表中显示的以下文件。这对于调试非常有用。

文件 描述
test_manager.log

测试运行时写入控制台的日志。此文件末尾的结果摘要包含失败测试的列表。

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

test-group-id/test-case-id/test-name.log 测试组中特定测试的详细日志。对于部署 Greengrass 组件的测试,测试用例日志文件称为 greengrass-test-run.log
test-group-id/test-case-id/greengrass.log Amazon IoT Greengrass Core 软件的详细日志。IDT 在设备上运行安装 Amazon IoT Greengrass Core 软件的测试时,会从被测设备复制此文件。有关此日志文件中消息的更多信息,请参阅故障排除 Amazon IoT Greengrass V2
test-group-id/test-case-id/component-name.log 测试运行期间部署的 Greengrass 组件的详细日志。IDT 在运行部署特定组件的测试时,会从被测设备复制组件日志文件。每个组件日志文件的名称对应于已部署组件的名称。有关此日志文件中消息的更多信息,请参阅故障排除 Amazon IoT Greengrass V2

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

在运行适用于 Amazon IoT Greengrass 的 IDT 之前,请获取正确的配置文件。如果接收解析和配置错误,第一步应找到并使用适合环境的配置模板。

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

别名解析错误

运行自定义测试套件时,您可能会在控制台和 test_manager.log 中看到以下错误。

Couldn't resolve placeholders: couldn't do a json lookup: index out of range

当 IDT 测试编排工具中配置的别名无法正确解析或者配置文件中不存在已解析的值时,就会发生此错误。要解决此错误,请确保 device.jsonuserdata.json 包含测试套件所需的正确信息。有关 Amazon IoT Greengrass 资格认证所需配置的信息,请参阅配置 IDT 设置以运行 Amazon IoT Greengrass 资格认证套件

冲突错误

当您在多台设备上同时运行 Amazon IoT Greengrass 资格认证套件时,您可能会看到以下错误。

ConflictException: Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE] { RespMetadata: { StatusCode: 409, RequestID: “id” }, Message_: “Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE]” }

Amazon IoT Greengrass 资格认证套件尚不支持并行测试执行。按顺序为每台设备运行资格认证套件。

无法启动测试错误

您可能会遇到错误,这些错误指向测试尝试开始时发生的故障。有几种可能的原因,因此,请执行以下操作:

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

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

Docker 资格认证镜像存在错误

Docker 应用程序管理器资格认证测试使用 Amazon ECR 中的 amazon/amazon-ec2-metadata-mock 容器镜像来鉴定被测设备。

如果镜像已存在于被测设备上的 Docker 容器中,则可能会收到以下错误。

The Docker image amazon/amazon-ec2-metadata-mock:version already exists on the device.

如果您之前下载了此镜像并在设备上运行了 amazon/amazon-ec2-metadata-mock 容器,请务必在运行资格认证测试之前从被测设备中移除此镜像。

无法读取凭证

在测试 Windows 设备时,如果用于连接被测设备的用户未在该设备的凭证管理器中设置,则可能会在 greengrass.log 文件中遇到 Failed to read credential 错误。

要解决此错误,请在被测设备的凭证管理器中配置 IDT 用户的用户名和密码。

有关更多信息,请参阅 为 Windows 设备配置用户凭证

预安装的 Greengrass 出现 Guice 错误

在使用预安装的 Greengrass 运行 IDT 时,如果遇到 GuiceErrorInCustomProvider 的错误,请检查文件 userdata.json 是否已将 InstalledDirRootOnDevice 设置为 Greengrass 安装文件夹。IDT 检查 <InstallationDirRootOnDevice>/config/effectiveConfig.yaml 下的文件 effectiveConfig.yaml

有关更多信息,请参阅 为 Windows 设备配置用户凭证

签名异常无效

运行 Lambda 资格认证测试时,如果 IDT 主机遇到网络访问问题,则可能会遇到 invalidsignatureexception 错误。重置路由器并再次运行测试。

机器学习资格认证错误

在运行机器学习(ML)资格认证测试时,如果您的设备不符合部署 Amazon 提供的 ML 组件的要求,则可能会遇到资格认证失败。要排查 ML 资格认证错误,请执行以下操作:

  • 在组件日志中查找测试运行期间部署的组件的错误详细信息。组件日志位于 <device-tester-extract-location>/results/<execution-id>/logs/<test-group-id> 目录中。

  • -Dgg.persist=installed.software 参数添加到失败测试用例的 test.json 文件中。test.json 文件位于 <device-tester-extract-location>/tests/GGV2Q_version directory. 中。

开放测试框架(OTF)部署失败

如果 OTF 测试未能完成部署,则可能的原因可能是为 TempResourcesDirOnDeviceInstallationDirRootOnDevice 的父文件夹设置了权限。要正确设置此文件夹的权限,请运行以下命令。将 folder-name 替换为父文件夹的名称。

sudo chmod 755 folder-name

解析错误

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

权限被拒绝错误

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

资格认证报告生成错误

IDT 支持四个最新 major.minor 版本的 Amazon IoT Greengrass V2 资格认证套件(GGV2Q)以生成资格认证报告,您可以将这些报告提交到 Amazon Partner Network,以将您的设备包含在 Amazon Partner 设备目录中。早期版本的资格认证套件不生成资格认证报告。

如果您对支持策略有疑问,请联系 Amazon Web Services 支持

缺少必需参数错误

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

macOS 上的安全例外

在 macOS 主机上运行 IDT 时,它会阻止 IDT 运行。要运行 IDT,请向可执行文件授予安全异常,这是 IDT 运行时功能的一部分。当主机上显示警告消息时,请对每个适用的可执行文件执行以下操作:

要向 IDT 可执行文件授予安全异常,请执行以下操作

  1. 在 macOS 电脑上,在苹果菜单中打开系统偏好设置

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

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

  4. 恢复 IDT 测试,直到完成所有涉及的可执行文件。

SSH 连接错误

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

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

从 IDT v4.4.0 开始,如果您尚未在被测设备上启用 SFTP,则可能会在日志文件中看到以下错误。

SSH connection failed with EOF

要解决此错误,请在设备上启用 SFTP。

流管理器资格认证错误

运行流管理器资格认证测试时,您可能会在 com.aws.StreamManagerExport.log 文件中看到以下错误。

Failed to upload data to S3

当流管理器使用设备上的 ~/root/.aws/credentials 文件中的 Amazon 凭证,而不是使用 IDT 导出到被测设备的环境凭证时,可能会发生此错误。为防止出现此问题,请删除设备上的 credentials 文件,然后重新运行资格认证测试。

超时错误

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

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

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

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

由于配置问题而无法完成 IDT 测试用例时,会出现一些超时错误。您无法通过增加超时乘数来解决这些错误。使用测试运行中的日志对基础配置问题进行故障排除。

  • 如果 MQTT 或 Lambda 组件日志包含 Access denied 错误,则 Greengrass 安装文件夹可能没有正确的文件权限。对 userdata.json 文件中定义的安装路径中的每个文件夹运行以下命令。

    sudo chmod 755 folder-name
  • 如果 Greengrass 日志表明 Greengrass CLI 部署尚未完成,请执行以下操作:

    • 验证 bash 是否已安装在被测设备上。

    • 如果 userdata.json 文件包含 GreengrassCliVersion 配置参数,请将其移除。此参数在 IDT v4.1.0 及更高版本中已弃用。有关更多信息,请参阅 配置 userdata.json

  • 如果 Lambda 部署测试失败并显示错误消息“Validating Lambda publish: time out”,并且在测试日志文件(idt-gg2-lambda-function-idt-<resource-id>.log)中收到一条显示 Error: Could not find or load main class com.amazonaws.greengrass.runtime.LambdaRuntime. 的错误,请执行以下操作:

    • 验证 userdata.json 文件中的 InstallationDirRootOnDevice 使用了哪个文件夹。

    • 确保在您的设备上设置了正确的用户权限。有关更多详细信息,请参阅在设备上配置用户权限

版本检查错误

当 IDT 用户的 Amazon 用户凭证没有所需的 IAM 权限时,IDT 会发出以下错误。

Failed to check version compatibility

没有所需 IAM 权限的 Amazon 用户。