作者:Kaarthiik Thota 和 Anshu Vajpayee 日期:2023年10月24日相关链接: Amazon DocumentDB、Amazon Managed Streaming for Apache Kafka (Amazon MSK)、AWS IoT Core
在本文中,我们将介绍如何构建一个物联网IoT传感器网络解决方案,借助 AWS IoT Core 处理 IoT 传感器数据,并使用 Amazon DocumentDB与 MongoDB 兼容 进行存储。此解决方案支持动态模式,高效处理JSON数据,帮助用户完成特定的业务需求,如提高农业产量、增强车辆健康监测等。
在这篇文章中,我们讨论如何构建一个物联网IoT传感器网络解决方案,通过 AWS IoT Core 处理 IoT 传感器数据,并使用 Amazon DocumentDB与 MongoDB 兼容 存储这些数据。
IoT 传感器网络由多个不同制造商的传感器和其他设备如 RFID 读卡器组成,这些设备生成具有多样属性的 JSON 数据,存储进数据库以供分析。由于模式是动态的,且可能随时间演变,因此建议使用支持灵活数据模型的数据库,以简化开发并降低成本。Amazon DocumentDB 是用于此用例的理想数据库服务,因为它支持灵活的模式设计,并针对大规模管理 JSON 工作负载进行了优化。
Amazon DocumentDB 是一种快速、可扩展、高可用性的完全托管文档数据库服务,支持 MongoDB 工作负载。作为文档数据库,Amazon DocumentDB 可以轻松存储、索引和查询 JSON 数据。
AWS IoT Core 是一个托管的云平台,使连接的设备能够轻松安全地与云应用程序和其他设备进行交互。AWS IoT Core 能够支持数十亿个设备,并处理数万亿条消息。它还可以确保可靠安全地处理和路由这些消息到 AWS 端点和其他设备。
通过使用 Amazon DocumentDB 和 AWS IoT Core,您可以构建一个高效的 IoT 传感器网络,以应对多种挑战,如:
车辆制造商 能够收集有关车辆健康的信息,以识别并通知司机需要进行的服务保险公司 可以收集驾驶性能数据,为遵循安全驾驶行为的客户提供具有成本效益的保险政策智能家居的主妇 可以通过使用摄像头和恒温器来检测人类活动,增强安全性并提高能效农民 可以通过部署土壤湿度传感器,使用高效的灌溉方法来实现更好的产量,同时降低成本从高层来看,该解决方案包含三个主要过程:
数据采集:IoT 传感器和设备捕获信息并将其发送到 AWS 云。这些设备可以依据类型收集不同的信息,并且以不同的频率发送。数据摄取和存储:AWS IoT Core 服务从这些设备中摄取信息,并将其存储在诸如 Amazon DocumentDB 的数据存储中。数据处理:不同的应用程序利用存储的数据进行处理,例如创建仪表板和可视化,执行实时分析,进行事件处理和报告等。此外,进一步的数据可以发送到下游系统进行集成。通过机器学习可以进行更高级的分析,以生成预测和异常检测模型,从而采取进一步的纠正措施。在本文中,我们将展示如何构建一个智能农场面向农业的 IoT 传感器网络,使农民能够通过对气象、土壤和作物的实时数据分析,优化作物产量并最小化环境影响。
以下是 完整解决方案 的参考图。安装在智能农场的传感器将数据安全地发送到 AWS IoT Core。根据预定义条件触发的 AWS IoT 规则 将数据发送到 Amazon Managed Streaming for Apache Kafka (Amazon MSK)。Kafka Connector 从 Amazon MSK 读取数据并将其存储至 Amazon DocumentDB。智能农场的容器化微服务处理接收到的传感器和第三方数据,并向农民生成推荐。
在本文中,我们将专注于如何使用 AWS IoT Core、Amazon MSK 和 MSK Connect 上的 Kafka 连接器,将 IoT 数据迁移到 Amazon DocumentDB。
为了方便您跟随本文,您需要以下资源:
飞鸟加速器一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例IoT 传感器我们使用虚拟设备替代实际传感器一个 IoT 规则,可以将数据从 AWS IoT Core 发送到 Amazon MSK。一个 Amazon DocumentDB 集群一个 MSK 集群在 MSK Connect 上的 MongoDB Kafka 连接器请完成本节中的步骤以创建这些资源。
您可以选择现有的 EC2 实例或创建新的实例。此 EC2 实例用于运行虚拟设备并连接到 Amazon DocumentDB。完成以下步骤以配置该实例:
确保实例在同一 VPC 中并且与 Amazon DocumentDB 和 MSK 集群共享相同的安全组。这些服务也可以部署在不同的安全组中,需相应调整入站规则。配置 EC2 实例安全组以允许与 MSK 集群9098 和 9096 端口及 Amazon DocumentDB 集群27017 端口的入站连接。安装 mongo shell:
bashecho e [mongodborg40] nname=MongoDB Repositorynbaseurl=https//repomongodborg/yum/amazon/201303/mongodborg/40/x8664/ngpgcheck=1 nenabled=1 ngpgkey=https//wwwmongodborg/static/pgp/server40asc sudo tee /etc/yumreposd/mongodborg40repo
在 EC2 实例上安装 Java 和 Git:
bashsudo yum install y java11amazoncorrettoheadlesssudo yum install git y
AWS IoT Core 提供一个注册表,帮助您管理 “物品”,这些物品表示特定的设备或逻辑实体。可以是物理设备或传感器例如,灯泡或墙上的开关。它也可以是一个应用程序实例或与 AWS IoT Core 不连接的物理实体。

在本文中,您将创建一个虚拟设备,以便从 EC2 实例运行。它将向 AWS IoT Core 发送数据,然后存储在 Amazon DocumentDB中。
完成以下步骤:
在 AWS IoT Core 控制台 中,选择 连接一个设备。在 准备您的设备 部分,无需采取任何行动,选择 下一步。在 注册和保护您的设备 部分,选择 创建新物品。在 物品名称 中输入您的物品名称,然后选择 下一步。在 选择平台和 SDK 部分,将平台选择为 Linux/MacOS,AWS IoT 设备 SDK 的语言选择 Nodejs,然后选择 下一步。在 下载连接工具包 部分,选择 下载连接工具包。将连接工具包上传到 EC2 实例。您可以使用现有的 MSK 集群或创建新的 MSK 提供集群。如果您创建新的集群,请按照 如何将 AWS IoT Core 与 Amazon MSK 集成 中的步骤操作。
集群应部署在与 Amazon DocumentDB 集群相同的 VPC 中,并共享相同的安全组。确保遵循上述步骤,在 MSK 集群的安全设置中设置 SASL/SCRAM 身份验证,并在 AWS Secrets Manager 中创建凭据,并使用客户管理的 KMS 密钥将凭据附加到 MSK 集群。
AWS IoT Core 规则支持 SASL/SCRAM 身份验证,MSK Connect 支持 IAM 身份验证。
MSK 集群的安全设置应更新为同时使用 SASL/SCRAM 身份验证和 AWS 身份与访问管理 (IAM) 访问控制。
在 IAM 控制台中,选择您的 MSK 集群。在 操作 中,选择编辑安全设置并选择基于 IAM 角色的身份验证。点击 保存更改。更新安全设置大约需要 1015 分钟。在创建 AWS IoT 规则之前,您需要设置必要的 IAM 资源和 VPC 配置。完成以下步骤:
创建 IAM 策略:
在 IAM 控制台中,选择导航窗格中的 策略。选择 创建策略。创建一个客户管理策略,名称为 IoTCorePolicy,使用以下文档:json{ Version 20121017 Statement [ { Effect Allow Action [ ec2CreateNetworkInterface ec2DescribeNetworkInterfaces ec2CreateNetworkInterfacePermission ec2DeleteNetworkInterface ec2DescribeSubnets ec2DescribeVpcs ec2DescribeVpcAttribute ec2DescribeSecurityGroups secretsmanager ] Resource } ]}
创建 IAM 角色 IOTCoreRole 并附加上述策略 IoTCorePolicy。 在 IAM 控制台中,选择导航窗格中的 角色。选择 创建角色。在选择受信任实体时,选择 自定义信任策略。添加以下信任策略:json{ Version20121017 Statement[{ Effect Allow Principal { Service iotamazonawscom } Action stsAssumeRole }]}
选择 下一步。在 添加权限 中,选择 IOTCorePolicy。输入角色名称为 IOTCoreRole。选择 创建角色。将 IAM 角色 IOTCoreRole 的访问权限添加到您为 MSK 集群创建的 AWS Key Management Service (AWS KMS) 密钥中,以供 SASL/SCRAM 身份验证使用:
在 AWS KMS 控制台中,导航到您之前创建的 KMS 密钥。在 密钥用户 中,添加 IAM 角色 IOTCoreRole。创建 AWS IoT 规则的 VPC 目标:
在 AWS IoT Core 控制台中,导航窗格下的 消息路由 中,选择 目标。选择 创建目标,再选择 创建 VPC 目标。选择用于 MSK 集群的 VPC 和子网。选择用于 MSK 集群的安全组。选择在前一步创建的角色 IOTCoreRole。选择 创建。现在您准备好创建 AWS IoT 规则。
创建 AWS IoT 规则
在AWS IoT Core 控制台,导航窗格下的 消息路由 中,选择 创建规则。在 规则属性 部分,添加规则名称。在 配置 SQL 语句 部分,添加 SQL 语句 select from sdk/test/js‘,然后选择 下一步。在 附加规则操作 部分,选择规则操作 Apache Kafka 集群。提供您之前创建的 VPC 目标。指定 Kafka 主题为 iottopic。指定 MSK 集群的 SCRAM/SASL 引导服务器。您可以在 MSK 集群控制台的客户端信息中查看引导服务器 URL。指定 securityprotocol 为 SSLSASL,saslmechanism 为 SCRAMSHA512。在 saslscramusername 和 saslscrampassword 中指定以下变量,替换您之前创建的密钥名和角色名:plaintext{getsecret(lt secret namegt SecretString username arnawsiamlt accidgtrole/lt rolenamegt)}{getsecret(lt secret namegt SecretString password arnawsiamlt accidgtrole/lt rolenamegt)}
您可以使用现有的实例集群或创建新的 Amazon DocumentDB 实例集群。您也可以使用 Amazon DocumentDB 弹性集群,其能够灵活扩展以处理每秒百万次读取和写入以及数以 PB 计的存储。
您需要 MongoDB Kafka 连接器将数据从 MSK 主题转移到 Amazon DocumentDB。通过按照 使用 Amazon DocumentDB、Amazon MSK Serverless 和 Amazon MSK Connect 进行数据流处理 中的汇流用例来配置 MongoDB Kafka 连接器。
完成以下步骤以创建 Kafka 主题:
登录到您的 EC2 实例,下载 Apache Kafka 的二进制发行版并解压到 localkafka 中:
bashmkdir /localkafkacd /localkafka/cp /usr/lib/jvm/java11amazoncorrettox8664/lib/security/cacerts kafkaiamtruststorejkswget https//dlcdnapacheorg/kafka/341/kafka213341tgztar xzf kafka213341tgzln sfn kafka213341 kafka
在 /localkafka/kafka/config/ 目录下,创建一个 JAAS 配置文件,其中包含存储在您的密钥中的用户凭证
2026-01-27 12:38:52
2026-01-27 13:52:54