将数据提取到 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 AnalyticsBatchPutMessage 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 SDK创建的软件或能够使用进行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": [] }