本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查客户端设备问题
使用本节中的故障排除信息和解决方案可帮助排查 Greengrass 客户端设备和客户端设备组件的问题。
Greengrass Discovery 问题
请使用以下信息帮助排查 Greengrass Discovery 的问题。当客户端设备使用 Greengrass Discovery API 来识别其可连接的 Greengrass 核心设备时,可能会出现这些问题。
主题
Greengrass Discovery 问题(HTTP API)
请使用以下信息帮助排查 Greengrass Discovery 的问题。如果您使用 cURL 测试 Discovery API,则可能出现这类错误。
主题
curl: (52) Empty reply from server
如果您在请求中指定了非活动状态 AWS IoT 证书,则可能会出现此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《AWS 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 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass Discovery 问题(适用于 Python 的 AWS IoT Device SDK v2)
请使用以下信息帮助排查适用于 Python 的 AWS IoT Device SDK v2
主题
- 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.
如果您在请求中指定了非活动状态 AWS IoT 证书,则可能会出现此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《AWS 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 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass Discovery 问题(适用于 C++ 的 AWS IoT Device SDK v2)
请使用以下信息帮助排查适用于 C++ 的 AWS IoT Device SDK v2
主题
aws-c-http: AWS_ERROR_HTTP_CONNECTION_CLOSED, The connection has closed or is closing.
如果您在请求中指定了非活动状态 AWS IoT 证书,则可能会出现此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《AWS 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 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Greengrass Discovery 问题(适用于 JavaScript 的 AWS IoT Device SDK v2)
请使用以下信息帮助排查适用于 JavaScript 的 AWS IoT Device SDK v2
主题
Error: aws-c-http: AWS_ERROR_HTTP_CONNECTION_CLOSED, The connection has closed or is closing.
如果您在请求中指定了非活动状态 AWS IoT 证书,则可能会出现此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《AWS 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 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
Error: Discovery failed (headers: [object Object])
运行 Greengrass Discovery 示例时可能会出现此错误(没有 HTTP 响应代码)。此错误可能由多种原因引起。
-
如果客户端设备无权自行调用
greengrass:Discover
,则可能会出现此错误。检查客户端设备证书是否有允许
greengrass:Discover
的政策。您不能使用Resource
部分中的事物策略变量 (iot:Connection.Thing.
) 来获得此权限。有关更多信息,请参阅 发现身份验证和授权。*
-
您可能会在以下情况下遇到此错误:
-
客户端设备未与任何 Greengrass 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
-
Greengrass Discovery 问题(适用于 Java 的 AWS IoT Device SDK v2)
请使用以下信息帮助排查适用于 Java 的 AWS IoT Device SDK v2
主题
- 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.)
如果您在请求中指定了非活动状态 AWS IoT 证书,则可能会出现此错误。
检查客户端设备是否附有证书,以及证书是否处于活动状态。有关更多信息,请参阅《AWS 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 核心设备或 AWS IoT Greengrass V1 组关联。
-
客户端设备关联的 Greengrass 核心设备或 AWS IoT Greengrass V1 组都没有 MQTT 代理端点。
-
客户端设备关联的 Greengrass 核心设备均不运行客户端设备身份验证组件。
检查客户端设备是否与您要连接的核心设备相关联。然后,检查核心设备是否运行客户端设备身份验证组件,且至少有一个 MQTT 代理端点。有关更多信息,请参阅下列内容:
MQTT 连接问题
请使用以下信息帮助排查客户端 MQTT 连接问题。当客户端设备尝试通过 MQTT 连接到核心设备时,可能会出现此类问题。
主题
io.moquette.broker.Authorizator: Client does not have read permissions on the topic
当客户端设备尝试订阅它没有权限的 MQTT 主题时,您可能会在 Greengrass 日志中看到此错误。错误消息中包含该主题。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
用于授予该主题
mqtt:subscribe
权限的设备组客户端设备授权策略。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容;
MQTT 连接问题(Python)
请使用以下信息帮助排查您使用适用于 Python 的 AWS 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++ 的 AWS 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 的 AWS 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)
请使用以下信息帮助排查您使用适用于 JavaScript 的 AWS IoT Device SDK v2
主题
AWS_ERROR_MQTT_PROTOCOL_ERROR: Protocol error occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会出现此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
用于授予该客户端设备
mqtt:connect
权限的设备组客户端设备授权策略。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容;
AWS_ERROR_MQTT_UNEXPECTED_HANGUP: Unexpected hangup occurred
如果客户端设备身份验证组件未定义授予客户端设备连接权限的客户端设备授权策略,则可能会出现此错误。
检查客户端设备身份验证组件的配置是否包括以下内容:
-
与客户端设备匹配的设备组。
-
用于授予该客户端设备
mqtt:connect
权限的设备组客户端设备授权策略。
有关如何部署和配置客户端设备身份验证组件的更多信息,请参阅以下内容;