排除 Amazon IoT Analytics 的故障 - Amazon IoT Analytics
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

排除 Amazon IoT Analytics 的故障

请参阅下一节,对错误进行故障排查,并找到可能的解决方案来解决 Amazon IoT Analytics 的问题。

如何知道我的消息是否进入 Amazon IoT Analytics?

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

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 存储桶中临时存储传入消息。

为什么管道会丢失消息? 如何修复此问题?

  • 活动收到了无效的 JSON 输入:

    除了 Lambda 活动之外的所有活动,专门需要有效 JSON 字符串作为输入。如果活动收到的 JSON 无效,则将丢弃消息,并且消息不会传入数据存储。确保您将有效的 JSON 消息提取到服务中。在使用二进制输入时,确保管道中的第一个活动是将二进制数据转换为有效 JSON 的 Lambda 活动,然后再将其传递到下一个活动或者存储到数据存储中。有关更多信息,请参阅 Lambda 函数示例 2

  • 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 活动:

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

为什么我的数据存储中没有任何数据?

  • 数据提取与数据可用之间存在延迟:

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

  • 管道正将消息筛选掉:

    确保您未在管道中丢弃消息。(请参阅前面的问题和答复。)

  • 数据集查询不正确:

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

为什么我的数据集会只显示 __dt

  • 此列由服务自动添加,并包含数据的大致提取时间。它可用于优化查询。如果数据集中除此之外不含任何其他内容,请参阅前面的问题和答复。

如何编写由数据集完成操作驱动的事件代码?

  • 您必须根据 describe-dataset 命令设置轮询,以检查具有特定时间戳的数据集的状态是否为已成功

如何正确配置笔记本实例来使用 Amazon IoT Analytics?

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

  1. 转到 SageMaker 控制台并创建笔记本实例。

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

  3. 创建笔记本实例。这还会创建 SageMaker 可使用的角色。

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

  5. 单击 添加内联策略,选择 作为服务,然后在读取权限下,选择 GetDatasetContent

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

  7. 转到 Amazon IoT Analytics 控制台并在笔记本实例中创建笔记本。

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

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

为什么我无法在实例中创建笔记本?

  • 确保您使用正确的 IAM 策略创建了笔记本实例。(按照上一个问题中的步骤操作。)

  • 请确保笔记本实例处于“In Service”(正在服务) 状态。在您创建实例时,它开始处于“Pending”(待处理) 状态。通常大约需要 5 分钟进入“In Service”(正在服务) 状态。如果笔记本实例在大约 5 分钟之后进入“Failed”(失败) 状态,请重新检查权限。

为什么我在 Amazon QuickSight 中看不到我的数据集?

重要

Amazon QuickSight 不在中国(北京)区域不可用。有关支持的区域列表,请参阅《Amazon Web Services 一般参考》中的 Amazon QuickSight 端点和配额

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

  1. 在 Amazon QuickSight 的右上角选择您的账户名称,然后选择管理 QuickSight

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

    1. 如果 Amazon IoT Analytics 没有访问权限,请选择添加或删除

    2. 选中 Amazon IoT Analytics 旁边的复选框,然后选择 更新。这会向 Amazon QuickSight 提供对您数据集的读取权限。

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

请务必为 Amazon IoT Analytics 和 Amazon QuickSight 选择相同的 Amazon 区域。否则,您可能会在访问 Amazon 资源时遇到问题。有关支持的区域列表,请参阅 Amazon Web Services 一般参考 中的Amazon IoT Analytics 端点和配额以及 Amazon QuickSight 端点和配额

为什么我在现有的 Jupyter Notebook 上看不到容器化按钮?

  • 这是因为缺少 Amazon IoT Analytics 容器化插件。如果您的 SageMaker 笔记本实例是在 2018 年 8 月 23 日之前创建的,则需按照笔记本容器化中的说明手动安装插件。

  • 从 Amazon IoT Analytics 控制台中创建 SageMaker 笔记本实例或手动安装该实例后,如果看不到容器化按钮,请与 Amazon IoT Analytics 技术支持联系。

为什么我的容器化插件安装失败?

  • 通常,插件安装失败是因为 SageMaker 笔记本实例缺少权限。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。如果问题仍然存在,请从 Amazon IoT Analytics 控制台创建一个新笔记本实例。

  • 如果安装插件期间出现以下消息,您可以安全地忽略日志中的这一消息:“To initialize this extension in the browser every time the notebook (or other app) loads”(每当笔记本(或其他应用)加载时,在浏览器中初始化此扩展程序)。

为什么我的容器化插件引发错误?

  • 容器化失败并生成错误的原因有很多。在进行笔记本容器化之前,确保您使用的是正确的内核。容器化内核以“Containerized”前缀开头。

  • 由于插件会在 ECR 存储库中创建并保存一个 Docker 映像,请确保您的笔记本实例角色有足够权限来读取、列出和创建 ECR 存储库。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。

  • 此外,还要确保存储库的名称符合 ECR 要求。ECR 存储库名称必须以字母开头,并且只能包含小写字母、数字、连字符、下划线和正斜杠。

  • 如果容器化过程失败并显示错误“This instance has insufficient free space to run containerization”(此实例用于运行容器化的可用空间不足),请尝试使用更大的实例来解决问题。

  • 如果显示连接错误或映像创建错误,请重试。如果问题仍然存在,请重新启动实例并安装最新的插件版本。

为什么我在容器化期间看不到我的变量?

  • Amazon IoT Analytics 容器化插件在运行具有“容器化”内核的笔记本后,可自动识别笔记本中的所有变量。使用其中一个容器化内核运行笔记本,然后执行容器化。

我可以将哪些变量作为输入添加到我的容器中?

  • 您可以将要在运行时期间修改其值的任何变量作为输入添加到容器中。这样,您就可以使用需要在创建数据集时提供的不同参数来运行相同的容器。Amazon IoT Analytics 容器化 Jupyter 插件通过在笔记本中自动识别变量并使其在容器化过程中可用来简化此过程。

我如何将我的容器输出设置为后续分析的输入?

  • 每次运行容器数据集时,都会创建一个可存储已执行构件的特定 S3 位置。要访问此输出位置,请在您的容器数据集中创建一个类型为 outputFileUriValue 的变量。该变量的值应该是用于存储其他输出文件的 S3 路径。要在后续运行时访问这些已保存的构件,您可以使用代码 getDatasetContent API 并选取后续运行所需的相应输出文件。

我的容器数据集为什么会失败?

  • 确保将正确的 executionRole 传递给容器数据集。executionRole 的信任策略必须同时包含 iotanalytics.amazonaws.comsagemaker.amazonaws.com

  • 如果 AlgorithmError 显示为失败原因,请尝试手动调试容器代码。如果容器代码中有错误或执行角色无权执行容器,则会出现这种情况。如果您通过使用 Amazon IoT Analytics Jupyter 插件来执行容器化,请创建一个与 containerDataset 的 executionRole 具有相同角色的新 SageMaker 笔记本实例,并尝试手动运行该笔记本。如果容器是在 Jupyter 插件外创建的,请尝试手动运行代码并限制 executionRole 的权限。