在边缘使用 AWS IoT Greengrass 开发远程工作监控应用程序第一部分 官方博客
许多现代工业操作因效率和安全需求,要求进行大量监控和实时决策。为降低意外的网络中断和 IoT 数据处理延迟,边缘计算成为一个理想的选择。边缘计算是一种安装在网络边缘的微型计算/存储设备系统,能有效地进行本地数据处理。对于远程电厂、油井和工厂生产线等工业现场,具备用户界面UI组件的边缘应用能自动化局部操作,并提升工作人员的体验。
传统的边缘 IoT 应用可能面临一些挑战,例如缺乏集中管理和较长的开发周期。然而,AWS IoT Greengrass V2 是 AWS 最新的开源边缘运行时,能有效解决上述问题。使用 AWS IoT Greengrass,开发者能访问预构建的软件组件,进一步提升应用的模组化,并加快开发进度。此外,AWS IoT Greengrass 提供的集中安全措施透过内建的 日志管理器 方便边缘组件的部署,并与 AWS IoT设备管理 集成,可大规模监控和管理设备。
自 AWS IoT Greengrass V2 上线以来,AWS 积极帮助合作伙伴 TensorIoT 开发多种功能应用,涵盖连接工业系统和 IoT 设备、低延迟数据处理及分析以获取运营见解、以及边缘的人工智能AI/机器学习ML应用。本文将展示一个联合开发的边缘 UI 应用,该应用包含多个自定义 AWS IoT Greengrass 元件,以实现灵活的数据摄取和 IoT 数据的分析与可视化。
本博客将介绍如何利用这个边缘 UI 应用来解决以下远程工业工作监控的使用案例:
轻蜂加速器下载安卓版工厂操作员可能会有某些报告或 IoT 工作元数据,无法通过预定义的 IoT 数据模型上传至云端。这个 UI 提供了一个文件上传页面,使用前端的 AWS IoT Greengrass V2 元件来上传 JSON 文件,并将文件数据发送到后端元件。后端元件再将数据发送到 AWS IoT Greengrass V2 的预构建组件: 流管理器。流管理器元件可以更轻松且可靠地将大量 IoT 数据从边缘传输到云端。作为预构建组件,流管理器提供灵活的云端目标,包括 Amazon S3、Amazon Kinesis、AWS IoT SiteWise 和 AWS IoT Analytics。它旨在应对不稳定或有限连接的环境。用户可以定义多个数据导出配置,用以处理边缘设备连接或断开的情况,也可以设定带宽使用、超时行为及优先级,以便在恢复网络连接时优先导出关键数据。
这个流管理器元件可以实现以下两个目标:
本地数据存储;从本地边缘设备向 AWS 发送数据。在这个使用案例中,未映射的数据将存储在 Amazon S3。使用多种数据分析工具例如 Amazon Glue 和 Amazon Athena能灵活分析这些元数据与其他 IoT 时间序列数据。
操作员需要以近实时的方式对流式 IoT 数据进行判断。如果能在一个具有低延迟的互动式 UI 应用中展示这些数据,将有助于操作员做出正确的决策。在此博客的第二部分,你将学习如何在边缘构建一个 UI 应用来显示流式 IoT 工作数据。
以下图片强调了 AWS 专业服务和 TensorIoT 开发的 UI 应用。使用这个应用,你可以远程监察近实时的 IoT 工作状态。
随后的步骤将详细说明如何使用 AWS IoT Greengrass V2 开发此边缘 UI 应用。根据本文提供的指引,你不需要专业的数据分析或 IoT 数据处理经验即可建立此解决方案。
时间需求30 分钟完成时间120 分钟预估成本约 2发表时学习水平高级300 级使用的服务Amazon EC2 执行个体、AWS Greengrass V2、Amazon S3、Amazon CloudWatch下面是此工作流程在边缘的解决方案架构。在这篇两部分的博客中,将构建四个用户定义的元件:
一个使用 ReactJS 写成的前端 AWS IoT Greengrass UI 元件,包含文章中两个使用案例的所有 UI 页面;一个用 Python 编写的 JSON 文件上传组件,从前端 UI 收集文件数据,并通过流管理器将 JSON 信息发送到 Amazon S3;一个每 10 秒发送一次消息的虚拟发布器,将消息通过 IPC 协议发送到 WebSocket 元件;一个 WebSocket 元件通过 WebSocket 伺服器将 IoT 消息从虚拟发布器元件发送到 UI 元件。除了这些自定义元件,该解决方案还部署了两个预构建的 AWS IoT Greengrass V2 元件:
应用程序监控的日志管理器边缘设备数据导出的流管理器在此博客中,使用 Ubuntu 2204 LTS EC2 执行个体 语言模拟 AWS 的边缘设备。
在进行这次步骤时,你需要以下前置条件:
一个 AWS 账户。如果没有 AWS 账户,请 按照指示 创建一个帐户。具有管理员访问权限的用户角色此角色的服务访问权限可以在将工作流程推向生产时进一步受限。最新的现代浏览器最新版本 Firefox 或 Chrome。构建此解决方案不需要专业知识,但基础的 Linux 和 Python 知识将有所帮助。这篇两部分的帖子将包含以下步骤,并提供开发此解决方案的详细说明:
第一步:建立 Amazon S3 桶首先,使用 AWS 管理控制台 在 Amazon S3 中创建一个桶。请参考 这些指示 来创建 Amazon S3 桶并记下桶名。你需要在本步骤的第 4 步中将此 Amazon S3 参数提供给 JSON 文件上传组件。
接著,使用类似步骤为保存边缘组件文档创建一个 Amazon S3 桶。请记下这个 Amazon S3 桶,以便在组件部署步骤中使用。
第二步:在 Amazon EC2 执行个体上设置 AWS IoT Greengrass V2在 Amazon EC2 执行个体上安装依赖项。在 AWS 账户中设置类型为 t2medium 的 Amazon EC2 执行个体,并使用 Ubuntu 2204 基础映像,并使用以下用户数据:
bash sudo su aptget update aptget install y python3pip zip jq git clone https//githubcom/aws/awsiotdevicesdkpythonv2git python3 m pip install /awsiotdevicesdkpythonv2
在 Amazon EC2 执行个体状态变为运行后,参考 这些指示 来设置 AWS Session Manager 访问角色,以便无需 SSH 就能访问此 Amazon EC2 执行个体。接下来,使用 这篇博客 中的连接到 Amazon EC2 执行个体的 AWS Systems Manager Session Manager (SSM)部分来访问 Amazon EC2 执行个体。最后,在 Amazon EC2 执行个体上安装 AWS 命令行界面CLIV2:
bash wget https//awscliamazonawscom/awscliexelinuxx8664zip unzip awscliexelinuxx8664zip sudo /aws/install
在 Amazon EC2 执行个体上安装 AWS IoT Greengrass。可以参考 这篇博客 中的在 Amazon EC2 执行个体上安装 Greengrass部分来安装 AWS IoT Greengrass 至边缘设备。在启动以下自定义元件之前,请确保将必要的 Amazon S3 访问策略如 PutObject 和 GetObject添加到 AWS IoT Greengrass 角色别名,以便这个 IoT 设备可以根据 这些指示 访问 Amazon S3。
第三步:启动 UI 元件元件是可以方便地创建复杂工作流程的构建模块,例如本地数据处理、消息传递、数据管理和机器学习推理。依赖 AWS IoT Greengrass V2 的最新 IoT Thing 群组定义,UI 设计者所做的任何更新都可以通过修订元件部署,快速编排到所有目标。
以下步骤显示如何将先前打包的 ReactJS UI 代码作为边缘元件部署在 AWS Greengrass V2 上:

先变更目录到 components/edgeui/awsggdeploy ,在你克隆 GIT 仓库 到 Amazon EC2 执行个体后的目录。
修改部署脚本 deployedgesh,在 setEnv() 部分将以下占位符替换为自订的值:
bash YOURAWSACCOUNTNUMBER YOURAWSREGION ROLEARN S3BUCKET for edge component artifacts
按 CtrlX,然后按 Y 保存修改的 deploysh 文件,并保持原文件名。
运行以下脚本以部署此元件:bash export AWSACCESSKEYID=REPLACEWITHYOURAWSACCESSKEYID export AWSSECRETACCESSKEY=REPLACEWITHYOURAWSSECRETACCESSKEY export AWSSESSIONTOKEN=REPLACEWITHYOURAWSSESSIONTOKEN chmod 744 deployedgesh /deployedgesh
此 bash 脚本大约需要 90 秒完成。执行完成后,请确认 AWS IoT Greengrass V2 控制台中创建了以下元件,并且其最新状态显示为 运行中:
请注意,这个 UI 元件包含了本文两个使用案例中的所有 UI 页面。
第四步:启动 JSON 文件上传应用接下来,可以启动 JSON 文件上传元件。此元件使用 Flask 应用来接收来自前端 UI 元件的 JSON 文件数据。一旦接收到 JSON 文件,它将通过流管理器元件将 JSON 文件发送到 Amazon S3。流管理器元件将通过在配方文件中将其定义为依赖元件来启动与文件上传元件一同启动:
yamlComponentDependencies awsgreengrassStreamManager VersionRequirement 200 awsgreengrassTokenExchangeService VersionRequirement 200 DependencyType HARD
要启动 JSON 文件上传元件,可以使用与 第 3 步 相同的步骤,在 components/comfileUploader/awsggdeploy 文件夹中修改部署脚本 deployedgesh。
接下来,在同一目录中修改 recipefiletemplateyaml 文件,并在 Run 命令的 Manifests 部分中添加你在 第 1 步 设置的 S3 桶名参数:
yamlRun Script python3 u {artifactsdecompressedPath}/artifactszipfilename/artifactsentryfile b=Replace with your Amazon S3 bucket name
请将预设的