本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对客户端设备进行故障排除
使用本节中的故障排除信息和解决方案来帮助解决 Greengrass 客户端设备和客户端设备组件的问题。
Greengrass 发现问题
使用以下信息对 Greengrass 发现问题进行故障排除。当客户端设备使用 Greengrass 发现 API 来识别它们可以连接的 Greengrass 核心设备时,可能会出现这些问题。
主题
Greengrass 发现问题 (HTTP API)
使用以下信息对 Greengrass 发现问题进行故障排除。如果您使用 curl 测试发现 API,则可能会看到这些错误。
主题
curl: (52) Empty reply from server
如果您在请求中指定了非活动Amazon IoT证书,则可能会看到此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《Amazon IoT Core开发人员指南》中的将事物或策略附加到客户端证书和激活或停用客户端证书。
HTTP 403: {"message":null,"traceId":"a1b2c3d4-5678-90ab-cdef-11111EXAMPLE"}
如果客户端设备无权自行调用greengrass:Discover
,则可能会看到此错误。
检查客户端设备的证书是否有允许的政策greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
HTTP 404: {"errorMessage":"The thing provided for discovery was not found"}
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass 发现问题(适用于 Python 的 v2)Amazon IoT Device SDK
使用以下信息来解决适用于 Python 的 v2 中的 Greengrass 发现问题。Amazon IoT Device SDK
主题
- awscrt.exceptions.AwsCrtError: AWS_ERROR_HTTP_CONNECTION_CLOSED: The connection has closed or is closing.
- awsiot.greengrass_discovery.DiscoveryException: ('Error during discover call: response_code=403', 403)
- awsiot.greengrass_discovery.DiscoveryException: ('Error during discover call: response_code=404', 404)
awscrt.exceptions.AwsCrtError: AWS_ERROR_HTTP_CONNECTION_CLOSED: The connection has closed or is closing.
如果您在请求中指定了非活动Amazon IoT证书,则可能会看到此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《Amazon IoT Core开发人员指南》中的将事物或策略附加到客户端证书和激活或停用客户端证书。
awsiot.greengrass_discovery.DiscoveryException: ('Error during discover call: response_code=403', 403)
如果客户端设备无权自行调用greengrass:Discover
,则可能会看到此错误。
检查客户端设备的证书是否有允许的政策greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
awsiot.greengrass_discovery.DiscoveryException: ('Error during discover call: response_code=404', 404)
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass 发现问题(C++ 版 v2)Amazon IoT Device SDK
使用以下信息来解决适用于 C++ 的 v2 中的 Greengrass 发现问题。Amazon IoT Device SDK
主题
aws-c-http: AWS_ERROR_HTTP_CONNECTION_CLOSED, The connection has closed or is closing.
如果您在请求中指定了非活动Amazon IoT证书,则可能会看到此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《Amazon IoT Core开发人员指南》中的将事物或策略附加到客户端证书和激活或停用客户端证书。
aws-c-common: AWS_ERROR_UNKNOWN, Unknown error. (HTTP 403)
如果客户端设备无权自行调用greengrass:Discover
,则可能会看到此错误。
检查客户端设备的证书是否有允许的政策greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
aws-c-common: AWS_ERROR_UNKNOWN, Unknown error. (HTTP 404)
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass 发现问题 (v2 适用于) Amazon IoT Device SDK JavaScript
使用以下信息对 v2 中的 Greengrass 发现问题进行故障排除。Amazon IoT Device SDK JavaScript
主题
Error: aws-c-http: AWS_ERROR_HTTP_CONNECTION_CLOSED, The connection has closed or is closing.
如果您在请求中指定了非活动Amazon IoT证书,则可能会看到此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《Amazon IoT Core开发人员指南》中的将事物或策略附加到客户端证书和激活或停用客户端证书。
Error: Discovery failed (headers: [object Object]) { response_code: 403 }
如果客户端设备无权自行调用greengrass:Discover
,则可能会看到此错误。
检查客户端设备的证书是否有允许的政策greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
Error: Discovery failed (headers: [object Object]) { response_code: 404 }
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Error: Discovery failed (headers: [object Object])
运行 Greengrass 发现示例时,您可能会看到此错误(没有 HTTP 响应代码)。出现此错误的原因可能有多种。
-
如果客户端设备无权自行调用
greengrass:Discover
,则可能会看到此错误。检查客户端设备的证书是否有允许的政策
greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
-
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
-
Greengrass 发现问题(适用于 Java 的 v2)Amazon IoT Device SDK
使用以下信息来解决适用于 Java 的 v2 中的 Greengrass 发现问题。Amazon IoT Device SDK
主题
- software.amazon.awssdk.crt.CrtRuntimeException: Error Getting Response Status Code from HttpStream. (aws_last_error: AWS_ERROR_HTTP_DATA_NOT_AVAILABLE(2062), This data is not yet available.)
- java.lang.RuntimeException: Error x-amzn-ErrorType(403)
- java.lang.RuntimeException: Error x-amzn-ErrorType(404)
software.amazon.awssdk.crt.CrtRuntimeException: Error Getting Response Status Code from HttpStream. (aws_last_error: AWS_ERROR_HTTP_DATA_NOT_AVAILABLE(2062), This data is not yet available.)
如果您在请求中指定了非活动Amazon IoT证书,则可能会看到此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《Amazon IoT Core开发人员指南》中的将事物或策略附加到客户端证书和激活或停用客户端证书。
java.lang.RuntimeException: Error x-amzn-ErrorType(403)
如果客户端设备无权自行调用greengrass:Discover
,则可能会看到此错误。
检查客户端设备的证书是否有允许的政策greengrass:Discover
。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
java.lang.RuntimeException: Error x-amzn-ErrorType(404)
在以下情况下,您可能会看到此错误:
-
客户端设备未与任何 Greengrass 核心设备或群组关联。Amazon IoT Greengrass V1
-
客户端设备关联的 Greengrass 核心设备Amazon IoT Greengrass V1或组都没有 MQTT 代理端点。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,并且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
MQTT 连接问题
使用以下信息对客户端设备的 MQTT 连接问题进行故障排除。当客户端设备尝试通过 MQTT 连接到核心设备时,可能会出现这些问题。
主题
io.moquette.broker.Authorizator: Client does not have read permissions on the topic
当客户端设备尝试订阅它没有权限的 MQTT 主题时,您可能会在 Greengrass 日志中看到此错误。错误消息包含主题。
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予该主题的
mqtt:subscribe
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
MQTT 连接问题 (Python)
使用适用于 Pyt hon 的 Amazon IoT Device SDK v2
主题
AWS_ERROR_MQTT_PROTOCOL_ERROR: Protocol error occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
AWS_ERROR_MQTT_UNEXPECTED_HANGUP: Unexpected hangup occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
MQTT 连接问题 (C++)
使用适用于 C++ 的 Amazon IoT Device SDK v2
主题
AWS_ERROR_MQTT_PROTOCOL_ERROR: Protocol error occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
AWS_ERROR_MQTT_UNEXPECTED_HANGUP: Unexpected hangup occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
MQTT 连接问题 (Java)
使用适用于 Java 的 Amazon IoT Device SDK v2
主题
software.amazon.awssdk.crt.mqtt.MqttException: Protocol error occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
AWS_ERROR_MQTT_UNEXPECTED_HANGUP: Unexpected hangup occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
MQTT 连接问题 () JavaScript
使用 Amazon IoT Device SDKv2
主题
AWS_ERROR_MQTT_PROTOCOL_ERROR: Protocol error occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容:
AWS_ERROR_MQTT_UNEXPECTED_HANGUP: Unexpected hangup occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会看到此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
该设备组的客户端设备授权策略,用于授予对客户端设备的
mqtt:connect
权限。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容: