将数据提取到 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 的方法。您可用 Amazon IoT 消息代理或 Amazon IoT Analytics BatchPutMessage API 发送消息。

使用 Amazon IoT 消息代理

要使用 Amazon IoT消息代理,请使用 Amazon IoT 规则引擎创建一个规则。该规则将具有特定主题的消息路由到 Amazon IoT Analytics。但首先,该规则要求您创建一个角色以授予所需的权限。

创建 IAM 角色

要将 Amazon IoT 消息路由到 Amazon IoT Analytics 通道,请设置一个规则。但首先,您必须创建一个 IAM 角色,以便为该规则授予权限以将消息数据发送到 Amazon IoT Analytics 通道。

运行以下命令以创建角色。

aws iam create-role --role-name myAnalyticsRole --assume-role-policy-document file://arpd.json

arpd.json文件的内容应与以下内容类似。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

然后,将策略文档附加到该角色:

aws iam put-role-policy --role-name myAnalyticsRole --policy-name myAnalyticsPolicy --policy-document file://pd.json

pd.json文件的内容应与以下内容类似。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotanalytics:BatchPutMessage", "Resource": [ "arn:aws:iotanalytics:us-west-2:your-account-number:channel/mychannel" ] } ] }

创建 Amazon IoT 规则

创建一个 Amazon IoT规则以将消息发送到您的通道。

aws iot create-topic-rule --rule-name analyticsTestRule --topic-rule-payload file://rule.json

rule.json文件的内容应与以下内容类似。

{ "sql": "SELECT * FROM 'iot/test'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotAnalytics": { "channelName": "mychannel", "roleArn": "arn:aws:iam::your-account-number:role/myAnalyticsRole" } } ] }

iot/test 替换为应路由的消息的 MQTT 主题。将通道名称和角色替换为您在前面章节中创建的通道和角色。

将 MQTT 消息发送到 Amazon IoT Analytics

在将规则加入通道、将通道加入管道并将管道加入数据存储后,与规则匹配的任何数据现在通过 Amazon IoT Analytics 流到数据存储,以准备好在其中进行查询。要测试该内容,您可以使用 Amazon IoT 控制台发送消息。

注意

您发送至 Amazon IoT Analytics 的消息负载(数据)的字段名称。

  • 必须仅包含字母数字字符和下划线 (_);不允许使用其他特殊字符。

  • 必须以字母字符或单个下划线 (_) 开头。

  • 不能包含连字符 (-)。

  • 正则表达式术语:^[A-Za-z_]([A-Za-z0-9]*|[A-Za-z0-9][A-Za-z0-9_]*)$

  • 长度不能超过 255 个字符。

  • 不区分大小写。同一负载中名为“foo”和“FOO”的字段被视为重复字段。

例如,在消息负载中,{"temp_01": 29}{"_temp_01": 29} 有效,但 {"temp-01": 29}{"01_temp": 29}{"__temp_01": 29} 无效。

  1. Amazon IoT 控制台的左侧导航窗格中选择 Test (测试)

    
                                Amazon IoT 控制台中“监控”页面的屏幕截图。
  2. 在 MQTT 客户端页面上,在 Publish 部分的 Specify a topic 中,键入 iot/test。在消息负载部分,请验证以下 JSON 内容是否存在,如果不存在,则键入它们。

    { "message": "Hello from the IoT console" }
  3. 选择 Publish to topic(发布到主题)

    
                                Amazon IoT 控制台中“测试”页面的屏幕截图。

    这会发布一条消息,该消息路由到您之前创建的数据存储。

使用 BatchPutMessage API

将消息数据输入 Amazon IoT Analytics 的另一种方法是使用 BatchPutMessage API 命令。此方法不要求您设置 Amazon IoT 规则来将具有特定主题的消息路由到您的通道。但它要求向通道发送数据/消息的设备能够运行使用 Amazon 开发工具包创建的软件或能够使用Amazon CLI 调用BatchPutMessage

  1. 创建一个文件messages.json,其中包含要发送的消息(在本示例中,只发送一条消息)。

    [ { "messageId": "message01", "payload": "{ \"message\": \"Hello from the CLI\" }" } ]
  2. 运行 batch-put-message 命令。

    aws iotanalytics batch-put-message --channel-name mychannel --messages file://messages.json --cli-binary-format raw-in-base64-out

    如果没有错误,将显示以下输出。

    { "batchPutMessageErrorEntries": [] }