本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
问题排查 AWS IoT Greengrass V2
使用本节中的故障排除信息和解决方案来帮助解决的问题 AWS IoT Greengrass Version 2。
主题
视图 AWS IoT Greengrass 核心软件和组件日志
AWS IoT Greengrass Core 软件将日志写入本地文件系统,您可以使用它来查看有关核心设备的实时信息。您还可以将核心设备配置为将日志写入日 CloudWatch 志,这样您就可以远程排除核心设备故障。这些日志可以帮助您识别组件、部署和核心设备的问题。有关更多信息,请参阅 监控 AWS IoT Greengrass 日志。
AWS IoT Greengrass 核心软件问题
对 AWS IoT Greengrass 核心软件问题进行故障排除。
主题
com.aws.greengrass.生命周期管理器。GenericExternalService: 无法 user/group 决定使用运行
com.aws.greengrass.util.exceptionTLSAuthException: 无法获取信任管理器
com.aws.greengrass.deploIotJobsHelper:订阅 Iot 任务描述主题期间无连接可用。过一会儿会重试
software.amazon.awsdk.services.iam.model。IamException: 请求中包含的安全令牌无效
software.amazon.awsdk.services.iot.model。IotException: 用户:<用户>无权执行:iot: GetPolicy
错误:com.aws.greengrass.shadowmanager.sync.model。FullShadowSyncRequest: 无法执行云影获取请求
com.aws.greengrass.security.pkcs11。PKCS11CryptoKeyService: 带有<标签的私钥或证书>不存在
软件.amazon.awsdk.services.secretsmanager.model。SecretsManagerException: 不允许访问 KMS
java.lang。NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi
com.aws.greengrass.security.pkcs11。PKCS11CryptoKeyService: CKR_操作未初始化
ThrottlingException 来自 ListDeployments API
来自 ListDeployments API 的 ThrottlingException:当账户中有大量部署时,您可能会看到这种情况。
要解决该问题,可以执行下列一项操作:
无法设置核心设备
如果 AWS IoT Greengrass Core 软件安装程序失败且您无法设置核心设备,则可能需要卸载该软件并重试。有关更多信息,请参阅 卸载 AWS IoT Greengrass 核心软件。
无法启动 AWS IoT Greengrass 核心软件即系统服务
如果 AWS IoT Greengrass Core 软件无法启动,请检查系统服务日志以确定问题。一个常见问题是 PATH 环境变量(Linux)或 PATH 系统变量(Windows)中没有 Java。
无法将 Nucleus 设置为系统服务
当 AWS IoT Greengrass Core 软件安装程序无法设置 AWS IoT Greengrass 为系统服务时,您可能会看到此错误。在 Linux 设备上,如果核心设备没有 systemd
请执行以下操作之一:
-
将 AWS IoT Greengrass Core 软件配置并作为系统服务运行。必须将软件配置为系统服务才能使用的 AWS IoT Greengrass所有功能。您可以安装 systemd
或使用不同的初始化系统。有关更多信息,请参阅 将 Greengrass Nucleus 配置为系统服务。 -
在没有系统服务的情况下运行 AWS IoT Greengrass Core 软件。您可以使用安装程序在 Greengrass 根文件夹中设置的加载程序脚本来运行该软件。有关更多信息,请参阅 在没有系统服务的情况下运行 C AWS IoT Greengrass ore 软件。
无法连接到 AWS IoT Core
例如,当 AWS IoT Greengrass 核心软件无法连接 AWS IoT Core 以检索部署任务时,您可能会看到此错误。执行以下操作:
-
检查您的核心设备是否可以连接到互联网,然后 AWS IoT Core. 有关您的设备连接的 AWS IoT Core 终端节点的更多信息,请参阅配置 AWS IoT Greengrass 核心软件。
-
检查您的核心设备是否 AWS IoT 使用了允许
iot:Connect、iot:Publishiot:Receive、和iot:Subscribe权限的证书。 -
如果您的核心设备使用网络代理,请检查您的核心设备是否具有设备角色以及其角色是否允许
iot:Connect、iot:Publish、iot:Receive和iot:Subscribe权限。
内存不足错误
如果您的设备内存不足,无法在 Java 堆中分配对象,则通常会发生此错误。在内存有限的设备上,您可能需要指定最大堆大小来控制内存分配。有关更多信息,请参阅 使用 JVM 选项控制内存分配。
无法安装 Greengrass CLI
当你在 C AWS IoT Greengrass ore 的安装命令中使用--deploy-dev-tools参数时,你可能会看到以下控制台消息。
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。
不允许用户 root 执行
当运行 AWS IoT Greengrass Core 软件的用户(通常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.生命周期管理器。GenericExternalService: 无法 user/group 决定使用运行
当核心设备尝试运行组件,而 Greengrass Nucleus 未指定用于运行组件的默认系统用户时,可能会出现此错误。
要修复此问题,请配置 Greengrass Nucleus 以指定运行组件的默认系统用户。有关更多信息,请参阅配置运行组件的用户和配置默认组件用户。
无法从共享对象映射分段:不允许操作
当 AWS IoT Greengrass Core 软件无法启动时,你可能会看到此错误,因为该/tmp文件夹是通过noexec权限安装的。默认情况下,AWS 通用运行时(CRT)库/tmp 文件夹。
请执行以下操作之一:
-
运行以下命令以通过
exec权限重新装载/tmp文件夹,然后重试。sudo mount -o remount,exec /tmp -
如果你运行 Greengrass nucleus v2.5.0 或更高版本,你可以设置 JVM 选项来更改 CRT 库使用的文件夹。 AWS 您可以在部署中或安装核心软件时在 Greengrass AWS IoT Greengrass 核心组件配置中指定
jvmOptions参数。/path/to/use替换为 AWS CRT 库可以使用的文件夹路径。{ "jvmOptions": "-Daws.crt.lib.dir=\"/path/to/use\"" }
Windows 服务设置失败
如果你在微软Windows 2016设备上安装 AWS IoT Greengrass 酷睿软件,你可能会看到这个错误。Windows 2016 不支持 AWS IoT Greengrass 核心软件,有关支持的操作系统的列表,请参阅支持的平台。
如果您必须使用 Windows 2016,则可以先执行以下操作:
-
解压缩下载的 AWS IoT Greengrass Core 安装存档
-
在
Greengrass目录中打开bin/greengrass.xml.template文件。 -
将
<autoRefresh>标签添加到文件末尾的</service>标签之前。</log> <autoRefresh>false</autoRefresh> </service>
com.aws.greengrass.util.exceptionTLSAuthException: 无法获取信任管理器
安装没有根证书颁发机构 (CA) 文件的 C AWS IoT Greengrass ore 软件时,可能会看到此错误。
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
检查您是否在提供给安装程序的配置文件中使用 rootCaPath 参数指定了有效的 CA 根文件。有关更多信息,请参阅 安装 AWS IoT Greengrass Core 软件。
com.aws.greengrass.deploIotJobsHelper:订阅 Iot 任务描述主题期间无连接可用。过一会儿会重试
当核心设备无法连接到订阅部署任务通知时, AWS IoT Core 您可能会看到此警告消息。执行以下操作:
-
检查核心设备是否已连接到互联网并且可以到达您配置 AWS IoT 的数据端点。有关核心设备所使用端点的更多信息,请参阅允许设备流量通过代理或防火墙。
-
检查 Greengrass 日志中是否有其他能揭示其他根本原因的错误。
software.amazon.awsdk.services.iam.model。IamException: 请求中包含的安全令牌无效
当你安装具有自动配置功能的 AWS IoT Greengrass Core 软件,并且安装程序使用的 AWS 会话令牌无效时,你可能会看到此错误。执行以下操作:
-
如果您使用临时安全凭证,请检查会话令牌是否正确,以及是否正在复制和粘贴完整的会话令牌。
-
如果您使用长期安全凭证,请检查设备上是否有以前使用临时凭证时留下的会话令牌。执行以下操作:
-
运行以下命令以取消设置会话令牌环境变量。
-
检查 AWS 凭证文件是否包含会话令牌
aws_session_token。~/.aws/credentials如果是,请从文件中移除该行。aws_session_token =AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
-
您也可以在不提供 AWS 凭据的情况下安装 AWS IoT Greengrass Core 软件。有关更多信息,请参阅 安装 AWS IoT Greengrass 具有手动资源配置功能的核心软件或 安装 AWS IoT Greengrass 核心软件带有 AWS IoT 舰队配置。
software.amazon.awsdk.services.iot.model。IotException: 用户:<用户>无权执行:iot: GetPolicy
当你安装具有自动配置功能的 AWS IoT Greengrass Core 软件时,你可能会看到此错误,而安装程序使用的 AWS 凭据不具备所需权限。有关所需权限的更多信息,请参阅安装程序配置资源的最低 IAM 策略。
检查凭证的 IAM 身份权限,并授予 IAM 身份任何缺失的所需权限。
错误:com.aws.greengrass.shadowmanager.sync.model。FullShadowSyncRequest: 无法执行云影获取请求
当你使用影子管理器组件与设备影子同步时,你可能会看到这个错误 AWS IoT Core。HTTP 403 状态码表明此错误之所以发生,是因为核心设备的 AWS 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)
要与本地阴影同步 AWS IoT Core,核心设备的 AWS IoT 策略必须授予以下权限:
-
iot:GetThingShadow -
iot:UpdateThingShadow -
iot:DeleteThingShadow
查看核心设备的 AWS IoT 政策,并添加所有缺少的必需权限。有关更多信息,请参阅下列内容:
Greengrass 不支持 aws.greengras > s# < 操作
当你在自定义 Greengrass 组件中使用进程间通信 (IPC) 操作且核心设备上未安装所需 AWS提供的组件时,你可能会看到此错误。
要修复此问题,请在组件配方中添加所需的组件作为依赖项,这样 AWS IoT Greengrass Core 软件会在您部署组件时安装所需的组件。
-
检索密钥值 –
aws.greengrass.SecretManager -
与本地影子交互 –
aws.greengrass.ShadowManager -
管理本地部署和组件 –
aws.greengrass.Cliv2.6.0 或更高版本 -
对客户端设备进行身份验证和授权 –
aws.greengrass.clientdevices.Authv2.2.0 或更高版本
java.io。FileNotFoundException: < stream-manager-store-root-dir /stream_manager_metadata_store(权限被>拒绝)
当您将流管理器配置为使用不存在或不具备正确权限的根文件夹时,您可能会在流管理器日志文件 (aws.greengrass.StreamManager.log) 中看到此错误。有关如何配置此文件夹的更多信息,请参阅流管理器配置。
com.aws.greengrass.security.pkcs11。PKCS11CryptoKeyService: 带有<标签的私钥或证书>不存在
当 PKCS #11 提供者组件找不到或加载您在将 AWS IoT Greengrass 核心软件配置为使用硬件安全模块 (HSM) 时指定的私钥或证书时,就会出现此错误。执行以下操作:
-
使用您配置 AWS IoT Greengrass 核心软件使用的插槽、用户 PIN 和对象标签,检查私钥和证书是否存储在 HSM 中。
-
检查私钥和证书在 HSM 中是否使用相同的对象标签。
-
如果您的 HSM 支持对象 ID,请检查私钥和证书在 HSM 中是否使用相同的对象 ID。
查看 HSM 的文档,了解如何在 HSM 中查询有关安全令牌的详细信息。如果您需要更改安全令牌的槽位、对象标签或对象 ID,请查看 HSM 文档,了解如何操作。
软件.amazon.awsdk.services.secretsmanager.model。SecretsManagerException: 用户:<用户>无权执行:secretsmanager: GetSecretValue on 资源:arn < >
当您使用密钥管理器组件部署密钥时,可能会出现此错误。 AWS Secrets Manager 如果核心设备的令牌交换 IAM 角色未授予获取密钥的权限,则部署失败且 Greengrass 日志中包含此错误。
授权核心设备下载密钥
-
为核心设备的令牌交换角色添加
secretsmanager:GetSecretValue权限。以下示例策略语句将授予获取密钥值的权限。{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef" ] }有关更多信息,请参阅 授权核心设备与 AWS 服务交互。
-
将部署重新应用到核心设备上。请执行以下操作之一:
-
在不做任何更改的情况下修改部署。核心设备收到修改后的部署后,会再次尝试下载秘密。有关更多信息,请参阅 修改部署。
-
重新启动 AWS IoT Greengrass Core 软件以重试部署。有关更多信息,请参阅 运行 AWS IoT Greengrass 核心软件。
如果密钥管理器成功下载密钥,则部署成功。
-
软件.amazon.awsdk.services.secretsmanager.model。SecretsManagerException: 不允许访问 KMS
当您使用密钥管理器组件部署由密钥加密的 AWS Secrets Manager 密 AWS Key Management Service 钥时,可能会出现此错误。如果核心设备的令牌交换 IAM 角色未授予解密密钥的权限,则部署失败且 Greengrass 日志中包含此错误。
要解决这个问题,请为核心设备的令牌交换角色添加 kms:Decrypt 权限。有关更多信息,请参阅下列内容:
-
《AWS Secrets Manager 用户指南》中的密钥加密和解密
java.lang。NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi
当你尝试安装具有硬件安全性的 AWS IoT Greengrass Core 软件并使用不支持硬件安全集成的早期 Greengrass nucleus 版本时,你可能会看到这个错误。要使用硬件安全集成,必须使用 Greengrass Nucleus v2.5.3 或更高版本。
com.aws.greengrass.security.pkcs11。PKCS11CryptoKeyService: CKR_操作未初始化
当你将 C AWS IoT Greengrass ore 作为系统服务运行时使用 TPM2 库时,你可能会看到这个错误。
此错误表示你需要添加一个环境变量来提供 PKCS #11 存储在 C AWS IoT Greengrass ore systemd 服务文件中的位置。
有关更多信息,请参阅 PKCS#11 提供程序 组件文档的“要求”部分。
Greengrass 核心设备卡在 nucleus v2.12.3 上
如果您的 Greengrass 核心设备无法从 Nucleus 版本 2.12.3 修改您的部署,则可能需要下载 Greengrass.jar 文件并将其替换为 Greengrass Nucleus 版本 2.12.2。执行以下操作:
-
在 Greengrass 核心设备上,运行以下命令以停止 Greengrass Core 软件。
-
在核心设备上,将 AWS IoT Greengrass 软件下载到名为的文件中
greengrass-2.12.2.zip。 -
将 AWS IoT Greengrass Core 软件解压缩到设备上的文件夹。
GreengrassInstaller替换为要使用的文件夹。 -
运行以下命令,使用 Nucleus 版本 2.12.2 Greengrass JAR 文件覆盖 Nucleus 版本 2.12.3 Greengrass JAR 文件。
-
运行以下命令以启动 Greengrass Core 软件。
Greengrass nucleus v2.14.0 systemd 模板问题
如果使用默认 systemd 服务模板在 Linux 设备上安装了 Greengrass Nucleus v2.14.0,您可能会遇到这个问题。执行以下操作:
-
在 Greengrass 核心设备上,运行以下命令将 systemd 服务文件恢复至其在 Nucleus v2.13.0 及更早版本中的状态。
-
应用更改。
AWS IoT Greengrass 云问题
使用以下信息对 AWS IoT Greengrass 控制台和 API 的问题进行故障排除。每个条目都与执行操作时可能看到的错误消息相对应。
调用 CreateComponentVersion 操作时出错 (AccessDeniedException):用户:arn: aws: iam:: 12345678 < 9012: user/ 用户名无权执行:null >
当你从 AWS IoT Greengrass 控制台或通过CreateComponentVersion操作创建组件版本时,你可能会看到这个错误。
此错误表明您的配方并非有效 JSON 或 YAML。请检查配方的语法,修复所有语法问题,然后再次尝试。您可以使用在线 JSON 或 YAML 语法检查器来识别配方中的语法问题。
输入无效:在构件中遇到以下错误:{<s3 ArtifactUri > = 无法访问指定的对象资源}
当你从 AWS IoT Greengrass 控制台或通过CreateComponentVersion操作创建组件版本时,你可能会看到这个错误。此错误表明组件配方中的 S3 构件无效。
执行以下操作:
-
检查 S3 存储桶是否与您创建组件的存储桶相同 AWS 区域 。 AWS IoT Greengrass 不支持对组件工件的跨区域请求。
-
检查构件 URI 是否为有效的 S3 对象 URL,并检查该 S3 对象 URL 中是否存在该构件。
-
检查您是否 AWS 账户 有权通过其 S3 对象 URL 访问该对象。
非活动部署状态
当您在没有所需依赖 AWS IoT 策略的情况下调用 ListDeployments API 时,您可能会获得INACTIVE部署状态。您必须具有所需权限才能获得准确的部署状态。您可以在由 AWS IoT Greengrass V2定义的操作中,按照 ListDeployments 所需的权限找到相关操作。如果没有所需的依赖 AWS IoT 权限,您仍将看到部署状态,但可能会看到不准确的部署状态INACTIVE。
CreateDeployment 返回成功响应但 GetDeployment 返回 404 错误
当你调用CreateDeployment操作部署到 AWS IoT 事物或事物组时,你可能会看到这个问题。该CreateDeployment调用返回带有有效部署 ID 的200状态码。但是,当您GetDeployment使用该部署 ID 进行呼叫时,会收到ResourceNotFoundException错误。 AWS IoT Greengrass 控制台显示部署 URL 的 “未找到部署” 页面。目标的先前部署也可能显示无法替换的INACTIVE状态。
当多个CreateDeployment请求同时针对同一 AWS IoT 事物时,可能会出现此问题。竞争条件可能导致云无法记录部署。核心设备仍通过 AWS IoT
设备影子接收和应用部署,但 AWS IoT Greengrass 云服务没有相关记录。出现此问题后,它还可能影响到同一目标的后续部署。
要解决和防止此问题,请执行以下操作:
-
避免发送针对同一 AWS IoT 事物的并发
CreateDeployment请求。序列化您的部署请求或在它们之间添加延迟,以确保一次只有一个CreateDeployment调用针对特定事物。 -
如果此问题已经影响到您的目标,则后续部署可能会继续返回 404 错误。要解决此问题,请删除受影响目标的过时部署记录,以便下一次部署可以正常进行。
核心设备部署问题
排查 Greengrasss 核心设备上的部署问题。每个条目都与您可能在核心设备上看到的日志消息相对应。
主题
错误:com.aws.greengrass.componentmanager.exceptions。PackageDownloadException: 无法下载工件
当 AWS IoT Greengrass 核心设备应用部署时 Core 软件无法下载组件工件时,您可能会看到此错误。该错误导致部署失败。
当您收到此错误时,日志中还会包含可用于识别具体问题的堆栈跟踪。以下每个条目都与您可能在 Failed to download artifact 错误消息的堆栈跟踪中看到的消息相对应。
主题
Software.amazon.awsdk.Services.s3.model.s3Exception:null(服务:S3,状态码:403,请求 ID:null,...)
在以下情况下,PackageDownloadException 错误可能包括此堆栈跟踪:
-
组件构件在组件配方中指定的 S3 对象 URL 中不可用。检查您是否已将构件上传至 S3 存储桶,以及构件 URI 是否与存储桶中构件的 S3 对象 URL 相匹配。
-
核心设备的令牌交换角色不允许 AWS IoT Greengrass 核心软件从您在组件配方中指定的 S3 对象 URL 下载组件工件。检查令牌交换角色是否允许
s3:GetObject使用该构件可用的 S3 对象 URL。
Software.amazon.awsdk.Services.s3.model.s3Exception:访问被拒绝(服务:S3,状态码:403,请求编号:RequestID)<>
当核心设备没有调用权限时,PackageDownloadException 错误可能包括此堆栈跟踪s3:GetBucketLocation。该错误消息包括以下消息。
reason: Failed to determine S3 bucket location
检查核心设备的令牌交换角色是否允许 s3:GetBucketLocation 使用该构件可用的 S3 存储桶。
错误:com.aws.greengrass.componentmanager.exceptions。ArtifactChecksumMismatchException: 对已下载对象的完整性检查失败。可能是由于文件损坏。
当 AWS IoT Greengrass 核心设备应用部署时 Core 软件无法下载组件工件时,您可能会看到此错误。部署失败,因为下载的构件文件的校验和与创建组件时 AWS IoT Greengrass 计算出的校验和不匹配。
执行以下操作:
-
检查托管构件文件的 S3 存储桶中,构件文件是否发生变更。如果自创建组件以来文件发生了变更,请将其恢复至核心设备期望的先前版本。如果您无法将文件恢复为其先前版本,或是您想要使用该文件的新版本,请使用构件文件创建该组件的新版本。
-
检查核心设备的互联网连接。如果构件文件在下载时损坏,则可能会出现此错误。创建新部署,然后再次尝试。
错误:com.aws.greengrass.componentmanager.exceptions。NoAvailableComponentVersionException: 未能与云协商组件<名称>版本,也没有满足<要求的本地适用版本 >
当核心设备找不到满足该核心设备部署要求的组件版本时,可能会出现此消息。核心设备检查 AWS IoT Greengrass 服务和本地设备上的组件。错误消息包括每个部署的目标以及该部署对组件的版本要求。部署目标可以是事物、事物组或 LOCAL_DEPLOYMENT,代表核心设备上的本地部署。
以下情况下可能会出现此问题:
-
核心设备是多个部署的目标,而这些部署对组件版本的要求存在冲突。例如,核心设备可能是包含一个
com.example.HelloWorld组件的多个部署的目标,其中一个部署需要版本 1.0.0,另一个需要版本 1.0.1。不可能有一个组件同时满足这两项要求,因此部署失败。 -
该 AWS IoT Greengrass 服务或本地设备上不存在组件版本。例如,该组件可能已被删除。
-
有符合版本要求的组件版本,但都无法与核心设备平台兼容。
-
核心设备的 AWS IoT 政策不授予
greengrass:ResolveComponentCandidates权限。在错误日志中查找Status Code: 403以识别此问题。要解决此问题,请将greengrass:ResolveComponentCandidates权限添加至核心设备的 AWS IoT 策略中。有关更多信息,请参阅 AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策。
要解决此问题,请修改部署以包含兼容的组件版本或删除不兼容的组件版本。有关如何修改云部署的更多信息,请参阅 修改部署。有关如何修改本地部署的更多信息,请参阅 AWS IoT Greengrass CLI 部署创建命令。
软件.amazon.awsdk.services.greengrassv2data.model。ResourceNotFoundException: 最新版本的 < Component componentName > 未声称平台核心兼容性 < DevicePlatform >
当您将组件部署至核心设备时,如果该组件未列出与核心设备平台兼容的平台,则可能会出现此错误。请执行以下操作之一:
-
如果该组件为自定义 Greengrass 组件,则可以更新该组件以使其与核心设备兼容。添加与核心设备平台匹配的新清单,或更新现有清单以匹配核心设备平台。有关更多信息,请参阅 AWS IoT Greengrass 组件配方参考。
-
如果组件由提供 AWS,请检查该组件的另一个版本是否与核心设备兼容。如果没有兼容的版本,请在 AWS re:Post
上使用 AWS IoT Greengrass 标签 联系我们,或联系 支持 。
com.aws.greengrass.componentmanager.exceptionPackagingException: 该部署尝试将核从 AWS.Greengrass.Nucleus-版本更新>为 AWS.Greengrass.Nucleus-< 版本,但没有将核类型的组件列为目标组件 < >
当您部署依赖于 Greengrass Nucleus 的组件时,如果核心设备运行的 Greengrass Nucleus 版本早于可用的最新次要版本,则可能会出现此错误。发生此错误是因为 AWS IoT Greengrass Core 软件尝试自动将组件更新到最新的兼容版本。但是, AWS IoT Greengrass Core 软件会阻止 Greengrass 核心更新到新的次要版本,因为 AWS提供的几个组件依赖于 Greengrass 核心的特定次要版本。有关更多信息,请参阅 Greengrass Nucleus 更新行为。
您必须修改部署以指定要使用的 Greengrass Nucleus 版本。请执行以下操作之一:
-
修改部署以指定核心设备当前运行的 Greengrass Nucleus 版本。
-
修改部署以指定 Greengrass Nucleus 的更高次要版本。如果选择此选项,则还必须更新所有 AWS依赖于 Greengrass 核心的特定次要版本的组件的版本。有关更多信息,请参阅 AWS提供的组件。
错误:com.aws.greengrass.deployment.exceptDeploymentException: 无法处理部署。Greengrass 启动目录未设置或 Greengrass 未设置为系统服务
当您将 Greengrass 设备从一个事物组移动到另一个事物组,然后再移回包含需要重启 Greengrass 的部署的原组时,可能会出现此错误。
要解决该问题,请为设备重新创建启动目录。强烈建议您升级至 Greengrass Nucleus 的 2.9.6 或更高版本。
以下是用于重新创建启动目录的 Linux 脚本。将脚本保存在名为 fix_directory.sh 的文件中。
#!/bin/bash set -e GG_ROOT=$1 GG_VERSION=$2 CURRENT="$GG_ROOT/alts/current" if [ ! -L "$CURRENT" ]; then mkdir -p $GG_ROOT/alts/directory_fix echo "Relinking $GG_ROOT/alts/directory_fix to $CURRENT" ln -sf $GG_ROOT/alts/directory_fix $CURRENT fi TARGET=$(readlink $CURRENT) if [[ ! -d "$TARGET" ]]; then echo "Creating directory: $TARGET" mkdir -p "$TARGET" fi DISTRO_LINK="$TARGET/distro" DISTRO="$GG_ROOT/packages/artifacts-unarchived/aws.greengrass.Nucleus/$GG_VERSION/aws.greengrass.nucleus/" echo "Relinking Nucleus artifacts to $DISTRO_LINK" ln -sf $DISTRO $DISTRO_LINK
要运行脚本,请执行以下命令:
[root@ip-172-31-27-165 ~]#./fix_directory.sh /greengrass/v22.9.5Relinking /greengrass/v2/alts/directory_fix to /greengrass/v2/alts/current Relinking Nucleus artifacts to /greengrass/v2/alts/directory_fix/distro
信息:com.aws.greengrass.deployment.exceptRetryableDeploymentDocumentDownloadException: Greengrass 云服务在获取完整部署配置时返回错误
当核心设备收到大于 7 KB(适用于以事物为目标的部署)或 31 KB(适用于以事物组为目标的部署)的大型部署文档时,可能会出现此错误。要检索大型部署文档,核心设备的 AWS IoT 策略必须允许该greengrass:GetDeploymentConfiguration权限。核心设备没有此权限时可能会发生此错误。发生此错误时,部署将无限期重试,且状态为进行中 (IN_PROGRESS)。
要解决此问题,请将greengrass:GetDeploymentConfiguration权限添加到核心设备的 AWS IoT 策略中。有关更多信息,请参阅 更新核心设备的 AWS IoT 政策。
警告:com.aws.greengrass.deployDeploymentService: 无法获取事物组层次结构
当核心设备收到部署且核心设备的 AWS IoT 政策不允许该greengrass:ListThingGroupsForCoreDevice权限时,您可能会看到此警告。创建部署时,核心设备使用此权限来识别其事物组,并移除核心设备所在事物组的组件。如果核心设备运行 Greengrass Nucleus v2.5.0,则部署失败。如果核心设备运行 Greengrass Nucleus v2.5.1 或更高版本,则部署会继续进行,但不会移除组件。有关事物组移除行为的更多信息,请参阅将 AWS IoT Greengrass 组件部署到设备。
要更新核心设备的行为以移除您从中移除核心设备的事物组中的组件,请将greengrass:ListThingGroupsForCoreDevice权限添加到核心设备的 AWS IoT 策略中。有关更多信息,请参阅 更新核心设备的 AWS IoT 政策。
部署意外地从核心设备中移除了组件
部署会从核心设备中移除您未打算移除的组件,设备会停止运行这些组件。
在 Greengrass nucleus v2.18.2 及更早版本中,特定事件序列会导致设备丢失其对每个事物组部署了哪些组件的记录。在这次丢失之后,部署会将这些组件视为孤立组件并将其删除。Greengrass nucleus v2.18.3 修复了这个问题。
该序列从首次部署到设备失败并回滚时开始。有关完整序列,请参见设备如何丢失此记录。
如何检查设备是否丢失了此记录
这些步骤检查设备的配置,以确定移除的原因。他们无法确定部署删除了哪些组件。在核心设备上检查。/config/effectiveConfig.yaml/greengrass/v2
-
要检查设备的内部状态是否损坏,请检查中
main服务下的dependencies列表services。内部状态损坏是导致记录丢失的情况。在已成功完成至少一次部署的设备上,此列表包括DeploymentServiceFleetStatusService、TelemetryAgent、和UpdateSystemPolicyService。如果先前成功完成部署的设备上没有这些名称,则内部状态会损坏。在从未成功完成部署的设备上,仅包含核的列表是正常的,并不表示存在问题。 -
要检查设备是否已经丢失记录,请在DeploymentService下方找到
services并查找GroupToRootComponents配置。在已接受至少一次部署的运行状况良好的设备上,此配置列出了每个事物组以及该组部署的组件。如果在设备上安装和运行组件时此配置缺失或为空,则设备将丢失记录。
设备丢失此记录后,部署是否会移除组件
设备丢失此记录后,它是否丢失组件取决于接下来运行哪个部署。
部署在记录丢失且不携带缺失组的组件列表时会移除组件:
-
本地部署正在运行。本地部署仅进行自己的更改,并依赖设备的本地记录来保存其他所有内容。有些队列运行的组件会在设备每次启动时提交本地部署。这就是为什么删除通常在重启后立即出现的原因。
-
在属于多个事物组的设备上,部署仅以其中一些组为目标。该部署可以恢复其目标群组。它会移除其未针对的群组的组件。
在以下情况下,部署不会移除组件:
-
设备上不运行任何部署。已安装的组件继续正常运行。设备可能会无限期地保持这种状态,不会产生任何影响。
-
下一次部署的目标是设备缺失组件记录的事物组。该部署会携带该组的完整组件列表并恢复记录,这会自动恢复设备。
重要
在恢复设备之前,请避免在其上运行本地部署。如果设备上的某个组件在设备启动时提交了本地部署,请在设备再次重启之前将其恢复。该部署删除了组件。
恢复
重启设备不会恢复丢失的记录。必须创建部署才能恢复设备。
要恢复丢失此记录的设备,请创建以该核心设备所属的每个事物组为目标的部署。以事物组为目标的部署包含该组的完整组件列表。这将重建丢失的本地记录。本地部署无法恢复设备,因为它不携带其他组的组件信息。
重要
在属于多个事物组的设备上,每次部署只能恢复目标组。部署到一个组可能会删除属于您尚未重新部署到的组的组件。为设备所属的每个事物组创建部署。
创建恢复部署后,验证每个部署是否成功完成。如果恢复部署失败并回滚到早于 2.18.3 的 nucleus 版本,则设备将再次丢失记录。你必须重复恢复。
恢复部署成功完成后,设备不会再次丢失此记录。即使该设备仍在运行 Greengrass nucleus v2.18.2 或更早版本,也是如此。部署会恢复保护记录的内部状态,因此以后的部署失败和回滚不会造成这种损失。如果您重新安装 AWS IoT Greengrass Core 软件,设备可能会再次丢失此记录。
预防措施
将核心设备升级到 Greengrass nucleus v2.18.3 或更高版本以防止出现此问题。
注意
监控可能丢失此记录的设备上的核心升级部署。如果核心升级部署失败并在未修复的设备上回滚,则该设备可能会立即丢失此记录。如果发生这种情况,请在升级失败后立即创建针对设备每个事物组的部署,以防止组件丢失。
设备如何丢失此记录
当满足以下所有条件时,设备会丢失此记录:
-
该设备尚未成功部署。
-
激活后首次部署到设备失败并回滚。
-
后续部署会在设备上运行,这会损坏内部状态。
-
设备稍后会重新启动。
首次部署成功完成的设备不会丢失此记录。
信息:com.aws.greengrass.deplaymentDeploymentDocumentDownloader: 调用 Greengrass cloud 以获取完整的部署配置
您可能会看到此信息消息多次打印而不会出现错误,因为核心设备会在 DEBUG 日志层面记录错误。当核心设备收到大型部署文档时,可能会出现此问题。发生此问题时,部署将无限期重试,且状态为进行中 (IN_PROGRESS)。有关如何解决此问题的信息,请参阅此故障排除条目。
造成者:software.amazon.awsdk.services.greengrassv2data.modelGreengrassV2DataException: null(服务:greengrassv2Data,状态码:403,请求 ID:s < ome_request_ > id,扩展请求 ID:null)
数据面板 API 没有 iot:Connect 权限时可能会出现此错误。如果没有正确的策略,您将收到 GreengrassV2DataException: 403。要创建权限策略,请按照以下说明进行操作:创建 AWS IoT 策略。
核心设备组件问题
排查核心设备上的 Greengrasss 组件问题。
主题
com.aws.greengrass.authorization.excepAuthorizationException: 主体 “<组件>列表>” 的策略 < ID 重复的 “ID”
com.aws.greengrass.tes。CredentialRequestHandler: AwsCredentials 从 TES 检索时出错 (HTTP 400)
com.aws.greengrass.tes。CredentialRequestHandler: AwsCredentials 从 TES 检索时出错 (HTTP 403)
com.aws.greengrass.tes。CredentialsProviderError: 无法加载来自任何提供商的证书
尝试检索 ECS 元数据时收到错误:无法连接到端点 URL:“<令牌 ExchangeServiceEndpoint>”
警告:“<命令>” 未被识别为内部或外部命令
当 AWS IoT Greengrass Core 软件无法在组件的生命周期脚本中运行命令时,你可能会在 Greengrass 组件的日志中看到这个错误。由于此错误,组件的状态变为 BROKEN。如果运行该组件的系统用户(如 ggc_user)无法在 PATH
在 Windows 设备上,检查包含可执行文件的文件夹是否位于运行该组件的系统用户所在的 PATH 中。如果在 PATH 中没有找到,请执行以下操作之一:
-
将可执行文件所在文件夹添加至
PATH系统变量,供所有用户使用。然后,重新启动该组件。如果你运行 Greengrass nucleus 2.5.0,则在更新
PATH系统变量后,必须重新启动 AWS IoT Greengrass 核心软件才能运行更新后的组件。PATH如果重启软件后 AWS IoT Greengrass Core 软件未使用更新PATH后的软件,请重新启动设备并重试。有关更多信息,请参阅 运行 AWS IoT Greengrass 核心软件。 -
将可执行文件所在文件夹添加至运行该组件的系统用户的
PATH用户变量中。
Python 脚本不记录消息
Greengrass 核心设备收集可用于识别组件问题的日志。如果您的 Python 脚本的 stdout 和 stderr 消息未出现在组件日志中,则可能需要在 Python 中为这些标准输出流刷新缓冲区或禁用缓冲。执行以下任一操作:
-
使用 -u
参数运行 Python 以禁用 stdout和stderr上的缓冲。 -
在组件配方中使用 Setenv 将 PYTHONUNBUFFERED
环境变量设置为非空字符串。此环境变量禁用 stdout和stderr上的缓冲。 -
刷新
stdout或stderr流的缓冲区。请执行以下操作之一:-
打印时刷新消息。
import sys print('Hello, error!', file=sys.stderr, flush=True) -
打印后刷新消息。在刷新流之前,您可以发送多条消息。
import sys print('Hello, error!', file=sys.stderr) sys.stderr.flush()
-
有关如何验证 Python 脚本是否输出日志消息的更多信息,请参阅 监控 AWS IoT Greengrass 日志。
更改默认配置时不更新组件配置
当您更改组件配方中的 DefaultConfiguration 时,新的默认配置不会在部署期间取代该组件的现有配置。要应用新的默认配置,必须将组件的配置重置为其默认设置。部署组件时,请指定一个空字符串作为重置更新。
awsiot.greengrasscoreipc.model。UnauthorizedError
当 Greengrass 组件无权对资源执行 IPC 操作时,您可能会在组件日志中看到此错误。要授予组件调用 IPC 操作的权限,请在组件配置中定义 IPC 授权策略。有关更多信息,请参阅 授权组件执行 IPC 操作。
提示
如果您要更改组件配方中的 DefaultConfiguration,则必须将该组件的配置重置为其新的默认配置。部署组件时,请指定一个空字符串作为重置更新。有关更多信息,请参阅 更改默认配置时不更新组件配置。
com.aws.greengrass.authorization.excepAuthorizationException: 主体 “<组件>列表>” 的策略 < ID 重复的 “ID”
如果多个 IPC 授权策略(包括核心设备上的所有组件)使用相同的策略 ID,则可能会出现此错误。
检查组件的 IPC 授权策略,修复所有重复项,然后再次尝试。要创建唯一的策略 ID,我们建议您组合组件名称、IPC 服务名称和计数器。有关更多信息,请参阅 授权组件执行 IPC 操作。
提示
如果您要更改组件配方中的 DefaultConfiguration,则必须将该组件的配置重置为其新的默认配置。部署组件时,请指定一个空字符串作为重置更新。有关更多信息,请参阅 更改默认配置时不更新组件配置。
com.aws.greengrass.tes。CredentialRequestHandler: AwsCredentials 从 TES 检索时出错 (HTTP 400)
当核心设备无法从令牌交换服务获取 AWS 证书时,您可能会看到此错误。HTTP 400 状态代码表明发生此错误是因为核心设备的代币交换 IAM 角色不存在或不存在允许 AWS IoT 凭证提供商假设的信任关系。
执行以下操作:
-
确定核心设备使用的令牌交换角色。错误消息包括核心设备的 AWS IoT 角色别名,该别名指向代币交换角色。在开发计算机上运行以下命令,并
MyGreengrassCoreTokenExchangeRoleAlias用错误消息中的 AWS IoT 角色别名名称替换。aws iot describe-role-alias --role-aliasMyGreengrassCoreTokenExchangeRoleAlias响应中包括令牌交换 IAM 角色的 Amazon 资源名称(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" } } -
检查该角色是否存在。运行以下命令,并
MyGreengrassV2TokenExchangeRole替换为代币交换角色的名称。aws iam get-role --role-nameMyGreengrassV2TokenExchangeRole如果命令返回
NoSuchEntity错误,则该角色不存在,您必须进行创建。有关如何创建和配置该角色的更多信息,请参阅 授权核心设备与 AWS 服务交互。 -
检查该角色是否存在允许 AWS IoT 凭证提供者代入的信任关系。上一步的响应包含一个
AssumeRolePolicyDocument,它定义了角色的信任关系。该角色必须定义一种信任关系,使credentials.iot.amazonaws.com能够承担该角色。此文档应该类似于以下示例。如果角色的信任关系不允许
credentials.iot.amazonaws.com承担该角色,则必须将此信任关系添加至角色。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的修改角色。
com.aws.greengrass.tes。CredentialRequestHandler: AwsCredentials 从 TES 检索时出错 (HTTP 403)
当核心设备无法从令牌交换服务获取 AWS 证书时,您可能会看到此错误。HTTP 403 状态码表明发生此错误是因为核心设备的 AWS IoT 策略未授予核心设备的 AWS IoT 角色别名的iot:AssumeRoleWithCertificate权限。
查看核心设备的 AWS IoT 政策,并为核心设备的 AWS IoT 角色别名添加iot:AssumeRoleWithCertificate权限。错误消息包括核心设备的当前 AWS IoT 角色别名。有关此权限以及如何更新核心设备 AWS IoT 政策的更多信息,请参阅AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策和更新核心设备的 AWS IoT 政策。
com.aws.greengrass.tes。CredentialsProviderError: 无法加载来自任何提供商的证书
当组件尝试请求 AWS 凭据但无法连接到令牌交换服务时,你可能会看到此错误。
执行以下操作:
-
检查该组件是否声明了令牌交换服务组件
aws.greengrass.TokenExchangeService的依赖关系。如果没有,请添加依赖关系并重新部署组件。 -
如果该组件在 Docker 中运行,请确保根据 使用 AWS Docker 容器组件中的凭证 (Linux) 应用正确的网络设置和环境变量。
-
如果组件是用 NodeJS 编写的,请将 dns.set 设置为。DefaultResultOrder
ipv4first -
检查
/etc/hosts是否有以::1开头并包含localhost的条目。移除该条目以查看它是否导致组件通过错误地址连接到令牌交换服务。
尝试检索 ECS 元数据时收到错误:无法连接到端点 URL:“<令牌 ExchangeServiceEndpoint>”
当组件未运行令牌交换服务且组件尝试请求 AWS 凭证时,您可能会看到此错误。
执行以下操作:
-
检查该组件是否声明了令牌交换服务组件
aws.greengrass.TokenExchangeService的依赖关系。如果没有,请添加依赖关系并重新部署组件。 -
检查组件在其
install生命周期中是否使用 AWS 证书。 AWS IoT Greengrass 不能保证代币交换服务在install生命周期内的可用性。更新组件以将使用 AWS 凭证的代码移至startup或run生命周期,然后重新部署该组件。
copyFrom: < ConfigurationPath 已经>是容器了,不是树叶
当您将配置值从容器类型(列表或对象)更改为非容器类型(字符串、数字或布尔值)时,可能会出现此错误。执行以下操作:
然后,您可以将该配置值设置为字符串、数字或布尔值。
com.aws.greengrass.componentmanager.plugins.docker.exceptionDockerLoginException: 使用凭据登录注册表时出错-“存根收到了错误的数据。”
当 Docker 应用程序管理器组件尝试从 Amazon Elastic Container Registry(Amazon ECR)的私有存储库下载 Docker 映像时,您可能会在 Greengrass Nucleus 日志中看到这个错误。如果您使用 wincred Docker 凭证助手docker-credential-wincred),则会发生此错误。因此,Amazon ECR 无法存储登录凭证。
执行下列操作之一:
-
如果您不使用
wincredDocker 凭证助手,请从核心设备中移除docker-credential-wincred程序。 -
如果您使用
wincredDocker 凭证助手,请执行以下操作:-
在核心设备上重命名
docker-credential-wincred程序。将wincred替换为 Windows Docker 凭证助手的新名称。例如,您可以将其重命名为docker-credential-wincredreal。 -
更新 Docker 配置文件 (
.docker/config.json) 中的credsStore选项,以使用 Windows Docker 凭证助手的新名称。例如,如果您将程序重命名为docker-credential-wincredreal,则将credsStore选项更新为wincredreal。{ "credsStore": "wincredreal" }
-
java.io.ioException:无法运行程序 “cmd”...: [LogonUser] 此账户的密码已过期。
当运行组件进程(例如 ggc_user)的系统用户密码已过期时,您可能会在 Windows 核心设备上看到此错误。因此, AWS IoT Greengrass Core 软件无法以该系统用户的身份运行组件进程。
更新 Greengrass 系统用户的密码
-
以管理员身份运行以下命令来设置用户的密码。
ggc_user替换为系统用户,password替换为要设置的密码。net userggc_userpassword -
使用该PsExec 实用程序
将用户的新密码存储在该 LocalSystem 账户的凭据管理器实例中。 password用您设置的用户密码替换。psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
提示
根据您的 Windows 配置,用户密码可能会设置为在将来某个日期过期。为确保您的 Greengrass 应用程序继续运行,请跟踪密码过期时间,并在密码过期之前对其进行更新。您还可以将用户的密码设置为永不过期。
-
要检查用户及其密码的过期时间,请运行以下命令。
net userggc_user| findstr /C:expires -
要将用户密码设置为永不过期,请运行以下命令。
wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False -
如果你使用的是不推荐使用该
wmic命令的 Windows 10 或更高版本,请运行以下 PowerShell 命令。 Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
啊啊.greengrass。StreamManager: 即时超过最小或最大即时值
当您将流管理器 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}
如果您部署了流管理器 v2.0.7,并且想要升级到更高版本,则必须直接升级至流管理器 v2.0.12。有关流管理器组件的更多信息,请参阅流管理器。
核心设备 Lambda 函数组件问题
排查核心设备上的 Lambda 函数组件问题。
主题
以下 cgroup 子系统未装载:设备、内存
当您在以下情况下运行容器化 Lambda 函数时,可能会出现此错误:
-
核心设备没有为内存或设备 cgroups 启用 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 错误 400:请求错误,b'不存在订阅源标签 or-lambda-arn 和主题标签 or-lambda-arn 和主题标签 or-lambda-arn < > < >
当您在 V2 AWS IoT Greengrass 核心设备上运行使用 Core SDK 的 V1 Lambda 函数,但未在传统订阅路由器组件中指定订阅时,您可能会看到此错误。要解决此问题,请部署和配置旧版订阅路由器以指定所需订阅。有关更多信息,请参阅 导入 V1 Lambda 函数。
组件版本已停用
如果核心设备上的某个组件版本停用,您可能会在 Personal Health Dashboard(PHD)上看到通知。组件版本将在停用后的 60 分钟内将此通知发送给您的 PHD。
要查看需要修改哪些部署,请使用 AWS Command Line Interface执行以下操作:
-
运行以下命令以获取核心设备列表。
aws greengrassv2 list-core-devices -
运行以下命令,以检索步骤 1 中每台核心设备上组件的状态。将
替换为要查询的每台核心设备的名称。coreDeviceNameaws greengrassv2 list-installed-components --core-device-thing-namecoreDeviceName -
收集之前步骤中已安装停用组件版本的核心设备。
-
运行以下命令,以检索步骤 3 中每台核心设备的所有部署作业状态。将
替换为要查询的核心设备的名称。coreDeviceNameaws greengrassv2 list-effective-deployments --core-device-thing-namecoreDeviceName响应包含核心设备的部署作业列表。您可以修改部署以选择其他组件版本。有关如何修改部署的更多信息,请参阅修改部署。
Greengrass 命令行界面问题
排查 Greengrass CLI 的问题。
java.lang。RuntimeException: 无法创建 ipc 客户端
当你运行 Greengrass CLI 命令并且指定的根文件夹与安装 AWS IoT Greengrass 核心软件的根文件夹不同的根文件夹时,你可能会看到这个错误。
执行以下任一操作来设置根路径,并将其替换为 AWS IoT Greengrass Core 软件安装路径:/greengrass/v2
-
将
GGC_ROOT_PATH环境变量设置为。/greengrass/v2 -
将
--ggcRootPath参数添加到您的命令中,如以下示例所示。/greengrass/v2greengrass-cli --ggcRootPath<command> <subcommand> [arguments]/greengrass/v2
AWS Command Line Interface 问题
对 AWS CLI 的问题进行故障排除 AWS IoT Greengrass V2。
错误:无效的选择:“greengrassv2”
当您使用运行 AWS IoT Greengrass V2 命令时 AWS CLI (例如,aws greengrassv2 list-core-devices),您可能会看到此错误。
此错误表示您的版本 AWS CLI 不支持 AWS IoT Greengrass V2。要 AWS IoT Greengrass V2 与一起使用 AWS CLI,必须具有以下版本之一或更高版本:
-
AWS CLI V1 最低版本:v1.18.197
-
最低 AWS CLI V2 版本:v2.1.11
提示
您可以运行以下命令来检查您拥有 AWS CLI 的版本。
aws --version
要解决此问题,请将更新 AWS CLI 到支持的更高版本 AWS IoT Greengrass V2。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI。