

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

# 将属性值更新发布到 Amazon DynamoDB
<a name="publish-to-amazon-dynamodb"></a>

本教程介绍了一种使用 [Amazon Dynamo](https://aws.amazon.com/dynamodb/) DB 存储数据的便捷方法，无需重复查询 API 即可更轻松地访问历史资产数据。 AWS IoT SiteWise 完成本教程后，您可以创建自定义软件以使用资产数据，例如整个风电场的实时风速和风向图。如果您希望在未实施自定义软件解决方案的情况下监控和可视化数据，请参阅[使用监控数据 AWS IoT SiteWise Monitor](monitor-data.md)。

在本教程中，您将在提供风力发电场示例数据集的 AWS IoT SiteWise 演示基础上进行构建。您可以配置从风电场演示的属性值更新，通过 AWS IoT Core 规则将数据发送到您创建的 DynamoDB 表。启用属性值更新后， AWS IoT SiteWise 会以 MQTT 消息的 AWS IoT Core 形式将您的数据发送到。然后，根据这些消息的内容定义执行操作（例如 DynamoDB 操作）的 AWS IoT 核心规则。有关更多信息，请参阅 [与其他 AWS 服务互动](interact-with-other-services.md)。

**Topics**
+ [先决条件](#dynamodb-tutorial-prerequisites)
+ [步骤 1：配置 AWS IoT SiteWise 以发布属性值更新](#dynamodb-tutorial-enable-value-notifications)
+ [第 2 步：在 C AWS IoT ore 中创建规则](#dynamodb-tutorial-create-iot-rule)
+ [步骤 3：配置 DynamoDB 规则操作](#dynamodb-tutorial-configure-rule-action)
+ [步骤 4：在 DynamoDB 中浏览数据](#dynamodb-tutorial-explore-dynamodb-data)
+ [清理 资源](#dynamodb-tutorial-clean-up-resources)
+ [其他资源](#dynamodb-tutorial-additional-resources)

## 先决条件
<a name="dynamodb-tutorial-prerequisites"></a>

要完成本教程，您需要：
+ 一个 AWS 账户。如果没有，请参阅[设置一个 AWS 账户](getting-started.md#set-up-aws-account)。
+ 一台运行 Windows、macOS、Linux 或 Unix 的开发计算机，用于访问。 AWS 管理控制台有关更多信息，请参阅 [What is the AWS 管理控制台?](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/what-is.html)
+ 具有管理员权限的 AWS Identity and Access Management (IAM) 用户。有关详细说明，请参阅[如何 AWS IoT SiteWise 与 IAM 配合使用](security_iam_service-with-iam.md)。
+ 正在运行的 AWS IoT SiteWise 演示。有关更多信息，请参阅 [使用演 AWS IoT SiteWise 示](getting-started-demo.md)。

**注意**  
本教程要求使用中创建的资源[使用演 AWS IoT SiteWise 示](getting-started-demo.md)。在继续本教程之前，必须先完成本教程。

**重要**  
在完成本教程之前，请保留所有演示资源。删除任何组件都可能会中断演示的功能并影响您完成本教程的能力。

## 步骤 1：配置 AWS IoT SiteWise 以发布属性值更新
<a name="dynamodb-tutorial-enable-value-notifications"></a>

在该过程中，您在演示涡轮机资产的 **Wind Speed** 属性上启用属性值通知。启用属性值通知后，在 MQTT 消息中将每个值更新 AWS IoT SiteWise 发布到 AWS IoT Core。

**在资产属性上启用属性值更新通知**

1. 登录 [AWS IoT SiteWise 控制台](https://console.aws.amazon.com/iotsitewise/)。

1. 查看支持的[AWS IoT SiteWise 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html)，必要时切换 AWS 区域。 AWS IoT SiteWise 切换到你正在运行 AWS IoT SiteWise 演示的区域。

1. 在左侧导航窗格中，选择 **资产**。

1. 选择 **Demo Wind Farm Asset** 旁边的箭头，展开风电场资产的层次结构。

1. 选择一个演示涡轮机，然后选择 **编辑**。

1. 选择 **测量值**。

1. 将**Wind Speed**酒店的 **MQTT 通知状态**更新为 “已**激活**”。

1. 在页面底部选择 **Save (保存)**。

1. 对于每个演示涡轮机资产，重复步骤 5 至 7。

1. 选择演示涡轮机（例如，**Demo Turbine Asset 1**）。

1. 选择 **测量值**。

1. 选择 **Wind Speed** 属性旁边的复制图标，以将通知主题复制到剪贴板。保存通知主题以在本教程后面使用。您只需记录一个涡轮机中的通知主题。

   通知主题应类似于以下示例。

   ```
   $aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE
   ```

## 第 2 步：在 C AWS IoT ore 中创建规则
<a name="dynamodb-tutorial-create-iot-rule"></a>

在此步骤中，在 AWS IoT Core 中创建一条规则，用于解析属性值通知消息并将数据插入到 Amazon DynamoDB 表中。 AWS IoT 核心规则解析 MQTT 消息，并根据每条消息的内容和主题执行操作。之后，创建带有 DynamoDB 操作的规则，将数据插入到 DynamoDB 表（这是您在本教程中创建的表）中。

**使用 DynamoDB 操作创建规则**

1. 导航至 [AWS IoT 控制台](https://console.aws.amazon.com/iot/)。

1. 在左侧导航窗格中，选择**消息路由**，然后选择**规则**。

1. 选择 **Create rule**（创建规则）。

1. 在 **“指定规则属性**” 下，输入规则的名称和描述。

1. 查找您在本教程前面保存的通知主题。

   ```
   $aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE
   ```

   将主题中的资产 ID（`assets/` 后的 ID）替换为 `+`。这将为所有演示风力涡轮机资产选择风速属性。`+` 主题筛选器接受主题中的单个级别的所有节点。您的主题应类似于以下示例。

   ```
   $aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE
   ```

1. 输入以下规则查询语句。将 `FROM` 部分中的主题替换为您的通知主题。

   ```
   SELECT
     payload.assetId AS asset,
     (SELECT VALUE (value.doubleValue) FROM payload.values) AS windspeed,
     timestamp() AS timestamp
   FROM
     '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' 
   WHERE
     type = 'PropertyValueUpdate'
   ```

1. 在 “**规则操作**” 下，导航至 “**操作 1”**。

1. 在 **“选择操作**” 页面上，选择 **Dynamo DBv2**。这会将消息拆分为 DynamoDB 表的多列

1. 在**表名**下，选择**创建新表**。您可以创建一个 Amazon DynamoDB 表来接收来自规则操作的风速数据。

1. 在 [DynamoDB](https://console.aws.amazon.com/dynamodb/) 控制台的**表**名下，输入您的表的名称。

1. 对于**分区键**，请执行以下操作：

   1. 输入 **timestamp** 以作为分区键。

   1. 选择 **数字** 类型。

   1. 选中 **添加排序键** 复选框。

   1. 输入 **asset** 以作为排序键，并保留默认排序键类型 **字符串**。

1. 选择**创建表**。

1. 返回到具有 **配置操作** 页面的选项卡。

1. 在**附加规则操作**页面上，刷新**表名**列表，然后选择您在上一步中创建的新 DynamoDB 表。

## 步骤 3：配置 DynamoDB 规则操作
<a name="dynamodb-tutorial-configure-rule-action"></a>

在此步骤中，配置 Amazon DynamoDB 规则操作，将属性值更新中的数据插入到新的 DynamoDB 表中。

**配置 DynamoDB 规则操作**

1. 选择**创建角色**以创建一个 IAM 角色，该角色向 AWS IoT 核心授予执行规则操作的访问权限。

1. 输入角色名称，例如`WindSpeedDataRole`。选择**创建角色**。

1. 选择**下一步**。

1. 选择页面底部的**创建**以完成规则的创建。

   将开始在 DynamoDB 表中显示您的演示资产数据。

## 步骤 4：在 DynamoDB 中浏览数据
<a name="dynamodb-tutorial-explore-dynamodb-data"></a>

在此步骤中，在您的新 Amazon DynamoDB 表中浏览演示资产的风速数据。

**在 DynamoDB 中浏览资产数据**

1. 返回到打开了 DynamoDB 表的选项卡。

1. 在之前创建的表中，选择 “**浏览表格项目**” 选项卡以查看表中的数据。如果您没有看到表中的行，请刷新页面。如果在几分钟后没有显示行，请参阅[对规则进行故障排除（DynamoDB）](troubleshoot-rule.md#dynamodb-tutorial-troubleshoot-rule)。

1. 在表的一行中，选择编辑图标以展开数据。

1. 选择 **windspeed** 结构旁边的箭头，以展开风速数据点列表。每个列表都反映了风电场演示发送到 AWS IoT SiteWise 的一批风速数据点。如果您设置规则操作以供自己使用，则可能需要使用不同的数据格式。有关更多信息，请参阅 [在中查询资产属性通知 AWS IoT SiteWise](query-notification-messages.md)。

现在您已经完成了本教程，可以禁用或删除该规则并删除您的 DynamoDB 表，以免产生额外费用。要清理资源，请参阅[清理 资源](#dynamodb-tutorial-clean-up-resources)。

您还可以学习如何创建自定义应用程序来使用和可视化这些数据。有关可视化 AWS IoT SiteWise 数据的指导教程，请参阅[在 Grafana 中可视化和共享数据](visualize-with-grafana.md)。

## 清理 资源
<a name="dynamodb-tutorial-clean-up-resources"></a>

完成本教程后，清理资源以避免产生额外费用。

**要删除演 AWS IoT SiteWise 示**

1. 导航至 [AWS IoT SiteWise 控制台](https://console.aws.amazon.com/iotsitewise/)。

1. 在页面的右上角，选择**删除**演示。

1. 在确认对话框中，输入 **DELETE**，然后选择 **删除**。

有关更多信息，请参阅 [删除演 AWS IoT SiteWise 示](getting-started-demo.md#delete-getting-started-demo)。

使用以下过程禁用属性值更新通知（如果您没有删除演示）、禁用或删除您的 AWS IoT 规则，以及删除您的 DynamoDB 表。

**禁用资产属性上的属性值更新通知**

1. 导航至 [AWS IoT SiteWise 控制台](https://console.aws.amazon.com/iotsitewise/)。

1. 在左侧导航窗格中，选择 **资产**。

1. 选择 **Demo Wind Farm Asset** 旁边的箭头，展开风电场资产的层次结构。

1. 选择一个演示涡轮机，然后选择 **编辑**。

1. 将**Wind Speed**酒店的**通知状态**更新为 “**非活动**”。

1. 选择页面底部的 **保存资产**。

1. 对于每个演示涡轮机资产，重复步骤 4 至 6。

**禁用或删除中的规则 AWS IoT Core**

1. 导航至 [AWS IoT 控制台](https://console.aws.amazon.com/iot/)。

1. 在左侧导航窗格中，选择**消息路由**，然后选择**规则**。

1. 选择您的规则，然后选择**删除**。

1. 在确认对话框中，键入规则名称，然后选择删除。

**删除 DynamoDB 表**

1. 导航到 [DynamoDB 控制台](https://console.aws.amazon.com/dynamodb/)。

1. 在左侧导航窗格中，选择 **表**。

1. 例如，选择您之前创建的表`WindSpeedData`。

1. 选择**删除**。

1. 在确认对话框中**confirm**，输入删除表。

## 其他资源
<a name="dynamodb-tutorial-additional-resources"></a>

有关使用 DynamoDB 和监控数据的更多信息，请参阅以下资源：
+ [在 *DynamoDB CloudWatch 开发者指南*中使用监控指标](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Monitoring-metrics-with-Amazon-CloudWatch.html)
+ [《*DynamoDB* 开发者指南》中有关有效设计和使用分区键的最佳实践](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html)
+ 《*AWS IoT 开发者指南*》 AWS IoT中的@@ [规则](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)
+ [在 Grafana 中可视化和共享数据](visualize-with-grafana.md)