

终止支持通知： Amazon 将于 2025 年 12 月 15 日终止对的支持 Amazon IoT Analytics。2025 年 12 月 15 日之后，您将无法再访问 Amazon IoT Analytics 控制台或 Amazon IoT Analytics 资源。有关更多信息，请参阅[Amazon IoT Analytics 终止支持](https://docs.amazonaws.cn/iotanalytics/latest/userguide/iotanalytics-end-of-support.html)。

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

# 故障排除 Amazon IoT Analytics
<a name="troubleshoot"></a>

请参阅以下部分，对错误进行故障排除，并找到解决问题的可能解决方案 Amazon IoT Analytics。

**Topics**
+ [如何知道我的消息是否进入 Amazon IoT Analytics？](#getting-data)
+ [为什么管道会丢失消息？ 如何修复此问题？](#pipeline-no-data)
+ [为什么我的数据存储中没有任何数据？](#datastore-no-data)
+ [为什么我的数据集会只显示 `__dt`？](#dataset-no-data)
+ [如何编写由数据集完成操作驱动的事件代码？](#event-driven-dataset)
+ [如何正确配置笔记本实例来使用 Amazon IoT Analytics？](#configure-notebook-instance)
+ [为什么我无法在实例中创建笔记本？](#notebook-instance)
+ [为什么我在 Quick Suite 中看不到我的数据集？](#sq-no-dataset)
+ [为什么我在现有的 Jupyter Notebook 上看不到容器化按钮？](#containerization-jupyter-notebook)
+ [为什么我的容器化插件安装失败？](#containerization-installation-fails)
+ [为什么我的容器化插件引发错误？](#containerization-error)
+ [为什么我在容器化期间看不到我的变量？](#containerization-no-variables)
+ [我可以将哪些变量作为输入添加到我的容器中？](#add-variables-to-container)
+ [我如何将我的容器输出设置为后续分析的输入？](#containerization-subsequent-analysis)
+ [我的容器数据集为什么会失败？](#container-dataset-fails)

## 如何知道我的消息是否进入 Amazon IoT Analytics？
<a name="getting-data"></a>

检查是否正确配置了通过规则引擎将数据注入通道的规则。

```
aws iot get-topic-rule --rule-name your-rule-name
```

该响应应当与以下内容相似。

```
{
    "ruleArn": "arn:aws:iot:us-west-2:your-account-id:rule/your-rule-name",
    "rule": {
        "awsIotSqlVersion": "2016-03-23",
        "sql": "SELECT * FROM 'iot/your-rule-name'",
        "ruleDisabled": false,
        "actions": [
            {
                "iotAnalytics": {
                    "channelArn": "arn:aws:iotanalytics:region:your_account_id:channel/your-channel-name"
                }
            }
        ],
        "ruleName": "your-rule-name"
    }
}
```

确保规则中使用的区域和通道名称正确。要确保数据进入了规则引擎并且正确执行了规则，您可能需要添加新目标，以在 Amazon S3 存储桶中临时存储传入消息。

## 为什么管道会丢失消息？ 如何修复此问题？
<a name="pipeline-no-data"></a>
+ 活动收到了无效的 JSON 输入：

  除了 Lambda 活动之外的所有活动，专门需要有效 JSON 字符串作为输入。如果活动收到的 JSON 无效，则将丢弃消息，并且消息不会传入数据存储。确保您将有效的 JSON 消息提取到服务中。在使用二进制输入时，确保管道中的第一个活动是将二进制数据转换为有效 JSON 的 Lambda 活动，然后再将其传递到下一个活动或者存储到数据存储中。有关更多信息，请参阅 [Lambda 函数示例 2](https://docs.amazonaws.cn/iotanalytics/latest/userguide/pipeline-activities.html#aws-iot-analytics-pipeline-activities-lambda-ex2)。
+ Lambda 活动调用的 Lambda 函数权限不足：

  确保 Lambda 活动中的每个 Lambda 函数都有从该服务调用的权限。 Amazon IoT Analytics 您可以使用以下 Amazon CLI 命令来授予权限。

  ```
  aws lambda add-permission --function-name <name> --region <region> --statement-id <id> --principal iotanalytics.amazonaws.com --action lambda:InvokeFunction
  ```
+ 不正确地定义了某个筛选条件或 removeAttribute 活动：

  确保任意 `filter` 或 `removeAttribute` 活动的定义正确。如果您筛选出了某条消息或者从某条消息中删除了所有属性，该消息不会添加到数据存储。

## 为什么我的数据存储中没有任何数据？
<a name="datastore-no-data"></a>
+ 数据提取与数据可用之间存在延迟：

  将数据提取到通道中之后，可能需要几分钟时间，然后数据才会在数据存储中可用。该时间因管道活动数以及管道中的任何自定义 Lambda 活动的定义而异。
+ 管道正将消息筛选掉：

  确保您未在管道中丢弃消息。(请参阅前面的问题和答复。)
+ 数据集查询不正确：

  确保从数据存储生成数据集的查询正确无误。从查询中删除任何不必要的筛选条件，确保数据可以进入数据存储。

## 为什么我的数据集会只显示 `__dt`？
<a name="dataset-no-data"></a>
+ 此列由服务自动添加，并包含数据的大致提取时间。它可用于优化查询。如果数据集中除此之外不含任何其他内容，请参阅前面的问题和答复。

## 如何编写由数据集完成操作驱动的事件代码？
<a name="event-driven-dataset"></a>
+ 您必须根据 `describe-dataset` 命令设置轮询，以检查具有特定时间戳的数据集的状态是否为**已成功**。

## 如何正确配置笔记本实例来使用 Amazon IoT Analytics？
<a name="configure-notebook-instance"></a>

按照以下步骤确保您用于创建笔记本实例的 IAM 角色具有所需权限：

1. 前往 A SageMaker I 控制台并创建笔记本实例。

1. 填写详细信息，然后选择 **create a new role (创建新角色)**。记下角色的 ARN。

1. 创建笔记本实例。这也创建了 A SageMaker I 可以使用的角色。

1. 转到 IAM 控制台并修改新创建的 SageMaker AI 角色。当您打开该角色时，它应具有一个托管策略。

1. 单击 “**添加内联策略**”，选择 “**Io**” TAnalytics 作为服务，然后在 “读取权限” 下选择**GetDatasetContent**。

1. 检查策略，添加策略名称，然后对它选择 create (创建)。新创建的角色现在拥有从中读取数据集的策略权限 Amazon IoT Analytics。

1. 前往 Amazon IoT Analytics 控制台，在笔记本实例中创建笔记本。

1. 等待笔记本实例进入“In Service”(正在服务) 状态。

1. 选择 **create notebooks (创建笔记本)**，然后选择您创建的笔记本实例。这将使用可访问您的数据集的选定模板创建 Jupyter notebook。

## 为什么我无法在实例中创建笔记本？
<a name="notebook-instance"></a>
+ 确保您使用正确的 IAM 策略创建了笔记本实例。(按照上一个问题中的步骤操作。)
+ 请确保笔记本实例处于“In Service”(正在服务) 状态。在您创建实例时，它开始处于“Pending”(待处理) 状态。通常大约需要 5 分钟进入“In Service”(正在服务) 状态。如果笔记本实例在大约 5 分钟之后进入“Failed”(失败) 状态，请重新检查权限。

## 为什么我在 Quick Suite 中看不到我的数据集？
<a name="sq-no-dataset"></a>

**重要**  
Quick Suite 不在中国（北京）区域提供。有关支持的区域列表，请参阅中的 [Quick Suite 终端节点和配额*Amazon Web Services 一般参考*](https://docs.amazonaws.cn/general/latest/gr/quicksight.html)。

Quick Suite 可能需要权限才能读取您的 Amazon IoT Analytics 数据集内容。要授予权限，请按照以下步骤操作。

1. **在 Quick Suite 的右上角选择您的账户名称，然后选择管理。 QuickSight**

1. 在左侧导航窗格中，选择 **安全和权限**。在 “**QuickSight 访问 Amazon 服务**” 下，验证是否已授予访问权限 Amazon IoT Analytics。

   1. 如果 Amazon IoT Analytics 没有访问权限，请选择 “**添加” 或 “删除**”。

   1. 选中 **Amazon IoT Analytics** 旁边的复选框，然后选择 **更新**。这授予 Quick Suite 读取您的数据集内容的权限。

1. 请重试以可视化您的数据。

请务必为两者 Amazon IoT Analytics 和 Quick Suite 选择相同的 Amazon 区域。否则，您可能会在访问 Amazon 资源时遇到问题。有关支持的区域列表，请参阅中的[Amazon IoT Analytics 终端节点和配额以及](https://docs.amazonaws.cn/general/latest/gr/iot-analytics.html) [Quick Suite 终端节点和配额*Amazon Web Services 一般参考*](https://docs.amazonaws.cn/general/latest/gr/quicksight.html)。

## 为什么我在现有的 Jupyter Notebook 上看不到容器化按钮？
<a name="containerization-jupyter-notebook"></a>
+ 这是由于缺少 Amazon IoT Analytics 容器化插件造成的。如果您在 2018 年 8 月 23 日之前创建了 SageMaker笔记本实例，则需要按照笔记本[容器化](https://docs.amazonaws.cn/iotanalytics/latest/userguide/automate.html#aws-iot-analytics-automate-containerize)中的说明手动安装插件。
+ 如果您在从 Amazon IoT Analytics 控制台创建 SageMaker 笔记本实例或手动安装后看不到容器化按钮，请联系 Amazon IoT Analytics 技术支持。

## 为什么我的容器化插件安装失败？
<a name="containerization-installation-fails"></a>
+ 通常，由于 SageMaker笔记本实例中缺少权限，插件安装失败。有关笔记本实例需要的权限，请参阅[权限](https://docs.amazonaws.cn/iotanalytics/latest/userguide/automate.html#aws-iot-analytics-automate-permissions)以及向笔记本实例角色添加所需权限。如果问题仍然存在，请从 Amazon IoT Analytics 控制台创建一个新的笔记本实例。
+ 如果安装插件期间出现以下消息，您可以安全地忽略日志中的这一消息：“To initialize this extension in the browser every time the notebook (or other app) loads”(每当笔记本(或其他应用)加载时，在浏览器中初始化此扩展程序)。

## 为什么我的容器化插件引发错误？
<a name="containerization-error"></a>
+ 容器化失败并生成错误的原因有很多。在进行笔记本容器化之前，确保您使用的是正确的内核。容器化内核以“Containerized”前缀开头。
+ 由于插件会在 ECR 存储库中创建并保存一个 Docker 映像，请确保您的笔记本实例角色有足够权限来读取、列出和创建 ECR 存储库。有关笔记本实例需要的权限，请参阅[权限](https://docs.amazonaws.cn/iotanalytics/latest/userguide/automate.html#aws-iot-analytics-automate-permissions)以及向笔记本实例角色添加所需权限。
+ 此外，还要确保存储库的名称符合 ECR 要求。ECR 存储库名称必须以字母开头，并且只能包含小写字母、数字、连字符、下划线和正斜杠。
+ 如果容器化过程失败并显示错误“This instance has insufficient free space to run containerization”(此实例用于运行容器化的可用空间不足)，请尝试使用更大的实例来解决问题。
+ 如果显示连接错误或映像创建错误，请重试。如果问题仍然存在，请重新启动实例并安装最新的插件版本。

## 为什么我在容器化期间看不到我的变量？
<a name="containerization-no-variables"></a>
+  Amazon IoT Analytics 容器化插件在运行带有 “容器化” 内核的笔记本后，它会自动识别笔记本中的所有变量。使用其中一个容器化内核运行笔记本，然后执行容器化。

## 我可以将哪些变量作为输入添加到我的容器中？
<a name="add-variables-to-container"></a>
+ 您可以将要在运行时期间修改其值的任何变量作为输入添加到容器中。这样，您就可以使用需要在创建数据集时提供的不同参数来运行相同的容器。 Amazon IoT Analytics 容器化 Jupyter 插件通过自动识别笔记本中的变量并将其作为容器化过程的一部分提供来简化此过程。

## 我如何将我的容器输出设置为后续分析的输入？
<a name="containerization-subsequent-analysis"></a>
+ 每次运行容器数据集时，都会创建一个可存储已执行构件的特定 S3 位置。要访问此输出位置，请在您的容器数据集中创建一个类型为 `outputFileUriValue` 的变量。该变量的值应该是用于存储其他输出文件的 S3 路径。要在后续运行时访问这些已保存的构件，您可以使用代码 `getDatasetContent` API 并选取后续运行所需的相应输出文件。

## 我的容器数据集为什么会失败？
<a name="container-dataset-fails"></a>
+ 确保将正确的 `executionRole` 传递给容器数据集。`executionRole` 的信任策略必须同时包含 `iotanalytics.amazonaws.com` 和 `sagemaker.amazonaws.com`。
+ 如果 `AlgorithmError` 显示为失败原因，请尝试手动调试容器代码。如果容器代码中有错误或执行角色无权执行容器，则会出现这种情况。如果您使用 Amazon IoT Analytics Jupyter 插件进行容器化，请创建一个与 ContainerDataset 的 executionRole 角色相同的新 SageMaker 笔记本实例，然后尝试手动运行笔记本。如果容器是在 Jupyter 插件外创建的，请尝试手动运行代码并限制 executionRole 的权限。