本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排除 Amazon IoT Analytics 的故障
请参阅以下部分,以解决错误并找到解决问题的可能解决方案Amazon IoT Analytics。
主题
- 如何知道我的消息是否已进入Amazon IoT Analytics?
- 为什么我的管道会丢失消息? 如何修复此问题?
- 为什么我的数据存储中没有数据?
- 为什么我的数据集只显示出来__dt?
- 如何对由数据集完成驱动的事件进行编码?
- 如何正确配置我的笔记本实例以供使用Amazon IoT Analytics?
- 为什么我不能在实例中创建笔记本?
- 为什么我在亚马逊上看不到我的数据集 QuickSight?
- 为什么我在现有 Jupyter 笔记本上看不到容器化按钮?
- 为什么我的容器化插件安装失败?
- 为什么我的容器化插件会抛出错误?
- 为什么我在容器化过程中看不到我的变量?
- 我可以将哪些变量作为输入添加到我的容器中?
- 如何将容器输出设置为后续分析的输入?
- 为什么我的容器数据集失败?
如何知道我的消息是否已进入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 活动:
确保定义(如果有)
filter
或removeAttribute
活动是正确的。如果您筛选出了某条消息或者从某条消息中删除了所有属性,该消息不会添加到数据存储。
为什么我的数据存储中没有数据?
-
数据提取与数据可用之间存在延迟:
将数据提取到通道中之后,可能需要几分钟时间,然后数据才会在数据存储中可用。该时间因管道活动数以及管道中的任何自定义 Lambda 活动的定义而异。
-
管道正将消息筛选掉:
确保您未在管道中丢弃消息。(请参阅前面的问题和答复。)
-
您的数据集查询不正确:
确保从数据存储生成数据集的查询是正确的。从查询中删除任何不必要的筛选条件,确保数据可以进入数据存储。
为什么我的数据集只显示出来__dt
?
-
此列由服务自动添加,并包含数据的大致提取时间。它可用于优化查询。如果您的数据集仅包含此内容,请参阅前面的问题和答案。
如何对由数据集完成驱动的事件进行编码?
-
必须根据
describe-dataset
命令设置轮询,以检查具有特定时间戳的数据集的状态是否为 “成功”。
如何正确配置我的笔记本实例以供使用Amazon IoT Analytics?
按照以下步骤确保您用于创建笔记本实例的 IAM 角色具有所需权限:
-
转到 SageMaker 控制台并创建笔记本实例。
-
填写详细信息,然后选择 create a new role (创建新角色)。记下角色的 ARN。
-
创建笔记本实例。这还会创建一个 SageMaker 可以使用的角色。
-
转到 IAM 控制台并修改新创建的 SageMaker 角色。当您打开该角色时,它应具有一个托管策略。
-
点击添加内联策略,选择 IoTAnalytics 作为服务,然后在读取权限下选择GetDatasetContent。
-
检查策略,添加策略名称,然后对它选择 create (创建)。新创建的角色现在拥有从中读取数据集的策略权限Amazon IoT Analytics。
-
转到Amazon IoT Analytics控制台并在笔记本实例中创建笔记本。
-
等待笔记本实例进入“In Service”(正在服务) 状态。
-
选择 create notebooks (创建笔记本),然后选择您创建的笔记本实例。这将使用所选模板创建一个 Jupyter 笔记本,该模板可以访问您的数据集。
为什么我不能在实例中创建笔记本?
-
确保您使用正确的 IAM 策略创建了笔记本实例。(按照上一个问题中的步骤操作。)
-
请确保笔记本实例处于“In Service”(正在服务) 状态。当您创建实例时,它以 “待定” 状态开始。通常大约需要 5 分钟进入“In Service”(正在服务) 状态。如果笔记本实例在大约五分钟后进入 “失败” 状态,请再次检查权限。
为什么我在亚马逊上看不到我的数据集 QuickSight?
重要
亚马逊 QuickSight 在中国(北京)区域推出。有关支持的区域列表,请参阅中的 Amazon QuickSight 终端节点和配额Amazon Web Services 一般参考。
亚马逊 QuickSight 可能需要权限才能读取您的Amazon IoT Analytics数据集内容。要授予权限,请按照以下步骤操作。
-
在亚马逊的右上角选择您的账户名称, QuickSight 然后选择管理 QuickSight。
-
在左侧导航窗格中,选择 Celity & Progs(安全与权限) 在 “Amazon服务QuickSight 访问权限” 下,验证是否已授予访问权限Amazon IoT Analytics。
-
如果Amazon IoT Analytics没有访问权限,请选择 “添加” 或 “删除”。
-
选中旁边的复选框 Amazon IoT Analytics,然后选择 “更新”。这使亚马逊 QuickSight 有权读取您的数据集内容。
-
-
请重试以可视化您的数据。
确保为两Amazon IoT Analytics者和亚马逊选择相同Amazon的地区 QuickSight。否则,您可能会在访问Amazon资源时遇到问题。有关支持的区域列表,请参阅中的Amazon IoT Analytics终端节点和配额以及 Amazon QuickSight 终端节点和配额Amazon Web Services 一般参考。
为什么我在现有 Jupyter 笔记本上看不到容器化按钮?
-
这是由于缺少Amazon IoT Analytics容器化插件造成的。如果您在 2018 年 8 月 23 日之前创建了 SageMaker笔记本实例,则需要按照容器化笔记本中的说明手动安装该插件。
-
如果您在从Amazon IoT Analytics控制台创建笔记本实例或手动安装 SageMaker 笔记本实例后没有看到 containerize 按钮,请联系Amazon IoT Analytics技术支持。
为什么我的容器化插件安装失败?
-
通常,由于 SageMaker笔记本实例中缺少权限,插件安装失败。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。如果问题仍然存在,请从Amazon IoT Analytics控制台创建一个新的笔记本实例。
-
如果在安装插件期间出现以下消息,则可以放心地忽略日志中的以下消息:“每次加载笔记本(或其他应用程序)时在浏览器中初始化此扩展。”
为什么我的容器化插件会抛出错误?
-
容器化失败并生成错误的原因有很多。在进行笔记本容器化之前,确保您使用的是正确的内核。容器化内核以“Containerized”前缀开头。
-
由于插件会在 ECR 存储库中创建并保存一个 Docker 映像,请确保您的笔记本实例角色有足够权限来读取、列出和创建 ECR 存储库。有关笔记本实例需要的权限,请参阅权限以及向笔记本实例角色添加所需权限。
-
此外,还要确保存储库的名称符合 ECR 要求。ECR 存储库名称必须以字母开头,并且只能包含小写字母、数字、连字符、下划线和正斜杠。
-
如果容器化过程失败并出现以下错误:“此实例的可用空间不足以运行容器化”,请尝试使用更大的实例来解决问题。
-
如果显示连接错误或映像创建错误,请重试。如果问题仍然存在,请重新启动实例并安装最新的插件版本。
为什么我在容器化过程中看不到我的变量?
-
Amazon IoT Analytics容器化插件在使用 “Containerized” 内核运行笔记本后,会自动识别笔记本中的所有变量。使用其中一个容器化内核运行笔记本,然后执行容器化。
我可以将哪些变量作为输入添加到我的容器中?
-
您可以将要在运行时期间修改其值的任何变量作为输入添加到容器中。这使您能够使用不同的参数运行同一个容器,这些参数需要在创建数据集时提供。Amazon IoT Analytics容器化 Jupyter 插件通过自动识别笔记本中的变量并将其作为容器化过程的一部分提供来简化此过程。
如何将容器输出设置为后续分析的输入?
-
每次运行容器数据集时,都会创建一个可存储已执行构件的特定 S3 位置。要访问此输出位置,请在您的容器数据集中创建一个类型为
outputFileUriValue
的变量。该变量的值应该是用于存储其他输出文件的 S3 路径。要在后续运行中访问这些保存的工件,您可以使用getDatasetContent
API 并选择后续运行所需的相应输出文件。
为什么我的容器数据集失败?
-
确保将正确的
executionRole
内容传递给容器数据集。的信任策略executionRole
必须包括iotanalytics.amazonaws.com
和sagemaker.amazonaws.com
。 -
如果您
AlgorithmError
认为失败的原因,请尝试手动调试容器代码。如果容器代码中有错误或执行角色无权执行容器,则会出现这种情况。如果您使用Amazon IoT Analytics Jupyter 插件实现容器化,请创建一个新的 SageMaker 笔记本实例,其角色与 ContainerDataset 的 ExecutionRole 相同,然后尝试手动运行该笔记本。如果容器是在 Jupyter 插件外创建的,请尝试手动运行代码并限制 executionRole 的权限。