将设备数据存储在 DynamoDB 表中 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将设备数据存储在 DynamoDB 表中

本教程演示如何创建 Amazon IoT 规则,以将消息数据发送到 DynamoDB 表。

在本教程中,您将创建一条规则来将消息数据从假想气象传感器设备发送到 DynamoDB 表。该规则将为来自许多气象传感器的数据设置格式,以便将其添加到单个数据库表中。

在本教程中您将学到

  • 如何创建 DynamoDB 表

  • 如何将消息数据从 Amazon IoT 规则发送到 DynamoDB 表

  • 如何将替换模板用于 Amazon IoT 规则

  • 如何在规则查询语句中使用简单的 SQL 查询和函数

  • 如何使用 MQTT 客户端来测试 Amazon IoT 规则

完成本教程需要大约 30 分钟。

在开始本教程之前,请确保您具有:

为本教程创建 DynamoDB 表

在本教程中,您将创建一个具有以下属性的 DynamoDB 表,以记录来自虚拟气象传感器设备的数据:

  • sample_time 是主键,描述了记录样本的时间。

  • device_id 是排序键,描述了提供示例的设备

  • device_data 是从设备接收并由规则查询语句格式化的数据

如需为本教程创建 DynamoDB 表

  1. 打开 DynamoDB 控制台,然后选择 Create table(创建表格)。

  2. Create DynamoDB table(创建 DynamoDB 表)中:

    1. Table name(表名称)框中输入表名:wx_data

    2. Primary key(主键)中,Partion key(分区键)中输入 sample_time,然后在字段旁边的选项列表中,选择 Number

    3. 选择 Add sort key(添加排序键)。

    4. Add sort key(添加排序键)下显示的字段中中输入 device_id,然后在字段旁边的选项列表中,选择 Number

    5. 在页面底部,选择 Create(创建)。

您将在稍后定义 device_data,即您配置 DynamoDB 规则操作时。

创建 Amazon IoT 规则以将数据发送到 DynamoDB 表

在此步骤中,您将使用规则查询语句格式化来自虚拟气象传感器设备的数据,以便写入数据库表。

从天气传感器设备接收的示例消息负载如下所示:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

对于数据库条目,您将使用规则查询语句将消息负载的结构展平如下:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }

在这个规则中,您还将使用几个 替换模板。替代模板是用于从函数和消息数据中插入动态值的表达式。

创建 Amazon IoT 规则以将数据发送到 DynamoDB 表

  1. 打开 Amazon IoT 控制台的 Rules(规则)页面

  2. 要在 Rule(规则)中创建新规则,请选择 Create(创建)。

  3. Create a rule(创建规则)顶部:

    1. Name(名称)中,输入规则的名称,wx_data_ddb

      请记住,规则名称在您的 Amazon Web Services 账户 和区域中必须唯一,并且不能包含任何空格。我们在此名称中使用了下划线字符来分隔规则名称中的两个单词。

    2. Description(说明)中,描述规则。

      有意义的描述可以更容易地记住此规则的作用以及您创建它的原因。描述可以根据需要延长,因此请尽可能详细。

  4. Create a rule(创建规则)的 Rule query statement(规则查询语句)中:

    1. Using SQL version(使用 SQL 版本)中,选择 2016-03-23

    2. Rule query statement(规则查询语句)编辑框中,输入语句:

      SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'

      本语句:

      • 侦听主题符合 device/+/data 主题筛选条件的 MQTT 消息。

      • wind 属性的元素格式化为单个属性。

      • 传递 temperaturehumiditybarometer 属性,使其保持不变。

  5. Set one or more actions(设置一个或多个操作)中:

    1. 要打开此规则的规则操作列表,请选择 Add action(添加操作)。

    2. Select an actoin(选择操作)中,选择 Insert a message into a DynamoDB table(将消息插入到 DynamoDB 表)。

    3. 要打开选定操作的配置页面,请在操作列表底部选择 Configure action(配置操作)。

  6. Configure action(配置操作)中:

    1. Table name(表名称)中,选择在上一步中创建的 DynamoDB 表的名称:wx_data

      Partition key(分区键)、Partition key type(分区键类型)、Sort key(排序键)和 Sort key type(排序键类型)字段将使用 DynamoDB 表中的值填充。

    2. Partition key value(分区键值)中,输入 ${timestamp()}

      这是您将在此规则中使用第一个 替换模板。它将使用 timestamp 函数返回的值,而不是消息负载中的值。

    3. 在排序键值中,输入 ${cast(topic(2) AS DECIMAL)}

      这是您将在此规则中使用的第二个 替换模板。它将第二个元素的值插入到主题名称,即设备的 ID,后面其将投射为十进制值以匹配密钥的数字格式。

    4. Write message data to this column (将消息数据写入到此列) 中,输入 device_data

      这将在 DynamoDB 表中创建 device_data 列。

    5. Operation (操作) 留空。

    6. Choose or create a role to grant Amazon IoT access to perform this action(选择或创建角色以向 IoT 授予执行此操作的权限)下,选择 Create Role(创建角色)。

    7. Create new role(创建新角色)中,输入 wx_ddb_role,然后选择 Create role(创建角色)。

    8. Configure action(配置操作)底部,选择 Add action(添加操作)。

    9. 要创建规则,请在 Create a rule(创建一条规则)底部,选择 Create rule(创建规则)。

测试 Amazon IoT 规则和 DynamoDB 表

要测试新规则,您将使用 MQTT 客户端发布和订阅此测试中使用的 MQTT 消息。

在新窗口中打开 Amazon IoT 控制台中的 MQTT 客户端。这将允许您在不丢失 MQTT 客户端配置的情况下编辑规则。如果您让其转到控制台中的其他页面,MQTT 客户端不会保留任何订阅或消息日志。您还需要一个单独的控制台窗口打开到 Amazon IoT 控制台中的 DynamoDB 表中心以查看规则发送的新条目。

如需使用 MQTT 客户端来测试您的规则

  1. Amazon IoT 控制台中的 MQTT 客户端中,订阅输入主题,device/+/data

    1. 在 MQTT 客户端中,选择 Subscribe to a topic(订阅主题)。

    2. 对于 Topic filter(主题筛选条件)中,输入输入主题筛选条件的主题,device/+/data

    3. 选择 Subscribe

  2. 现在,使用特定设备 ID device/22/data 向输入主题发布消息。您无法发布到包含通配符的 MQTT 主题。

    1. 在 MQTT 客户端中,选择 Publish to a topic(发布到主题)。

    2. 对于 Topic name(主题名称),输入输入主题名称 device/22/data

    3. 对于 Message payload(消息负载),输入以下示例数据。

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. 要发布 MQTT 消息,请选择 Publish(发布)。

    5. 现在,在 MQTT 客户端中,选择 Subscribe to a topic(订阅主题)。在 Subscribe(订阅)列中,选择 device/+/data 订阅。确认上一步骤中的示例数据是否显示在此处。

  3. 检查以查看您的规则创建的 DynamoDB 表中的行。

    1. Amazon IoT 控制台的 DynamoDB 表中心中,选择 wx_data,然后选择 Items(项目)选项卡。

      如果您已经在 Items(项目)选项卡上,则可能需要通过选择表格标题右上角的刷新图标来刷新显示。

    2. 请注意,表中的 sample_time 值是链接,请打开一个。如果您刚刚发送了第一条消息,那么这将是列表中唯一的消息。

      此链接显示表的该行中所有的数据。

    3. 展开 device_data 条目以查看规则查询语句生成的数据。

    4. 浏览此显示中可用数据的不同表示形式。您也可以编辑此显示中的数据。

    5. 查看完此行数据后,要保存所做的任何更改,请选择 Save(保存),或者要退出而不保存任何更改,请选择 Cancel(取消)。

如果您未看到正确的行为,请检查故障排除提示。

故障排除 DynamoDB 规则

如果您没有看到期望的结果,可检查以下事项。

  • 您收到了一个错误的广告条

    如果在您发布输入消息时出现错误,请先更正该错误。以下步骤可帮助您更正此错误。

  • 您未在 MQTT 客户端中看到输入消息

    每次将输入消息发布到 device/22/data 主题时,如果您如流程中所述订阅了 device/+/data 主题筛选条件,则消息应当会在 MQTT 客户端中显示。

    要检查的事项

    • 检查您订阅的主题筛选条件

      如果您如流程中所述订阅了输入消息主题,则每次发布输入消息时都应看到该输入消息的副本。

      如果没有看到该消息,请检查您订阅的主题名称,并将其与您发布的主题进行比较。主题名称区分大小写,您订阅的主题必须与发布消息负载的主题相同。

    • 检查消息发布函数

      在 MQTT 客户端中,在 Subscriptions(订阅)项下,选择device/+/data,检查发布消息的主题,然后选择 Publish to topic(发布到主题)。您应该会看到来自主题下方编辑框中的消息负载出现在消息列表中。

  • 您在 DynamoDB 表中看不到您的数据

    要做的第一件事是通过选择表格标题右上角的刷新图标来手动刷新显示。如果没有显示您要查找的数据,请检查以下内容。

    要检查的事项

    • 检查 MQTT 客户端的 Amazon Web Services 区域 和您创建的规则

      您在其中运行 MQTT 客户端的控制台必须位于您所创建规则的同一 Amazon 区域。

    • 检查规则查询语句中的输入消息主题

      要使规则起作用,它必须收到一条消息,消息主题名称应与规则查询语句 FROM 子句中的主题筛选条件相匹配。

      检查规则查询语句中主题筛选条件的拼写与 MQTT 客户端中主题的拼写。主题名称区分大小写,消息的主题必须与规则查询语句中的主题筛选条件匹配。

    • 检查输入消息负载的内容

      要使规则起作用,则必须在 SELECT 语句中声明的消息负载中找到数据字段。

      检查规则查询语句 temperature 字段中的拼写与 MQTT 客户端中消息负载的拼写。字段名称区分大小写,规则查询语句中 temperature 字段必须与消息负载中的 temperature 字段相同。

      确保消息负载中的 JSON 文档格式正确。如果 JSON 有任何错误(例如缺少逗号),则规则将无法读取它。

    • 检查规则操作中使用的键名和字段名称

      主题规则中使用的字段名称必须与已发布消息的 JSON 消息负载中找到的字段名称匹配。

      打开在控制台中创建的规则,并检查规则操作配置中的字段名称与 MQTT 客户端中使用的字段名称。

    • 检查规则所使用的角色

      规则操作必须具有接收原始主题和发布新主题的权限。

      授权规则接收消息数据和更新 DynamoDB 表的策略特定于所使用的主题。如果更改规则使用的主题或 DynamoDB 表名称,则必须更新规则操作的角色以更新其策略来匹配。

      如果您怀疑存在问题,请编辑规则操作并创建新角色。规则操作创建的新角色将接收执行这些操作所需的授权。

查看结果和后续步骤

使用此规则向 DynamoDB 表发送几条消息后,请尝试对其进行试验,以了解更改教程中的某些方面如何影响写入表的数据。以下想法可以帮助您开始操作。

  • 在输入消息主题中更改 device_id,并观察对数据的影响。您可以使用它来模拟从多个气象传感器接收数据。

  • 更改规则查询语句中选定的字段,并观察对数据的影响。您可以使用它筛选存储在表中的数据。

  • 添加重新发布规则操作,以便为添加到表中的每一行发送 MQTT 消息。您可以使用它进行调试。

完成本教程后,请继续进行下一项!