

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics，可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间，以实现实时分析。点击[此处](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)了解更多信息。

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

# AWS IoT Core
<a name="IOT-Core"></a>

 可使用 [AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html) 从 IoT 设备收集数据，并通过 IoT Core 规则操作将数据路由到 Amazon Timestream。AWSIoT 规则操作将指定规则触发后应执行的操作。可以定义将数据发送到 Amazon Timestream 表、Amazon DynamoDB 数据库以及调用 AWS Lambda 函数的操作。

 IoT 规则中的 Timestream 操作用于将传入消息的数据直接插入到 Timestream 中。该操作解析 [IoT Core SQL](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html) 语句的结果，并将数据存储在 Timestream 中。返回的 SQL 结果集中的字段名称用作 measure::name，字段的值为 measure::value。

 例如，考虑 SQL 语句和示例消息有效载荷。

```
SELECT temperature, humidity from 'iot/topic'
```

```
{
  "dataFormat": 5, 
  "rssi": -88,
  "temperature": 24.04,    
  "humidity": 43.605,    
  "pressure": 101082,    
  "accelerationX": 40,    
  "accelerationY": -20,    
  "accelerationZ": 1016,    
  "battery": 3007,    
  "txPower": 4,    
  "movementCounter": 219,    
  "device_id": 46216,
  "device_firmware_sku": 46216   
}
```

 如果使用上述 SQL 语句创建 Timestream 的 IoT Core 规则操作，则将向 Timestream 中添加两条记录，其度量名称分别为温度和湿度，度量值分别为 24.04 和 43.605。

 可使用 SELECT 语句中的 AS 运算符，修改要添加到 Timestream 的记录的度量名称。下列 SQL 语句将使用消息名称 temp 而非 temperature 创建记录。

 度量的数据类型根据消息有效载荷值的数据类型推断得出。整数、双精度、布尔值和字符串等 JSON 数据类型分别映射到 BIGINT、DOUBLE、BOOLEAN 和 VARCHAR 等 Timestream 数据类型。也可使用 [cast()](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-cast) 函数将数据强制转换为特定的数据类型。您可以指定该度量的时间戳。如果时间戳为空，则使用处理条目的时间。

如需了解更多详细信息，可以参阅 [Timestream 规则操作文档](https://docs.aws.amazon.com/iot/latest/developerguide/timestream-rule-action.html)

 要创建 IoT Core 规则操作以将数据存储在 Timestream 中，请执行以下步骤：

**Topics**
+ [先决条件](#prereqs)
+ [使用控制台](#using-console)
+ [使用 CLI](#using-cli)
+ [示例应用程序](#sample-app)
+ [教程视频](#video-tutorial)

## 先决条件
<a name="prereqs"></a>

1. 按照 [创建数据库](console_timestream.md#console_timestream.db.using-console) 中所述的说明在 Amazon Timestream 中创建数据库。

1. 按照 [创建表](console_timestream.md#console_timestream.table.using-console) 中所述的说明在 Amazon Timestream 中创建表。

## 使用控制台
<a name="using-console"></a>

1. 使用适用于 AWS IoT Core 的 AWS 管理控制台创建规则，方法是点击**管理** > **消息路由** > **规则**，然后点击**创建规则**。

1. 将规则名称设置为您选择的名称，并将 SQL 设置为如下所示的文本

   ```
   SELECT temperature as temp, humidity from 'iot/topic' 
   ```

1. 从“操作”列表中选择 Timestream

1. 指定 Timestream 数据库、表和维度名称以及用于将数据写入 Timestream 的角色。如果该角色不存在，可点击“创建角色”进行创建

1. 要测试规则，则按照[此处](https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html#test-db-rule)所示说明进行操作。

## 使用 CLI
<a name="using-cli"></a>

 如果您尚未安装 AWS 命令行界面（AWS CLI），请由[此处](https://aws.amazon.com/cli/)进行安装。

1. 将以下规则有效载荷保存到名为 timestream\$1rule.json 的 JSON 文件中。将 *arn:aws:iam::123456789012:role/TimestreamRole* 替换为角色 ARN，该角色 ARN 授予 AWS IoT 访问权限以 Amazon Timestream 中存储数据。

   ```
   { 
       "actions": [ 
               { 
                   "timestream": { 
                       "roleArn": "arn:aws:iam::123456789012:role/TimestreamRole", 
                       "tableName": "devices_metrics", 
                       "dimensions": [ 
                           { 
                               "name": "device_id", 
                               "value": "${clientId()}" 
                           }, 
                           { 
                               "name": "device_firmware_sku", 
                               "value": "My Static Metadata" 
                           } 
                       ], 
                       "databaseName": "record_devices" 
                   } 
               } 
       ], 
       "sql": "select * from 'iot/topic'", 
       "awsIotSqlVersion": "2016-03-23", 
       "ruleDisabled": false 
   }
   ```

1. 使用以下命令创建主题规则

   ```
   aws iot create-topic-rule --rule-name timestream_test --topic-rule-payload file://<path/to/timestream_rule.json> --region us-east-1 
   ```

1. 使用以下命令检索主题规则的详细信息

   ```
   aws iot get-topic-rule --rule-name timestream_test 
   ```

1. 将以下消息有效载荷保存到名为 timestream\$1msg.json 的文件中

   ```
   {
     "dataFormat": 5, 
     "rssi": -88,
     "temperature": 24.04,    
     "humidity": 43.605,    
     "pressure": 101082,    
     "accelerationX": 40,    
     "accelerationY": -20,    
     "accelerationZ": 1016,    
     "battery": 3007,    
     "txPower": 4,    
     "movementCounter": 219,    
     "device_id": 46216,
     "device_firmware_sku": 46216   
   }
   ```

1. 使用以下命令测试规则

   ```
   aws iot-data publish --topic 'iot/topic' --payload file://<path/to/timestream_msg.json>
   ```

## 示例应用程序
<a name="sample-app"></a>

 为帮助您开始使用 Timestream 与 AWS IoT Core，我们已创建功能齐全的示例应用程序，该应用程序在 AWS IoT Core 和 Timestream 中创建用于创建主题规则的必要组件，以及创建用于向主题发布数据的示例应用程序。

1.  按照 [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository) 中的说明克隆 GitHub 存储库，该存储库用于 AWS IoT Core 集成的[示例应用程序](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/iot_core)

1. 按照[自述文件](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/iot_core)中的说明，使用 AWS CloudFormation 模板在 Amazon Timestream 和 AWS IoT Core 中创建必要组件，并向该主题发布示例消息。

## 教程视频
<a name="video-tutorial"></a>

本[视频](https://youtu.be/00Wersoz2Q4)介绍 IoT Core 如何与 Timestream 结合使用。