

终止支持通知： 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="ingest-data"></a>

如果您具有一个通道以将数据路由到管道，该管道将数据存储在数据存储以在其中对其进行查询，则可以将消息数据发送到 Amazon IoT Analytics。此处，我们介绍了两种将数据传送到 Amazon IoT Analytics的方法。您可以使用消息代理或使用 Amazon IoT Analytics `BatchPutMessage` API 发送 Amazon IoT 消息。

**Topics**
+ [使用 Amazon IoT 消息代理](#iot-message-broker)
+ [使用 BatchPutMessage API](#batchputmessage-api)

## 使用 Amazon IoT 消息代理
<a name="iot-message-broker"></a>

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

### 创建 IAM 角色
<a name="create-iam-role"></a>

要将 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`文件的内容应与以下内容类似。

------
#### [ 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`文件的内容应与以下内容类似。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iotanalytics:BatchPutMessage",
            "Resource": [
                "arn:aws:iotanalytics:{{us-east-1}}:{{111122223333}}:channel/{{your-channel}}"
            ]
        }
    ]
}
```

------

### 创建 Amazon IoT 规则
<a name="create-iot-rule"></a>

创建一条向您的频道发送消息的 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
<a name="send-mqtt-messages"></a>

在将规则加入通道、通道加入管道以及将管道加入到数据存储之后，所有与该规则匹配的数据现在都会流 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 控制台](https://console.amazonaws.cn/iot/)的左侧导航窗格中选择 **Test (测试)**。  
![Amazon IoT 控制台中“监控”页面的屏幕截图。](http://docs.amazonaws.cn/iotanalytics/latest/userguide/images/choose-test.png)

1. 在 MQTT 客户端页面上，在 **Publish** 部分的 **Specify a topic** 中，键入 **iot/test**。在消息负载部分，请验证以下 JSON 内容是否存在，如果不存在，则键入它们。

   ```
   {
       "message": "Hello from the IoT console"
   }
   ```

1. 选择 **Publish to topic（发布到主题）**。  
![Amazon IoT 控制台中 “测试” 页面的屏幕截图。](http://docs.amazonaws.cn/iotanalytics/latest/userguide/images/publish.png)

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

## 使用 BatchPutMessage API
<a name="batchputmessage-api"></a>

获取消息数据的另一种方法 Amazon IoT Analytics 是使用 `BatchPutMessage` API 命令。此方法不需要您设置 Amazon IoT 规则，即可将带有特定主题的消息路由到您的频道。但它确实要求将其发送 data/messages 到频道的设备能够运行使用 Amazon SDK创建的软件或能够使用调用`BatchPutMessage`。 Amazon CLI 

1. 创建一个文件`messages.json`，其中包含要发送的消息（在本示例中，只发送一条消息）。

   ```
   [
       { "messageId": "message01", "payload": "{ \"message\": \"Hello from the CLI\" }" }
   ]
   ```

1. 运行 `batch-put-message` 命令。

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

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

   ```
   {
       "batchPutMessageErrorEntries": []
   }
   ```