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

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

排除 Amazon IoT Greengrass V2 的故障

使用本节中的故障排除信息和解决方案来帮助解决以下问题Amazon IoT Greengrass Version 2.

查看Amazon IoT Greengrass核心软件和组件日志

这些区域有:Amazon IoT Greengrass核心软件将日志写入本地文件系统,您可以使用该系统查看有关核心设备的实时信息。您也可以配置核心设备以将日志写入 CloudWatch 日志,因此您可以对核心设备进行远程故障排除。这些日志可以帮助您识别组件、部署和核心设备的问题。有关更多信息,请参阅 显示器Amazon IoT Greengrass圆木

Amazon IoT Greengrass核心软件问题

故障排除Amazon IoT Greengrass核心软件问题。

主题

无法设置核心设备

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

无法启动Amazon IoT Greengrass核心软件即系统服务

如果Amazon IoT Greengrass核心软件无法启动,检查系统服务日志找出问题。一个常见的问题是,Java 在 PATH 环境变量 (Linux) 或 PATH 系统变量 (Windows) 上不可用。

无法将 nucleus 设置为系统服务

您可能会看到此错误Amazon IoT Greengrass核心软件安装程序无法设置Amazon IoT Greengrass作为系统服务。在 Linux 设备上,如果核心设备没有systemdinit 系统。安装程序可以成功设置Amazon IoT Greengrass核心软件,即使它无法设置系统服务。

请执行下列操作之一:

  • 配置并运行Amazon IoT Greengrass核心软件即系统服务。必须将软件配置为系统服务才能使用的所有功能Amazon IoT Greengrass. 可以安装systemd或者使用不同的初始化系统。有关更多信息,请参阅 将 Greengrass 核心配置为系统服务

  • 运行Amazon IoT Greengrass没有系统服务的核心软件。您可以使用安装程序在 Greengrass 根文件夹中设置的加载器脚本运行该软件。有关更多信息,请参阅 运行Amazon IoT Greengrass没有系统服务的核心软件

无法连接到Amazon IoT Core

您可能会看到此错误Amazon IoT Greengrass核心软件无法连接到Amazon IoT Core例如,检索部署任务。执行以下操作:

  • 检查您的核心设备是否可以连接到互联网,然后Amazon IoT Core. 有关此处的更多信息Amazon IoT Core您的设备连接的终端节点,请参阅配置Amazon IoT Greengrass核心软件.

  • 检查你的核心设备是Amazon IoT事物使用的证书允许iot:Connect,iot:Publish,iot:Receive,以及iot:Subscribe权限。

  • 如果你的核心设备使用网络代理,请检查您的核心设备是否有设备角色而且它的作用允许iot:Connect,iot:Publish,iot: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 CL

User root is not allowed to execute

运行此功能的用户可能会看到此错误Amazon IoT Greengrass核心软件(通常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

com.aws.greengrass.lifecyclemanager.GenericExternalService: Could not determine user/group to run with

当核心设备尝试运行组件,而 Greengrass 核心未指定用于运行组件的默认系统用户时,您可能会看到此错误。

要修复此问题,请配置 Greengrass 核心以指定运行组件的默认系统用户。有关更多信息,请参阅 配置运行组件的用户配置默认组件用户

Failed to map segment from shared object: operation not permitted

您可能会看到此错误Amazon IoT Greengrass核心软件无法启动,因为/tmp文件夹的安装方式为noexec权限。这些区域有:Amazon通用运行时 (CRT) 库使用/tmp默认情况下,文件夹为。

请执行下列操作之一:

  • 运行以下命令以重新装载/tmp文件夹exec权限并重试。

    sudo mount -o remount,exec /tmp
  • 如果你运行 Greengrass nucleus v2.5.0 或更高版本,你可以设置 JVM 选项来更改文件夹AmazonCRT 库的用途。可以指定jvmOptions部署中或安装时 Greengrass nucleus 组件配置中的参数Amazon IoT Greengrass核心软件。Replace(替换)/path/to/use使用该文件夹的路径AmazonCRT 库可以使用。

    { "jvmOptions": "-Daws.crt.lib.dir=\"/path/to/use\"" }

未能设置 Windows 服务

如果您安装Amazon IoT Greengrass微软 Windows 2016 设备上的核心软件。这些区域有:Amazon IoT GreengrassWindows 2016 不支持核心软件,有关支持的操作系统的列表,请参阅支持的平台.

如果您必须使用 Windows 2016,您可以执行以下操作:

  1. 解压缩下载的内容Amazon IoT Greengrass核心安装档案

  2. Greengrass目录打开bin/greengrass.xml.template文件。

  3. 添加<autoRefresh>标记到文件末尾就在</service>标签。

    </log> <autoRefresh>false</autoRefresh> </service>

com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager

安装时您可能会看到此错误Amazon IoT Greengrass没有根证书颁发机构 (CA) 文件的核心软件。

2022-06-05T10:00:39.556Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: service-loaded. {serviceName=DeploymentService} 2022-06-05T10:00:39.943Z [WARN] (main) com.aws.greengrass.componentmanager.ClientConfigurationUtils: configure-greengrass-mutual-auth. Error during configure greengrass client mutual auth. {} com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager

检查您是否使用以下命令指定了有效的根 CA 文件rootCaPath您提供给安装程序的配置文件中的参数。有关更多信息,请参阅 安装 Amazon IoT Greengrass Core 软件

com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime

当核心设备无法连接时,您可能会看到此警告消息Amazon IoT Core订阅部署作业通知。执行以下操作:

  • 检查核心设备是否已连接到 Internet 并且可以到达Amazon IoT您配置的数据端点。有关核心设备使用的终端节点的更多信息,请参阅允许设备通过代理或防火墙进行流量.

  • 查看 Greengrass 日志中是否有其他揭示其他根本原因的错误。

software.amazon.awssdk.services.iam.model.IamException: The security token included in the request is invalid

您可能会看到此错误安装Amazon IoT Greengrass具有自动配置功能的核心软件,安装程序使用Amazon会话令牌无效。执行以下操作:

  • 如果您使用临时安全证书,请检查会话令牌是否正确以及您正在复制和粘贴完整的会话令牌。

  • 如果您使用长期安全证书,请检查设备在您之前使用临时证书时是否没有会话令牌。执行以下操作:

    1. 运行以下命令以取消设置会话令牌环境变量。

      Linux or Unix
      unset AWS_SESSION_TOKEN
      Windows Command Prompt (CMD)
      set AWS_SESSION_TOKEN=
      PowerShell
      Remove-Item Env:\AWS_SESSION_TOKEN
    2. 检查是否Amazon凭证文件,~/.aws/credentials,包含会话令牌,aws_session_token. 如果是,请从文件中删除该行。

      aws_session_token = AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

您还可以安装Amazon IoT Greengrass核心软件不提供Amazon凭证。有关更多信息,请参阅 安装Amazon IoT Greengrass具有手动资源配置功能的核心软件安装Amazon IoT Greengrass核心软件Amazon IoT实例集预调配

software.amazon.awssdk.services.iot.model.IotException: User: <user> is not authorized to perform: iot:GetPolicy

您可能会看到此错误安装Amazon IoT Greengrass具有自动配置功能的核心软件,安装程序使用Amazon没有所需权限的证书。有关所需权限的更多信息,请参阅安装程序配置资源的最低 IAM 策略.

检查证书的 IAM 身份的权限,并向 IAM 身份授予缺失的所有必需权限。

Error: com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request

您可能会看到此错误影子管理器组件将设备阴影同步到Amazon IoT Core. HTTP 403 状态码表示此错误是由于核心设备的Amazon IoT政策不授予通话权限GetThingShadow.

com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request. {thing name=MyGreengrassCore, shadow name=MyShadow} 2021-07-14T21:09:02.456Z [ERROR] (pool-2-thread-109) com.aws.greengrass.shadowmanager.sync.SyncHandler: sync. Skipping sync request. {thing name=MyGreengrassCore, shadow name=MyShadow} com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: f6e713ba-1b01-414c-7b78-5beb3f3ad8f6, Extended Request ID: null)

同步局部阴影与Amazon IoT Core,核心设备的Amazon IoT策略必须授予以下权限:

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

检查核心设备的Amazon IoT策略,并添加缺少的所有必需权限。有关更多信息,请参阅下列内容:

Operation aws.greengrass#<operation> is not supported by Greengrass

您可能会看到此错误进程间通信 (IPC) 操作在自定义 Greengrass 组件中,以及必需的Amazon-提供的组件未安装在核心设备上。

要修复此问题,请将所需的组件添加为组件配方中的依赖关系,所以Amazon IoT Greengrass在部署组件时,核心软件安装了所需的组件。

java.io.FileNotFoundException: <stream-manager-store-root-dir>/stream_manager_metadata_store (Permission denied)

您可能会看到此错误在直播管理器日志文件 (aws.greengrass.StreamManager.log) 当你配置时串流管理器使用不存在或没有正确权限的根文件夹。有关如何配置此文件夹的更多信息,请参阅串流管理器配置.

com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: Private key or certificate with label <label> does not exist

此错误发生在PKCS #11 提供商组件找不到或加载您在配置时指定的私钥或证书Amazon IoT Greengrass要使用的核心软件硬件安全模块 (HSM). 执行以下操作:

  • 使用您配置的插槽、用户 PIN 和对象标签检查私钥和证书是否存储在 HSM 中Amazon IoT Greengrass要使用的核心软件。

  • 检查私钥和证书在 HSM 中是否使用相同的对象标签。

  • 如果您的 HSM 支持对象 ID,请检查私钥和证书在 HSM 中是否使用相同的对象 ID。

查看 HSM 的文档,了解如何查询 HSM 中安全令牌的详细信息。如果您需要更改安全令牌的插槽、对象标签或对象 ID,请查看 HSM 的文档以了解操作方法。

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 软件

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

software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: Access to KMS is not allowed

以下情况下可能会出现此错误密钥管理器组件部署Amazon Secrets Manager由加密的密钥Amazon Key Management Service钥匙。如果核心设备是代币交换 IAM 角色未授予解密密钥的权限,部署失败,Greengrass 日志包含此错误。

要修复此问题,请添加kms:Decrypt核心设备令牌交换角色的权限。有关更多信息,请参阅下列内容:

java.lang.NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi

您尝试安装时可能会看到此错误Amazon IoT Greengrass核心软件具有硬件安全而且你使用的是不支持硬件安全集成的早期 Greengrass nucleus 版本。要使用硬件安全集成,必须使用 Greengrass nucleus v2.5.3 或更高版本。

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控制台或使用CreateComponentVersion操作。

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

Invalid Input: Encountered following errors in Artifacts: {<s3ArtifactUri> = Specified artifact resource cannot be accessed}

当你从中创建组件版本时,你可能会看到这个错误Amazon IoT Greengrass控制台或使用CreateComponentVersion操作。此错误表示组件配方中的 S3 项目无效。

执行以下操作:

  • 检查 S3 存储桶是否相同Amazon Web Services 区域您创建组件的位置。Amazon IoT Greengrass不支持组件构件的跨区域请求。

  • 检查工件 URI 是否为有效的 S3 对象 URL,并检查该 S3 对象 URL 中是否存在该项目。

  • 检查您的Amazon Web Services 账户有权通过其 S3 对象 URL 访问该项目。

核心设备部署问题

解决 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, ...)

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

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

  • 核心设备的令牌交换角色不允许Amazon IoT Greengrass用于从您在组件配方中指定的 S3 对象 URL 下载组件构件的核心软件。检查代币交换角色是否允许s3:GetObject获取工件可用的 S3 对象 URL。

software.amazon.awssdk.services.s3.model.S3Exception: Access Denied (Service: S3, Status Code: 403, Request ID: <requestID>

这些区域有:PackageDownloadException 错误当核心设备没有调用权限时,可能会包含此堆栈跟踪s3:GetBucketLocation. 错误消息还包括以下消息。

reason: Failed to determine S3 bucket location

检查核心设备的令牌交换角色允许s3:GetBucketLocation用于构件可用的 S3 存储桶。

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 存储桶中是否已更改。如果文件在您创建组件后发生了更改,请将其恢复到核心设备预期的先前版本。如果您无法将文件恢复到以前的版本,或者想要使用文件的新版本,请使用构件文件创建组件的新版本。

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

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政策不允许greengrass:ResolveComponentCandidates权限。查找Status Code: 403在错误日志中找出这个问题。要解决该问题,请添加greengrass:ResolveComponentCandidates对核心设备的许可Amazon IoT策略。有关更多信息,请参阅 最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

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

software.amazon.awssdk.services.greengrassv2data.model.ResourceNotFoundException: The latest version of Component <componentName> doesn't claim platform <coreDevicePlatform> compatibility

当您将组件部署到核心设备并且该组件未列出与核心设备平台兼容的平台时,您可能会看到此错误。请执行下列操作之一:

com.aws.greengrass.componentmanager.exceptions.PackagingException: The deployment attempts to update the nucleus from aws.greengrass.Nucleus-<version> to aws.greengrass.Nucleus-<version> but no component of type nucleus was included as target component

当你部署依赖于的组件时,你可能会看到这个错误Greengrass 核,而且核心设备运行的是比现有的最新次要版本更早的 Greengrass nucleus 版本。出现此错误是因为Amazon IoT Greengrass核心软件尝试自动将组件更新到最新的兼容版本。但是,Amazon IoT Greengrass核心软件会阻止 Greengrass 核心更新到新的次要版本,因为有几个Amazon-提供的组件取决于Greengrass 核的特定次要版本。有关更多信息,请参阅 Greengrass Cule 更新行为

你必须修改部署以指定要使用的 Greengrass nucleus 版本。请执行下列操作之一:

  • 修改部署以指定核心设备当前运行的 Greengrass 核心版本。

  • 修改部署以指定 Greengrass 核的更高次要版本。如果您选择此选项,则还必须更新所有版本Amazon-提供的组件依赖于 Greengrass 原子核的特定次要版本。有关更多信息,请参阅 Amazon-提供的组件

Info: com.aws.greengrass.deployment.exceptions.RetryableDeploymentDocumentDownloadException: Greengrass Cloud Service returned an error when getting full deployment configuration

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

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

Warn: com.aws.greengrass.deployment.DeploymentService: Failed to get thing group hierarchy

当核心设备收到部署且核心设备收到部署时,您可能会看到此警告Amazon IoT政策不允许greengrass:ListThingGroupsForCoreDevice权限。创建部署时,核心设备使用此权限来识别其事物组,并删除您从中移除核心设备的任何事物组的组件。如果核心设备运行Greengrass 核v2.5.0,部署失败。如果核心设备运行 Greengrass nucleus v2.5.1 或更高版本,则部署将继续进行,但不会移除组件。有关事物组删除行为的更多信息,请参阅部署Amazon IoT Greengrass组件到设备.

要更新核心设备的行为以移除从中移除核心设备的事物组组件,请添加greengrass:ListThingGroupsForCoreDevice对核心设备的许可Amazon IoT策略。有关更多信息,请参阅 更新核心设备的Amazon IoT政策

Info: com.aws.greengrass.deployment.DeploymentDocumentDownloader: Calling Greengrass cloud to get full deployment configuration

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

核心设备组件问题

解决核心设备上的 Greengrass 组件问题。

Warn: '<command>' is not recognized as an internal or external command

你可能会在 Greengrass 组件的日志中看到这个错误Amazon IoT Greengrass核心软件无法在组件的生命周期脚本中运行命令。组件的状态变为BROKEN这是这个错误的结果。如果运行组件的系统用户为,则会出现此错误,例如ggc_user,在的文件夹中找不到该命令的可执行文件路径.

在 Windows 设备上,检查包含可执行文件的文件夹是否位于PATH适用于运行该组件的系统用户。如果缺少了PATH,执行以下操作之一:

  • 将可执行文件的文件夹添加到PATH系统变量,所有用户均可使用。然后,重启组件。

    如果你在更新 Greengrass nucleus 2.5.0 之后运行PATH系统变量,必须重新启动Amazon IoT Greengrass运行更新后的组件的核心软件PATH. 如果Amazon IoT Greengrass核心软件不使用更新版PATH重新启动软件后,请重新启动设备并重试。有关更多信息,请参阅 运行Amazon IoT GreengrassCore 软件

  • 将可执行文件的文件夹添加到PATH运行该组件的系统用户的用户变量。

Python 脚本不记录消息

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

  • 使用以下命令运行 Python-u用于禁用缓冲的参数stdoutstderr.

    Linux or Unix
    python3 -u hello_world.py
    Windows
    py -3 -u hello_world.py
  • 使用Setenv在你的组件的配方中设置PYTHONUNBUFFERED环境变量转换为非空字符串。此环境变量禁用缓冲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 IoT Greengrass圆木.

更改默认配置时组件配置不更新

当你更改DefaultConfiguration在组件的配方中,新的默认配置不会在部署期间取代组件的现有配置。要应用新的默认配置,必须将组件的配置重置为其默认设置。部署组件时,将单个空字符串指定为重置更新.

Console
重置路径
[""]
Amazon CLI

以下命令创建对核心设备的部署。

aws greengrassv2 create-deployment --cli-input-json file://reset-configuration-deployment.json

这些区域有:reset-configuration-deployment.json文件包含以下 JSON 文档。

{ "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "deploymentName": "Deployment for MyGreengrassCore", "components": { "com.example.HelloWorld": { "componentVersion": "1.0.0", "configurationUpdate": {, "reset": [""] } } } }
Greengrass CLI

以下Greengrass命令在核心设备上创建本地部署。

sudo greengrass-cli deployment create \ --recipeDir recipes \ --artifactDir artifacts \ --merge "com.example.HelloWorld=1.0.0" \ --update-config reset-configuration-deployment.json

这些区域有:reset-configuration-deployment.json文件包含以下 JSON 文档。

{ "com.example.HelloWorld": { "RESET": [""] } }

awsiot.greengrasscoreipc.model.UnauthorizedError

当 Greengrass 组件无权在资源上执行 IPC 操作时,您可能会在 Greengrass 组件的日志中看到此错误。要授予组件调用 IPC 操作的权限,请在该组件的配置中定义 IPC 授权策略。有关更多信息,请参阅 授权组件执行 IPC 操作

提示

如果你改变了DefaultConfiguration在组件的配方中,必须将组件的配置重置为新的默认配置。部署组件时,将单个空字符串指定为重置更新. 有关更多信息,请参阅 更改默认配置时组件配置不更新

com.aws.greengrass.authorization.exceptions.AuthorizationException: Duplicate policy ID "<id>" for principal "<componentList>"

如果多个 IPC 授权策略(包括核心设备上的所有组件)使用相同的策略 ID,您可能会看到此错误。

检查组件的 IPC 授权策略,修复所有重复项,然后重试。要创建唯一的策略 ID,我们建议您将组件名称、IPC 服务名称和计数器组合在一起。有关更多信息,请参阅 授权组件执行 IPC 操作

提示

如果你改变了DefaultConfiguration在组件的配方中,必须将组件的配置重置为新的默认配置。部署组件时,将单个空字符串指定为重置更新. 有关更多信息,请参阅 更改默认配置时组件配置不更新

com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 400)

当核心设备无法获取时,您可能会看到此错误Amazon来自的证书令牌交换服务. HTTP 400 状态码表示此错误是由于核心设备的代币交换 IAM 角色不存在或没有允许的信任关系Amazon IoT凭证提供者来假设。

执行以下操作:

  1. 确定核心设备使用的代币交换角色。错误消息包括核心设备的Amazon IoT角色别名,指向代币交换角色。在开发计算机上运行以下命令,并替换MyGreengrassCoreTokenExchangeRoleAlias的名字是Amazon IoT错误消息中的角色别名。

    aws iot describe-role-alias --role-alias MyGreengrassCoreTokenExchangeRoleAlias

    响应中包括代币交换 IAM 角色的 Amazon Resource (ARN)。

    { "roleAliasDescription": { "roleAlias": "MyGreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/MyGreengrassCoreTokenExchangeRoleAlias", "roleArn": "arn:aws:iam::123456789012:role/MyGreengrassV2TokenExchangeRole", "owner": "123456789012", "credentialDurationSeconds": 3600, "creationDate": "2021-02-05T16:46:18.042000-08:00", "lastModifiedDate": "2021-02-05T16:46:18.042000-08:00" } }
  2. 检查角色是否存在。运行以下命令,并替换MyGreengrassV2TokenExchangeRole使用代币交换角色的名称。

    aws iam get-role --role-name MyGreengrassV2TokenExchangeRole

    如果命令返回NoSuchEntity错误,该角色不存在,您必须创建角色。有关如何创建和配置此角色的更多信息,请参阅授权核心设备与Amazon服务.

  3. 检查该角色是否具有信任关系,以允许Amazon IoT凭证提供者来假设。上一步中的响应包含AssumeRolePolicyDocument,它定义了角色的信任关系。该角色必须定义允许的信任关系credentials.iot.amazonaws.com假设。此文档应类似于以下示例:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    如果角色的信任关系不允许credentials.iot.amazonaws.com要假设,您必须将此信任关系添加到角色中。有关更多信息,请参阅修改角色Amazon Identity and Access Management用户指南.

com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 403)

当核心设备无法获取时,您可能会看到此错误Amazon来自的证书令牌交换服务. HTTP 403 状态码表示此错误是由于核心设备的Amazon IoT政策不允许iot:AssumeRoleWithCertificate核心设备的权限Amazon IoT角色别名。

查看核心设备的Amazon IoT策略,然后添加iot:AssumeRoleWithCertificate核心设备的权限Amazon IoT角色别名。错误消息包括核心设备的当前Amazon IoT角色别名。有关此权限以及如何更新核心设备的更多信息Amazon IoT策略,请参阅最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备更新核心设备的Amazon IoT政策.

Received error when attempting to retrieve ECS metadata: Could not connect to the endpoint URL: "<tokenExchangeServiceEndpoint>"

当组件未运行时,您可能会看到此错误令牌交换服务然后一个组件尝试请求Amazon凭证。

执行以下操作:

  • 检查该组件是否声明了对令牌交换服务组件的依赖关系,aws.greengrass.TokenExchangeService. 如果没有,请添加依赖关系,然后重新部署组件。

  • 检查组件是否使用Amazon中的凭证install生命周期。Amazon IoT Greengrass不保证代币交换服务在此期间可用install生命周期。更新组件以移动使用的代码Amazon凭证startup要么run生命周期,然后重新部署组件。

copyFrom: <configurationPath> is already a container, not a leaf

当您将配置值从容器类型(列表或对象)更改为非容器类型(字符串、数字或布尔值)时,可能会看到此错误。执行以下操作:

  1. 检查组件的配方,看看其默认配置是将该配置值设置为列表还是对象。如果是,请删除或更改该配置值。

  2. 创建部署以将配置值重置为其默认值。有关更多信息,请参阅 创建部署Update component configurations

然后,您可以将该配置值设置为字符串、数字或布尔值。

com.aws.greengrass.componentmanager.plugins.docker.exceptions.DockerLoginException: Error logging into the registry using credentials - 'The stub received bad data.'

您可能会在 Greengrass Nucleus 日志中看到此错误Docker 应用程序管理器组件尝试从Amazon Elastic Container Registry (Amazon ECR) 中的私有存储库下载 Docker 映像。如果您使用wincred Docker 凭证(docker-credential-wincred)。因此,Amazon ECR 无法存储登录凭证。

执行以下任一操作:

  • 如果你不使用wincredDocker 凭证助手,移除docker-credential-wincred来自核心设备的程序。

  • 如果您将wincredDocker 凭证助手,执行以下操作:

    1. Renamedocker-credential-wincred核心设备上的程序。Replace(替换)wincred为 Windows Docker 凭证助手使用了一个新名称。例如,您可以将其重命名为docker-credential-wincredreal.

    2. 更新credsStoreDocker 配置文件中的选项 (.docker/config.json)使用 Windows Docker 凭证助手的新名称。例如,如果您将程序重命名为docker-credential-wincredreal,更新credsStore选项wincredreal.

      { "credsStore": "wincredreal" }

java.io.IOException: Cannot run program "cmd" ...: [LogonUser] The password for this account has expired.

当运行组件进程的系统用户时,你可能会在 Windows 核心设备上看到这个错误,例如ggc_user,密码已过期。因此,Amazon IoT Greengrass核心软件无法以该系统用户的身份运行组件进程。

更新 Greengrass 系统用户的密码

  1. 以管理员身份运行以下命令以设置用户的密码。Replace(替换)ggc_user与系统用户交换,然后更换密码使用要设置的密码。

    net user ggc_user password
  2. 使用PsExec 实用程序将用户的新密码存储在 Credential Manager 实例中 LocalSystem 账户。Replace(替换)密码使用您设置的用户的密码。

    psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
提示

根据您的 Windows 配置,用户的密码可能会设置为在future 某个日期到期。为确保您的 Greengrass 应用程序继续运行,请跟踪密码何时到期,并在密码到期前进行更新。您也可以将用户的密码设置为永不过期。

  • 要检查用户及其密码何时到期,请运行以下命令。

    net user ggc_user | findstr /C:expires
  • 若要将用户密码设置为永不过期,请运行以下命令。

    wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False

aws.greengrass.StreamManager: Instant exceeds minimum or maximum instant

当你将 Stream manager v2.0.7 升级到 v2.0.8 和 v2.0.11 之间的版本时,如果该组件无法启动,你可能会在流管理器组件的日志中看到以下错误。

2021-07-16T00:54:58.568Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: com.fasterxml.jackson.databind.JsonMappingException: Instant exceeds minimum or maximum instant (through reference chain: com.amazonaws.iot.greengrass.streammanager.export.PersistedSuccessExportStatesV1["lastExportTime"]). {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING} 2021-07-16T00:54:58.579Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: java.time.DateTimeException: Instant exceeds minimum or maximum instant. {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING}

如果您部署了 Stream manager v2.0.7 并且想要升级到更高版本,则必须直接升级到 Stream manager v2.0.12。有关直播管理器组件的更多信息,请参阅流管理器.

核心设备 Lambda 函数组件问题

解决核心设备上的 Lambda 函数组件问题。

The following cgroup subsystems are not mounted: devices, memory

在以下情况下运行容器化 Lambda 函数时,您可能会看到此错误:

  • 核心设备没有为内存或设备 cgroup 启用 cgroup v1。

  • 核心设备启用了 cgroups v2。Greengrass Lambda 函数需要 cgroups v1,而 cgroups v1 和 v2 是互斥的。

要启用 cgroups v1,请使用以下 Linux 内核参数启动设备。

cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
提示

在 Raspberry Pi 上,编辑/boot/cmdline.txt用于设置设备的内核参数的文件。

ipc_client.py:64,HTTP Error 400:Bad Request, b'No subscription exists for the source <label-or-lambda-arn> and subject <label-or-lambda-arn>

当您运行 V1 Lambda 函数时,您可能会看到此错误,该函数使用Amazon IoT GreengrassCore SDK,在 V2 核心设备上,无需在传统订阅路由器组件. 要修复此问题,请部署和配置传统订阅路由器以指定所需的订阅。有关更多信息,请参阅 导入 V1 Lambda 函数

Greengrass 命令行接口问题

排查方面的问题Greengrass.

java.lang.RuntimeException: Unable to create ipc client

当你运行 Greengrass CLI 命令并且指定的根文件夹与 Greengrass CLI 命令不同的根文件夹时,你可能会看到这个错误Amazon IoT Greengrass核心软件已安装。

执行以下任一操作来设置根路径,然后替换/greengrass/v2使用您的路径Amazon IoT Greengrass核心软件安装:

  • GGC_ROOT_PATH 环境变量设置为 /greengrass/v2

  • 添加--ggcRootPath /greengrass/v2命令的参数,如以下示例中所示。

    greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]

Amazon Command Line Interface问题

故障排除Amazon CLI问题Amazon IoT Greengrass V2.

Error: Invalid choice: 'greengrassv2'

运行时可能会看到此错误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 版本:v1.18.197

  • 最低Amazon CLIV2 版本:v2.1.11

提示

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

aws --version

要解决该问题,请更新Amazon CLI到支持的更高版本Amazon IoT Greengrass V2. 有关更多信息,请参阅安装、更新和卸载Amazon CLIAmazon Command Line Interface用户指南.