

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

# AWS IoT 设备顾问故障排除指南
<a name="device-advisor-troubleshooting"></a>

**帮助我们改进此主题**  
 [告诉我们如何优化内容](https://docs.aws.amazon.com//forms/aws-doc-feedback?hidden_service_name=IoT%20Docs&topic_url=http://docs.aws.amazon.com/en_us/iot/latest/developerguide/device-advisor-troubleshooting.html) General

问：我是否可以并行运行多个测试套件？  
答：能。Device Advisor 现在支持使用设备级端点在不同的设备上运行多个测试套件。如果使用账户级端点，则可以一次运行一个套件，因为每个账户有一个 Device Advisor 端点。有关更多信息，请参阅[配置您的设备](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-configure-device)。

问：我从设备看到 TLS 连接被 Device Advisor 拒绝。这样是对的吗？  
答：能。Device Advisor 在每次测试运行之前和之后都会拒绝 TLS 连接。我们建议用户实施设备重试机制，以便使用 Device Advisor 获得全自动的测试体验。如果您执行具有多个测试使用案例的测试套件（例如 TLS 连接、MQTT 连接和 MQTT 发布），我们建议您为设备构建一个机制。该机制可以每 5 秒便尝试一次连接到测试端点，每次持续一到两分钟。通过这种方式，您能够以自动的方式按顺序运行多个测试使用案例。

问：我能否获得 Device Advisor 在我的账户上发起的所有 API 调用的历史记录，以便用于安全分析和运营方面的故障排除？   
答：可以。要接收使用您的账户进行的 Device Advisor API 调用的历史记录，您只需 CloudTrail 在 AWS IoT 管理控制台中打开并筛选事件源即可`iotdeviceadvisor.amazonaws.com`。

问：如何查看设备顾问登录信息 CloudWatch？  
答： CloudWatch 如果您向服务角色添加所需的策略（例如 **CloudWatchFullAccess**），则在测试套件运行期间生成的日志将上传到（请参阅[设置](device-advisor-setting-up.md)）。如果测试套件中至少有一个测试用例，则会创建一个包含两个日志流的日志组 testSuiteId “aws/iot/deviceadvisor/\$1”。一个流是 “\$1testRunId”，它包含在测试套件中执行测试用例之前和之后所采取的操作的日志，例如设置和清理步骤。另一个日志流是 “\$1 suiteRunId \$1\$1”testRunId，它特定于测试套件的运行。从设备发送的事件 AWS IoT Core 将记录到此日志流中。

问：设备权限角色的目的是什么？  
答：设备顾问介于您的测试设备和 AWS IoT Core 模拟测试场景之间。它接受来自测试设备的连接和消息，并通过承担您的设备权限角色并代表您启动连接来将它们转发到 AWS IoT Core 。请务必确保设备角色权限与您用于运行测试的证书上的权限相同。 AWS IoT 当 Device Advisor 使用设备权限角色 AWS IoT Core 代表您启动与的连接时，不会强制执行证书策略。但是，您设置的设备权限角色中的权限将强制执行。

问：Device Advisor 在哪些区域受支持？  
答：us-east-1、us-west-2、ap-northeast-1 和 eu-west-1 区域支持 Device Advisor。

问：为什么我看到不一致的结果？  
答：结果不一致的主要原因之一是为测试的 `EXECUTION_TIMEOUT` 设置了过低的值。有关推荐和默认 `EXECUTION_TIMEOUT` 值的更多信息，请参阅 [Device Advisor 测试案例](https://docs.aws.amazon.com//iot/latest/developerguide/device-advisor-tests.html)。

问：Device Advisor 支持什么 MQTT 协议？  
答：Device Advisor 支持使用 X509 客户端证书的 MQTT 3.1.1 版。

问：即使我尝试将设备连接到测试端点，如果我的测试使用案例失败并显示执行超时消息，该怎么办？  
答：验证[创建要用作设备角色的 IAM 角色](https://docs.aws.amazon.com//iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role)下的所有步骤。如果测试仍然失败，则可能是设备没有发送正确的服务器名称指示（SNI）扩展，这是 Device Advisor 工作所必需的。正确的 SNI 值是按照 “[配置您的设备” 部分](https://docs.aws.amazon.com//iot/latest/developerguide/device-advisor-setting-up.html#da-configure-device)操作时返回的端点地址。 AWS IoT 还要求设备向传输层安全 (TLS) 协议发送服务器名称指示 (SNI) 扩展。有关更多信息，请参阅[中的传输安全 AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html)。

问：我的 MQTT 连接失败， AWS\$1ERROR出现 “libaws-c-mqtt: \$1MQTT\$1EXPERTED\$1HANGUP” 错误（或者）我的设备的 MQTT 连接与设备顾问终端节点自动断开连接。如何解决此错误？  
答：此特定错误代码和意外断开连接可能是由许多不同的原因造成的，但很可能与附加到设备的[设备角色](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role)相关。下面的检查点（按优先级顺序）将解决此问题。  
+ 附加到设备的设备角色必须具有运行测试所需的最低 IAM 权限。Device Advisor 将使用附加的设备角色来代表测试设备执行 AWS IoT MQTT 操作。如果缺少所需权限，则当设备尝试连接到 Device Advisor 端点时，会看到 `AWS_ERROR_MQTT_UNEXPECTED_HANGUP` 错误或发生意外断开连接。例如，如果您选择运行 **MQTT Publish** 测试用例，则角色中必须包含相应的 Connect ClientId 和 Publish 操作（您可以使用逗号分隔值来提供多个值，也可以使用通配符 (\$1) 字符提供前缀值。例如，要为任何以 `TestTopic` 开头的主题提供发布权限，您可以将“`TestTopic*`”作为资源值。下面是部分[策略示例](https://docs.aws.amazon.com/iot/latest/developerguide/example-iot-policies.html)。
+ 在设备角色中为资源类型定义的值与代码中使用的实际值不匹配。例如：角色 ClientId 定义与设备代码中实际 ClientId 使用的角色不匹配。像 Topic 和这样的 ClientId值在设备角色和代码中 TopicFilter 必须相同。
+ 附加到设备的设备证书必须处于活跃状态，并且附加了具有[资源](https://docs.aws.amazon.com//iot/latest/developerguide/iot-action-resources.html)所需[操作权限](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policy-actions.html)的[策略](https://docs.aws.amazon.com//iot/latest/developerguide/certificate-policy-examples.html)。请注意，设备证书策略授予或拒绝对 AWS IoT 资源和 AWS IoT Core 数据平面操作的访问权限。Device Advisor 要求您将活跃设备证书附加到您的设备，该证书可授予在测试使用案例期间使用的操作权限。