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

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

Troubleshooting

使用本部分中的故障排除信息和解决方案可帮助解决Amazon IoT Greengrass Version 2.

查看Amazon IoT GreengrassCore 软件日志

这些区域有:Amazon IoT Greengrass核心软件日志文件提供有关核心设备的实时信息。这可以帮助您识别与组件和部署有关的问题。

此日志文件还包含插件组件的日志,例如日志管理器Secret Manager. 有关更多信息,请参阅组件类型

查看核心设备日志文件

  • 运行以下命令以实时查看日志文件。Replace/绿草/v2的路径与Amazon IoT Greengrass根文件夹。

    sudo tail -f /greengrass/v2/logs/greengrass.log

查看组件日志

组件日志文件提供有关在 Greengrass 核心设备上运行的组件的实时信息。这可以帮助您识别与组件有关的问题。

注意

这些区域有:Amazon IoT Greengrass核心软件不会为插件组件创建组件日志文件,例如日志管理器Secret Manager. 有关更多信息,请参阅组件类型。有关如何查看插件组件日志的更多信息息息息息息,请参阅查看Amazon IoT GreengrassCore 软件日志.

查看组件的日志文件

  • 运行以下命令以实时查看日志文件。Replace/绿草/v2的路径与Amazon IoT Greengrass根文件夹,然后将来个例子,你好替换为组件名称。

    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log

Amazon IoT GreengrassCore 软件问题

故障排除Amazon IoT GreengrassCore 软件问题。

无法设置核心设备

如果Amazon IoT Greengrass核心软件安装程序失败,您无法设置核心设备,您可能需要卸载该软件并重试。有关更多信息,请参阅卸载Amazon IoT GreengrassCore 软件

无法连接到 Amazon IoT Core

当您的Amazon IoT Greengrass核心软件无法连接到 Amazon IoT Core 来检索部署作业,例如。执行以下操作:

  • 检查您的核心设备是否可以连接到 Internet,并且 Amazon IoT Core . 有关的更多信息 Amazon IoT Core 设备连接到的端点,请参阅配置Amazon IoT GreengrassCore 软件.

  • 检查您的核心设备是否Amazon IoT事情使用一个允许iot:Connectiot:Publishiot:Receive, 和iot:Subscribe权限。

  • 如果核心设备使用网络代理,检查您的核心设备是否有设备角色,并且它的角色允许iot:Connectiot:Publishiot:Receive, 和iot:Subscribe权限。

内存不足错误

如果您的设备没有足够的内存来分配 Java 堆中的对象,通常会发生此错误。在内存有限的设备上,您可能需要指定最大堆大小以控制内存分配。有关更多信息,请参阅使用 JVM 选项控制内存分配

无法安装 Greengrass CLI

您可能会看到以下控制台消息时,使用--deploy-dev-tools参数的安装命令中Amazon IoT Greengrass核心。

Thing group exists, it could have existing deployment and devices, hence NOT creating deployment for Greengrass first party dev tools, please manually create a deployment if you wish to

如果未安装 Greengrass CLI 组件,因为您的核心设备是具有现有部署的事物组的成员,则会发生这种情况。如果您看到此消息,您可以手动部署 Greengrass CLI 组件 (aws.greengrass.Cli)添加到设备以安装 Greengrass CLI。有关更多信息,请参阅安装 Greengrass CLI

User root is not allowed to execute

当用户运行Amazon IoT GreengrassCore 软件(通常为root)没有权限运行sudo与任何用户和任何组。对于默认的ggc_user系统用户,此错误如下所示:

Sorry, user root is not allowed to execute <command> as ggc_user:ggc_group.

检查您的/etc/sudoers文件为用户提供运行的权限sudo作为其他群体. 用户的权限/etc/sudoers应该类似于以下示例。

root ALL=(ALL:ALL) ALL

Failed to map segment from shared object: operation not permitted

此错误通常出现在Amazon IoT Greengrass核心软件无法启动,因为/tmp目录挂载noexec权限。

运行以下命令重新挂载/tmp带有的exec权限,然后重试。

sudo mount -o remount,exec /tmp

Amazon IoT Greengrass云问题

使用以下信息排查Amazon IoT Greengrass控制台和 API。每个条目对应于您在执行操作时可能会看到的错误消息。

An error occurred (AccessDeniedException) when calling the CreateComponentVersion operation: User: arn:aws:iam::123456789012:user/<username> is not authorized to perform: null

当您创建组件版本时,您可能会看到此错误。Amazon IoT Greengrass控制台或创建组件版本operation.

此错误表示您的配方无效 JSON 或 YAML。检查配方的语法,修复任何语法问题,然后重试。您可以使用在线 JSON 或 YAML 语法检查器来识别配方中的语法问题。

核心设备部署问题

排除 Greengrass 核心设备上的部署问题。每个条目对应于您可能在核心设备上看到的日志消息。

Error: com.aws.greengrass.componentmanager.exceptions.PackageDownloadException: Failed to download artifact

当您的Amazon IoT Greengrass核心设备应用部署时,核心软件无法下载组件工件。由于此错误,部署失败。

当您收到此错误时,日志还包括可用于识别特定问题的堆栈跟踪。以下每个条目对应于一条消息,您可能会在Failed to download artifact错误消息。

software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 403, Request ID: null, ...)

这些区域有:打包下载错误在以下情况下,可能会包含此堆栈跟踪:

  • 组件工件在您在组件配方中指定的 Amazon S3 URL 中不可用。检查您是否将工件上传到 S3 存储桶,以及对象 URL 是否与存储桶中对象的 Amazon S3 URL 匹配。

  • 这些区域有:核心设备角色不允许Amazon IoT Greengrass核心软件,用于从您在组件配方中指定的 Amazon S3 URL 下载组件工件。检查设备角色是否允许s3:GetObject的 Amazon S3 URL。

Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.

当您的Amazon IoT Greengrass核心设备应用部署时,核心软件无法下载组件工件。部署失败,因为下载的工件文件的校验和与Amazon IoT Greengrass创建组件时计算出来。

执行以下操作:

  • 检查您托管该工件文件的 S3 存储桶中是否已更改。如果文件在创建组件后发生了更改,请将其恢复到核心设备所需的以前版本。如果无法将文件还原到以前的版本,或者要使用该文件的新版本,请使用工件文件创建组件的新版本。

  • 检查核心设备的 Internet 连接。如果工件文件在下载时损坏,则可能会发生此错误。创建新部署,然后重试。

Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>

当核心设备找不到满足该核心设备部署要求的组件版本时,您可能会看到此错误。核心设备检查Amazon IoT Greengrass服务和本地设备上。错误消息包括每个部署的目标以及该部署对组件的版本要求。部署目标可以是事物、事物组或LOCAL_DEPLOYMENT,表示核心设备上的本地部署。

以下情况下可能会出现此问题:

  • 核心设备是多个部署的目标,这些部署具有相互冲突的组件版本要求。例如,核心设备可能是多个部署的目标,这些部署包括com.example.HelloWorld组件,其中一个部署需要版本 1.0.0,另一个部署需要版本 1.0.1。不可能有一个满足这两个要求的组件,因此部署失败。

  • 组件版本不存在于Amazon IoT Greengrass服务或本地设备上。例如,该组件可能已被删除。

  • 存在满足版本要求的组件版本,但没有一个版本与核心设备的平台兼容。

若要解决此问题,请修改部署以包括兼容的组件版本或删除不兼容的组件版本。有关如何修改云部署的更多信息息息息息息,请参阅修改部署. 有关如何修订本地部署的更多信息息息息息息,请参阅Amazon IoT GreengrassCLI 部署创建命令。

software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: User: <user> is not authorized to perform: secretsmanager:GetSecretValue on resource: <arn>

当您使用密钥管理器组件以部署Amazon Secrets Manager密钥。如果核心设备的令牌交换 IAM 角色不授予获取密钥的权限,部署失败,并且 Greengrass 日志包含此错误。

授权核心设备下载密码

  1. 添加secretsmanager:GetSecretValue权限访问核心设备的令牌交换角色。以下示例策略声明将授予权限以获取密钥的值。

    { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef" ] }

    有关更多信息,请参阅授权核心设备与Amazon服务

  2. 将部署重新应用到核心设备。请执行下列操作之一:

    • 修改部署而不作任何更改。核心设备在收到修订后的部署时尝试再次下载密钥。有关更多信息,请参阅修改部署

    • 重启Amazon IoT Greengrass重新尝试部署的核心软件。有关更多信息,请参阅 。运行Amazon IoT GreengrassCore 软件

    如果密钥管理器成功下载密钥,部署将成功。

信息:委员会绿色草坪部署异常。可重新部署文档下载:Greengrass 云服务在获取完整部署配置时返回错误

当核心设备收到大型部署文档时,您可能会看到此错误,该文档是大于 7 KB(对于目标内容的部署)或 31 KB(针对目标事物组的部署)的部署文档。要检索大型部署文档,核心设备的Amazon IoT策略必须允许greengrass:GetDeploymentConfiguration权限。当核心设备没有此权限时,可能会发生此错误。发生此错误时,部署将无限期重试,并且其状态为正在进行中(IN_PROGRESS)。

要解决此问题,请添加greengrass:GetDeploymentConfiguration核心设备的Amazon IoT政策。有关更多信息,请参阅更新核心设备的Amazon IoT策略

信息:通过绿色草坪部署部署文档下载程序:调用 Greengrass 云以获得完整的部署配置

您可能会看到此信息消息打印多次而没有错误,因为核心设备将错误记录在DEBUG日志级别。核心设备收到大型部署文档时,可能会发生此问题。发生此问题时,部署重试无限期,并且其状态为正在进行中(IN_PROGRESS)。有关如何解决此问题的更多信息,请参阅此问题排查条目.

核心设备组件问题

疑难解答核心设备上的 Greengrass 组件问题。

Python 脚本不会记录消息

Greengrass 核心设备收集日志,您可以使用这些日志来识别与组件有关的问题。如果您的 Python 脚本stdoutstderr消息不会出现在组件日志中,则可能需要刷新缓冲区或禁用 Python 中这些标准输出流的缓冲。执行以下任一操作:

  • 使用-u参数来禁用缓冲stdoutstderr.

    python3 -u hello_world.py
  • 使用谢滕夫在组件的配方中设置吡酮无缓冲环境变量设置为非空字符串。此环境变量禁用stdoutstderr.

  • 刷新缓冲区stdout或者stderr流。请执行下列操作之一:

    • 打印时刷新消息。

      import sys print('Hello, error!', file=sys.stderr, flush=True)
    • 打印后刷新消息。您可以在刷新流之前发送多条消息。

      import sys print('Hello, error!', file=sys.stderr) sys.stderr.flush()

有关如何验证 Python 脚本是否输出日志消息的更多信息,请参阅查看组件日志.

Amazon Command Line Interface问题

故障排除Amazon CLI适用于的问题Amazon IoT Greengrass V2.

Error: 无效的选择:“绿色草原 v2”

当您运行时,您可能会看到此错误Amazon IoT Greengrass V2命令Amazon CLI(例如,aws greengrassv2 list-core-devices)。

此错误表示您有Amazon CLI不支持的Amazon IoT Greengrass V2. 使用Amazon IoT Greengrass V2使用Amazon CLI,您必须具有以下版本之一或更高版本:

  • 最低Amazon CLIV1 版本:版本

  • 最低Amazon CLIV2 版本:版本 2.1.11

提示

您可以运行以下命令以检查Amazon CLI你拥有的。

aws --version

要解决此问题,请更新Amazon CLI添加到支持Amazon IoT Greengrass V2. 有关更多信息,请参阅 。安装、更新和卸载Amazon CLI中的Amazon Command Line Interface用户指南.