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

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

对Amazon IoT Greengrass V2 版 IDT 进行故障排除

IDT forAmazon IoT Greengrass V2 会根据错误类型将错误写入不同的位置。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 GreengrassCore 软件的详细日志。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

在运行 IDT for 之前Amazon IoT Greengrass,请准备好正确的配置文件。如果您收到解析和配置错误,则第一步是找到并使用适合您的环境的配置模板。

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

别名解析错误

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

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

如果在 IDT 测试 Orchestrator 中配置的别名解析不正确,或者解析后的值不存在于配置文件中,则可能会出现此错误。要纠正此错误,请确保您的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 设备配置用户凭据

G PreInstalled reengrass 的 Guice 错误

使用 PreInstalled Greengrass 运行 IDT 时,如果遇到Guice或的错误ErrorInCustomProvider,请检查文件是否userdata.jsonInstalledDirRootOnDevice设置为 Greengrass 安装文件夹。IDT 正在检查effectiveConfig.yaml下面的文件<InstallationDirRootOnDevice>/config/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.

解析错误

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

如果您对支持政策有任何疑问,请Amazon Web Services Support联系http://www.amazonaws.cn/contact-us/

缺少必需参数错误

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

macOS 上的安全异常

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

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

  1. 在 macOS 电脑上的 Apple 菜单上,打开 “系统偏好设置”。

  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 部署测试失败并显示Error: Could not find or load main class com.amazonaws.greengrass.runtime.LambdaRuntime. “验证 Lambda 发布:超时” 的错误消息,并且您在测试日志文件 (idt-gg2-lambda-function-idt-<resource-id>.log) 中收到一条错误消息,显示以下操作:

    • 验证文件中使用了哪InstallationDirRootOnDeviceuserdata.json文件夹。

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

版本检查错误

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

Failed to check version compatibility

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