Category: 物联网


白皮书:物联网的核心原则

摘要

本文概述了在制定物联网 (IoT) 策略时应考虑的核心原则。本文帮助客户了解 Amazon Web Services (AWS) 的好处以及 AWS 云平台如何成为支持 IoT 解决方案核心原则的关键组件。本文还简要介绍了应作为整个 IoT 策略一部分的 AWS
服务。本文针对的是正在了解物联网平台的决策者。

概述

物联网 (IoT) 策略的核心价值主张之一是让企业能够洞察以前不了解的周边环境。但企业若想制定 IoT 策略,则需要搭建符合 IoT 解决方案的基本原则的平台。

AWS 信奉一些自由原则,这些原则能为企业带来云的组织和经济收益。这些自由正是上百万客户使用 AWS 平台支持几乎所有云工作负载的原因。这些自由还是 AWS 成为跨商业、消费品和工业解决方案的任何物联网策略的主要催化剂
的原因。

采用这些解决方案的 AWS 客户已经确定了一些对所有 IoT 平台的成功都至关重要的核心原则。这些核心原则是敏捷性、可扩展性、成本和安全性;研究表明,它们对于 IoT 策略的长期成功十分重要。

本白皮书将这些原则定义为:

  • 敏捷性 — 不受限制地快速分析、执行和构建业务和技术计划
  • 可扩展性 — 在区域或全球范围内无缝地扩展基础设施以满足运营需求
  • 成本 — 了解和控制运营 IoT 平台的成本
  • 安全性 — 通过云保护来自设备的通信,同时保持合规性和快速迭代

通过使用 AWS 平台,公司能够基于世界上最安全的计算基础设施,构建可进行
扩展以适应设备呈指数级增长并具有管理成本功能的敏捷解决方案。选择具有这些自由的平台并宣传这些核心原则的公司将改进对其业务的独特优势的组织关注,
提高在物联网内实施解决方案带来的战略性价值。

物联网的核心原则

敏捷性

公司在制定 IoT 解决方案时追求的首要收益是高效量化商机的能力。这些商机源自可靠的传感器数据、远程诊断以及用户与设备之间的远程命令和控制。能有效收集这些指标数据的公司可以根据其 IoT 数据探索不同的业务前景。例如,制造商可以构建预测性分析解决方案以持续测量、测试和调整理想的产品维护周期。IoT 生命周期分为多个阶段,涉及采购、制造、装载、测试、部署和管理大批物理设备。在开发物理设备时,瀑布式的开发流程可能降低业务的敏捷性。这种方式加上大规模开发和部署物理资产的前期硬件成本,通常导致必须将设备长时间留在现场才能实现预期的投资回报 (ROI)。

鉴于公司当今面对的挑战和机会不断增加,公司的 IT 部门已成为支持业务绩效、产品开发和运营的独特竞争优势。为了让公司的 IoT 策略成为一项竞争优势,
IT部门需要依靠部署丰富的工具来提高整个 IoT 解决方案的互操作性以及各种设备之间的互操作性。公司若能在瀑布式开发流程与敏捷软件开发之间成功地实现平衡,就能持续优化 IoT 解决方案产生的价值。

可扩展性和全球分布

除了呈指数级增长的互联设备数量之外,物联网中的每个“物(互联设备)”还将传输大量数据,因而它们需要可靠的连接和持久的存储。在云平台出现之前,IT部门通常会采购额外的硬件并维护复杂配置、大量的存储(事实上这些存储并未得到充分的利用)来处理由设备传输的不断增加的数据 (也称为遥测)。在部署 IoT 后,IT部门将面临管理、监控和维护这些互联设备海量网络连接的挑战。

除了在区域性位置扩展解决方案之外,IoT 解决方案还需要能够在全球范围和不同的物理位置进行扩展。IoT 解决方案应该部署在多个物理位置以实现全球企业解决方案的业务目标,如数据合规、数据主权以及降低通信延迟以获得现场设备的更好的响应。

成本

通常,IoT 解决方案的最大价值是从设备得到数据,这些数据是设备生成和发送的遥测数据以及遥测的上下文相关数据。而建立本地基础设施则需要硬件采购上的前期资本投入,这可能是与设备在未来一段时间从遥测数据产生价值不直接相关的大量固定开支。对于接收处理遥测数据这一需求以及遥测数据在将来产生的不确定的价值,要实现两者之间的平衡,IoT 策略应该利用弹性、可扩展的云平台。利用 AWS 平台,公司只需为其使用的服务付费,无需签订长期合同。通过利用灵活、基于使用量的定价模式,IoT 解决方案和相关基础设施的成本可根据通过引入、处理、存储和分析由同一 IoT 解决方案收到的遥测提供的业务价值来评估。

安全性

IoT 解决方案的基础始于安全性、终于安全性。由于设备可能发送大量敏感数据,且 IoT 应用程序的最终用户还可能直接控制设备,因此物理的安全性必须是普遍的设计要求。设计 IoT 解决方案时不应只考虑安全性,还应考虑渗透到解决方案的每个层次的安全控制。安全性并不是一个一成不变的公式;IoT 应用程序必须能够对安全最佳实践进行持续建模、监控和迭代。在物联网中,受攻击的代价与传统
的 Web 基础设施有所不同。普适计算的普遍性意味着 IoT 漏洞可能招来导致人身伤亡的攻击,例如对受损的汽油管道或电网的控制系统的攻击。

IoT 安全性的竞争动力是物理设备的生命周期以及用于传感器、微控制器、促动器和嵌入式库的约束硬件。这些制约因素可能限制每台设备可实现的安全功能。面对这些附加动力,IoT 解决方案必须持续改变其架构、固件和软件才能在不断变化的安全格局中保持领先。尽管设备的制约因素可能带来更高的风险、障碍以及在
安全性与成本之间做出权衡取舍,但构建安全的 IoT 解决方案必须是任何组织
的主要目标。

适用于 IoT 解决方案的 AWS 服务

AWS 平台为执行敏捷、可扩展、安全和经济高效的 IoT 策略提供了基础。为了
实现 IoT 给公司带来的业务价值,客户应评估通常在大型分布式 IoT 部署中使用的 AWS 服务的深度和广度。AWS 提供了用于加快产品上市速度的各种服务:从适用于嵌入式软件的 SDK 到实时数据处理和事件推动的计算服务。

在以下章节中,我们将探讨 IoT 应用程序中最常用的 AWS 服务以及这些服务与 IoT 解决方案的核心原则如何对应。

AWS IoT

物联网不能离开“物” 而存在。每个 IoT 解决方案都必须先建立连接才能开始与
设备交互。AWS IoT 是一项 AWS 托管服务,用于为应用程序解决连接、管理和操作大批设备的难题。AWS IoT 中的连接可扩展性和数据传输安全机制作为 IoT 解决方案的一部分为 IoT 通信提供了基础。当数据发送到 AWS IoT 后,
解决方案能够充分利用涵盖数据库、移动服务、大数据、分析、机器学习等方面
的 AWS 服务生态系统。

设备网关

设备网关负责维护 IoT 解决方案中的所有互联设备的会话。AWS IoT 设备网关支持通过 MQTT、WebSockets 和 HTTP 实现的互联设备与 AWS 平台之间的安全、双向通信。MQTT 和 HTTP 等通信协议使公司能够利用行业标准协议,而不必使用会限制将来的互操作性的专属协议。

作为发布和订阅协议,MQTT 从制定伊始就鼓励可扩展、容错的通信模式并支持设备与设备网关之间的各种通信选项。这包括从两台设备之间的通信到可让一台设备通过共享主题将消息发送到大量设备的广播模式等各种消息模式。此外,MQTT 协议提供不同级别的服务质量 (QoS) 以控制消息在发布给订阅者时的质量(包括再传输和交付机制)。采用 QoS 的发布和订阅的组合不仅让 IoT 解决方案能够控制设备在解决方案中的交互方式,还提高了在出现网络或设备故障时交付、确认和保留消息时的可预测性。

设备影子、设备注册表和 规则引擎

AWS IoT 包含对构建可靠的 IoT 应用程序至关重要的附加功能。AWS IoT 服务
包含 规则引擎,它能够在设备网关接收设备到消息时筛选、转换和转发这些消息。规则引擎利用基于 SQL 的语法从消息负载中选择数据并根据 IoT 数据的特征触发操作。AWS IoT 还提供了维持设备当前状态的虚拟表示-设备影子。设备影子充当一个消息通道,用于将命令可靠地发送到设备并将设备最近的已知状态存储在 AWS 平台中。

为了管理大批设备的生命周期,AWS IoT 提供了设备注册表。设备注册表是一个集中的位置,用于存储和查询与每个“物”相关联的预定义的属性。设备注册表支持创建用于控制设备、设备影子、权限和身份之间关系的 IoT 解决方案整体管理视图。

安全和身份

对于互联设备,应在整个硬件和软件开发生命周期中使用IoT 平台所提供的身份识别、最小特权、加密和授权的功能。AWS IoT 通过使用传输层安全协议 (TLS) (支持大多数主流密码包) 对和该服务通信的流量进行加密。为了识别设备身份,AWS IoT 要求互联设备使用 X.509 证书进行身份验证。每个证书必须预先配置、激活并安装在设备上,然后才能与 AWS IoT 的有效身份相关联。为了支持设备的这种身份和访问的分离,AWS IoT 提供了针对设备身份的 IoT 策略。AWS IoT 还可针对 AWS 用户、组和角色利用 AWS Identity and Access Management (AWS IAM) 策略。通过使用 IoT 策略,公司可以控制(允许和拒绝)每台指定身份的设备进行的通信。AWS IoT 策略、证书和 AWS IAM 可为公司在 AWS IoT 生态系统中的每台设备通信通道显式配置白名单。

事件驱动的服务

为了让 IoT 解决方案符合可扩展性和灵活性的原则,公司应该引入事件驱动机制。在IoT 解决方案中触发的事件,事件驱动机制通过对事件的创建、存储、消费和响应来建立可扩展性和解耦的通信。首先,应当对IoT 解决方案中生成的消息进行归类并将其映射到一系列事件。然后将这些事件与业务逻辑关联起来,这些业务逻辑在执行过程中还可能会触发更多的事件。AWS 平台提供很多种应用服务,使用这些应用服务可以帮助其构建分布式的事件驱动的IoT架构。

基本上,事件驱动架构依靠的是对订阅者生态系统的持久存储事件和发送事件的能力。为了支持解耦事件的编排,AWS 平台提供了多项专门用于可靠的事件存储和高度可扩展的事件驱动型计算的应用服务。事件推动的 IoT 解决方案可以使用 Amazon Simple Queue Service (Amazon SQS)、Amazon Simple Notification Service (Amazon SNS) 和 AWS Lambda 作为用于创建简单或者复杂事件工作流的基础应用组件。Amazon SQS 是一项快速、持久、可扩展且完全托管的消息队列服务。Amazon SNS 是一项 Web 服务,用于从应用程序发布消息并立即将它们交付到订阅者或其他应用程序。AWS Lambda 用于以事件响应方式触发代码的运行,而底层计算资源是全托管的。AWS Lambda 可直接从其他 AWS 服务接收和响应事件。在事件驱动的 IoT 架构中,当IoT 系统上下文中有相关事件发生时就会触发AWS Lambda以执行相应的业务逻辑。

AWS 服务 (如 Amazon SQS、Amazon SNS 和 AWS Lambda) 可将事件的消费从对消息的处理过程和业务逻辑分离开。这种分离为端到端解决方案带来了灵活性和敏捷性。这种分离让您可以快速修改事件触发逻辑或用于聚合系统各个部分之间的上下文相关数据的逻辑。最后,这种分离支持将变化引入 IoT 解决方案而不会阻止在最终设备和 AWS 平台之间发送的数据的持续传输。

自动化和开发运营

在 IoT 解决方案中,应用程序的初始发布便是长期持续优化业务逻辑的IoT策略的起点。在这之后,您的大部分时间和精力便可集中在为你的IoT解决方案业务增加新特性上。基于“在整个解决方案生命周期中保持敏捷性”这一原则,客户应评估支持根据业务需求的变化而快速开发和部署的服务。与DevOps技术仅用于后端服务器的传统Web架构不同的是,IoT 应用程序还需要一种能力 — 不断对各种全球互联设备迭代变化的能力。利用 AWS 平台,公司可以应用服务端和设备端应用各种DevOps实践已达到自动化运维。

在 AWS 云平台中部署的应用程序可利用 AWS 上的多种DevOps技术。要了解 AWS DevOps,我们建议查看文档 《Introduction to DevOps on AWS》[1]。尽管大多数解决方案对部署和运维的要求不同,不过 IoT 解决方案可使用 AWS CloudFormation 以代码的方式定义服务端的基础设施。这种以代码定义基础设施的好处有:可重现、可测试和可在其他 AWS 区域中更轻松地部署。企业利用AWS CloudFormation 和其他DevOps工具可以显著提高应用程序的敏捷性和应对应用程序变化的速度。

 

为了设计符合安全性和敏捷性原则的 IoT 解决方案,组织还必须能够在将互联设备部署到环境中后更新该设备。固件更新为公司提供了一个将新功能添加到设备的机制,并且是在设备的生命周期中提供安全修补程序的关键途径。为了对互联设备实施固件更新,IoT 解决方案应该首先将固件存储在可全球访问的服务
(如 Amazon Simple Storage Service (Amazon S3)) 中以实现安全、持久和高度可扩展的云存储。然后,IoT 解决方案可使用全球内容分发网络 (CDN) 服务 Amazon CloudFront 以较低的延迟将存储在 Amazon S3 中的固件引入到互联设备。最后,客户可利用 AWS IoT 设备影子将命令推送到设备,以出发设备从预签名的 Amazon CloudFront URL (限制对通过 CDN 提供的固件对象的访问) 中下载新版本的固件。升级完成后,设备可以通过将消息发送回 IoT 解决方案以确认升级是否成功。通过固件更新编排这一系列服务,客户可以控制对设备的DevOps方法,并扩展这种方法以和整体IoT策略保持一致。

在 IoT 中,自动化和DevOps过程将扩展到在 AWS 平台中部署的应用服务之外,并包含已作为整个 IoT 架构的一部分部署的互联设备。通过设计可为新软件更改和固件更改轻松执行定期和全局更新的系统,组织可以对方法进行迭代以提升来自 IoT 解决方案的价值和在新的市场机会出现时持续创新。

管理和安全

安全在IoT中不仅仅是数据匿名化,它还是一种能够在整个系统中具有洞悉,可审核性和控制力的能力。IoT 安全包括监控整个解决方案中的事件以及对这些事件进行响应以实现所需的合规性和监管力的能力。保证 AWS 的安全性是我们工作的重中之重。通过 AWS 责任分担模型,组织获得了满足安全要求所需的灵活性、敏捷性和控制力。[2] AWS 负责管理云本身的安全,而客户负责运行在云内部的安全。客户可以始终控制他们实施哪个安全机制来保护数据、应用程序、设备、系统和网络。此外,公司可以利用 AWS 和 AWS 合作伙伴提供的各种安全和管理工具为大批设备创建强大、安全、在逻辑上隔离的 IoT 解决方案。

第一个应该打开的服务应该是AWS CloudTrail,AWS CloudTrail支持对您的AWS账户进行监管、合规性检查、操作审核和风险审核。AWS CloudTrail是一项服务,它会记录整个 AWS 基础设施中的 API 调用,并向 Amazon S3 发送日志文件。在启用 AWS CloudTrail 后,解决方案可以建立安全和监管流程,这些流程基于来自跨 AWS 账户进行的 API 调用的实时输入。在创建系统中可操作性和开放性并对其进行迭代方面,AWS CloudTrail 提供更高的可见性和灵活性。

除了记录 API 调用之外,客户还应为系统中使用的所有 AWS 服务启用 Amazon CloudWatch。Amazon CloudWatch 支持应用程序监控 AWS 指标和创建由应用程序生成的自定义指标。这些指标可以基于规则警报事件。除了 Amazon CloudWatch 指标之外,还有 Amazon CloudWatch 日志,该日志将存储来自 AWS 服务或客户应用程序的额外日志,并且可基于这些额外指标触发事件。AWS 服务 (如 AWS IoT) 直接与 Amazon CloudWatch 日志集成;这些日志可作为数据流动态读取,并可以使用系统的业务逻辑和上下文进行处理以实现实时异常检测或应对安全威胁。

通过将服务 (如 Amazon CloudWatch 和 Amazon CloudTrail) 与 AWS IoT 身份
和策略的功能配对,公司可以在 IoT 策略启动时立即收集有关安全做法的宝贵数据并满足在 IoT 解决方案中主动实施安全做法的需求。

将服务与解决方案结合起来

要更好地了解客户使用量、预测未来趋势或更有效地运营 IoT 系统,组织需要
收集和处理从互联设备收集的数量巨大的数据,并且需要连接和管理大量的“物”。

AWS 提供了用于收集和分析大量数据集 (通常称为大数据) 的各种服务。这些服务可能在 IoT 解决方案中紧密集成,以支持收集、处理和分析解决方案的数据,
以及利用IoT数据对设想做证明和否定。通过管理大批“物”的同一平台对问题进行构想和解答,组织最终能够避免重复工作并能以敏捷的方式发挥企业的创新力。

将 IoT、大数据和其他服务结合在一起的 IoT 解决方案的高层次衔接架构称为杂注(Pragma)架构。杂注架构由多个层次的解决方案组成:

  • 物质 — 设备或一组设备
  • 控制层 — 用于访问速度层的控制点和用于设备组管理的 nexus
  • 快速处理层 — 入站、高带宽设备遥测数据总线和出站设备命令总线
  • 服务层 — 供系统和人员与队列中的设备交互的访问点,用于执行分析、存档和关联数据以及使用队列的实时视图。

杂注架构

杂注架构是单一的衔接透视图,阐明了在使用 AWS 服务时 IoT 的核心原则如何表示为 IoT 解决方案。

基于杂注架构的 IoT 解决方案的一个情景是处理由设备发出的数据;这些数据也称为遥测。在上图中,当设备使用从控制层中的 AWS IoT 服务获得的设备证书进行身份验证后,设备将定期向速度层中的 AWS IoT Device Gateway 发送遥测数据。遥测数据随后被 IoT 规则引擎作为事件处理,处理结果将由Amazon Kinesis 或 AWS Lambda 输出并由与服务层交互的 Web 用户使用。

基于 IoT 解决方案的杂注架构的另一个情景是将命令发送到设备。在上图中,用户的应用程序将所需的命令值写入到目标设备的 IoT 设备影子。然后,AWS IoT 设备影子和 设备网关将合作克服网络卡顿状况以将命令传达到特定设备。

这只是与杂注架构相配的众多解决方案中的两个以设备为中心的情景。这些情景都不能满足“处理从互联设备收集的可能数量巨大的数据”这一需求,这就让集成式大数据后端有了用武之地。此图中的大数据后端适合客户已利用 AWS 平台创建的实时和批处理模式大数据解决方案的整个生态系统。简而言之,从大数据的角度来看,IoT 遥测相当于大数据解决方案中“接收的数据”。如果您想详细了解 AWS 上的大数据解决方案,请单击下方的延伸阅读链接。

公司已使用 AWS 平台创建了丰富的大数据解决方案。杂注架构展示了通过在同一平台上构建 IoT 解决方案,大数据解决方案的整个生态系统都将可用。

总结

定义您的物联网策略可能是为独特的业务创新开启大门的一项真正变革式的工作。随着组织开始努力实现自己的 IoT 创新,选择推崇以下核心原则的平台很关键:业务和技术敏捷性、可扩展性、成本和安全性。AWS 平台不仅提供 IoT 服务,还为这些服务配套提供跨全球足迹的一套广泛、深入和高度相关的平台服务,从而超额兑现对 IoT 解决方案的核心原则的承诺。此超额兑现还带来了可提高您的企业对自己命运的掌控力的自由度,并使您的企业的 IoT 解决方案能够更快地向 IoT 策略追求的成果迭代。

作为评估 IoT 平台的后续步骤,我们建议进一步阅读下面的章节以详细了解 AWS IoT、AWS 上的大数据解决方案和 AWS 上的客户案例研究。

客户案例

Phillips Healthcare

https://amazonaws-china.com/cn/solutions/case-studies/philips/

Phillips Healthcare是一家领先的健康科技公司,致力于在从健康的生活方式及疾病的预防、到诊断、治疗和家庭护理的整个健康关护全程,提高人们的健康水平,并改善医疗效果。公司的医疗信息、服务与解决方案部门基于AWS的飞利浦HealthSuite数字化平台致力于为全球数亿人医疗保健革新。飞利浦HealthSuite数字化平台分析和存储15PB的病人数据,这些数据包括了3亿9千多万个诊断影像、医疗记录、病人监护、健康信息等,并直接给病人的医疗保健提供可操作化的数据。飞利浦HealthSuite数字化平台运行在可靠的、高性能和可扩展的AWS之上,保证每月Pb级的全球病人数据增长。

“飞利浦医疗正在与诸如AWS、学术医疗中心以及病人权益保护者等技术公司进行合作,加速实现从健康生活方式、疾病预防,到疾病诊断、治疗和家庭护理的个人健康全覆盖的互连管理平台,并致力于全球化规模。”–Jeroen Tas, 飞利浦医疗信息、服务与解决方案CEO

iRoBot

https://amazonaws-china.com/cn/solutions/case-studies/irobot/

艾罗伯特公司基于AWS高度可扩展以及全球化的云端服务产品,并充分利用AWS广大的生态合作伙伴体系,致力于通过其扫地机器人产品(例如广受欢迎的Roomba)实现未来智慧家庭的愿景。艾罗伯特公司是世界知名的消费机器人公司,在全球已经售出了多达1500万的家用机器人。公司在2015年推出的第一款智能互连的机器人产品Roomba,到目前为止已经绘制了超过500万平方英尺的室内地图,为实现智慧家庭的愿景迈出了坚实的一步。艾罗伯特公司的创新充分利用了AWS丰富的云端服务产品,其中包括物联网服务(IoT)、计算服务、手机服务、分析服务、存储服务、数据库服务、平台管理服务以及网络服务等。

“艾罗伯特公司非常高兴在发展机器人云端服务战略时能与AWS结为合作伙伴。AWS拥有世界知名的品牌、丰富的云端服务产品以及世界级的云服务基础设施,这些都将极大程度地加快艾罗伯特开发智能互联机器人科技,并拓展机器人在智慧家庭中的应用价值。基于AWS云端服务产品,艾罗伯特能够提升现有机器人产品的服务能力,改善客户体验,从而引领一个居家生活的新时代。” –Colin Angle,艾罗伯特主席及CEO

Rachio

(https://amazonaws-china.com/cn/solutions/case-studies/rachio/)

Rachio公司位于科多拉多,是一家制造同时提供软件解决方案的智能洒水控制器生产厂商。Rachio智能洒水控制器提供基于WiFi的洒水控制能力,帮助用户设置并优化其洒水计划。通过很多在线商城就可以购买到这一款控制器,该控制器能够获取并利用当地的天气预报信息,提供多达16种模式并根据植物和土壤类型来设置洒水时间以及洒水量。从而在满足草坪和庭院的用水需求前提下,最大程度的节约水资源。

“AWS IoT服务提供了领先的边缘端的安全管理能力。消息本身是加密的,消息代理又增加了另一层安全机制。一般而言,基于策略的安全机制是AWS的一大优势。当某一个设备异常时,我们不需要重新发放证书,只需要隔离异常设备的策略即可。这种方式既简单又高效。”–Garsombke,CTO与联合创始人

Enel

(https://amazonaws-china.com/cn/solutions/case-studies/enel/)

意大利能源公司是一家跨国企业,给6100万客户提供电力与燃气服务。意大利能源公司基于AWS构建其物联网管理平台,提供能源管理服务。

“基于AWS云端服务,意大利能源公司不但节省了21%的计算成本,60%的存储成本,并且将提供服务的时间从4周缩短到2天,这一切都大大改变了业务运营方式。” –Fabio Veronese, 基础设施与技术服务部

延伸阅读

如需补充阅读,请查阅以下资源:

·         AWS IoT 服务

·         AWS IoT 入门

·         AWS 案例研究

·         AWS 上的大数据分析选项

备注

[1] https://d0.awsstatic.com/whitepapers/AWS_DevOps.pdf
[2] https://aws.amazon.com/compliance/shared-responsibility-model/

AWS Greengrass – 在互连设备上运行 AWS Lambda 函数

在 re:Invent 大会期间发布的文章 (AWS Greengrass – 无处不在的现实世界计算) 中,我首次介绍了 AWS Greengrass。当时我们推出了 AWS Greengrass 的有限预览版,并邀请您注册。

正如我当时指出的那样,许多 AWS 客户希望在现场收集和处理数据,而现场的网络连接通常很慢,有时还时断时续,并不可靠。利用 Greengrass,他们可以在基于现场的小型简单设备上应用 AWS 编程模型。它建立在 AWS IoTAWS Lambda 的基础上,支持访问 AWS Cloud 中不断增加的各种服务。

利用 Greengrass,您可以访问在现场运行的计算、消息收发、数据缓存和同步服务,这些服务并不依赖与 AWS 区域的稳定高带宽连接。您可以在 Python 2.7 中编写 Lambda 函数,并将其从云部署到 Greengrass 设备,同时使用 Device Shadows 来维护状态。您的设备和外设可以使用本地消息收发互相通信,后者并不通过云进行传递。

现已公开发布

今天我们将在US East (Northern Virginia) 和 US West (Oregon) 区域公开发布 Greengrass。在预览版本中,AWS 客户已成功获得 Greengrass 的实践操作体验,并开始围绕它构建应用程序和业务。在后文中,我将分享一些早期的成功案例。

Greengrass 核心代码可在每台设备上运行。它允许您在设备上部署和运行 Lambda 应用程序,支持通过安全网络传递本地 MQTT 消息,并可确保设备和云之间的对话通过安全连接完成。Greengrass 核心还支持安全的无线软件更新,包括 Lambda 函数。它包括消息代理、Lambda 运行时、Thing Shadows 实现和部署代理。Greengrass 核心和可选的其他设备共同组成 Greengrass 组。该组包括配置数据、Greengrass 核心的设备和身份列表、Lambda 函数列表以及一组定义消息应发往何处的订阅。在部署过程中,所有这些信息都将复制到 Greengrass 核心设备。

您的 Lambda 函数可以使用三个不同软件开发工具包中的 API:

适用于 Python 的 AWS 软件开发工具包 – 该软件开发工具包允许您的代码与 Amazon Simple Storage Service (S3)Amazon DynamoDBAmazon Simple Queue Service (SQS), 和其他 AWS 服务交互。

AWS IoT 设备软件开发工具包 – 该软件开发工具包 (适用于 Node.js、Python、Java 和 C++) 可帮助您将硬件设备连接到 AWS IoT。C++ 软件开发工具包具有几项额外功能,包括对 Greengrass Discovery Service 的访问权和支持根 CA 下载。

AWS Greengrass 核心软件开发工具包 – 该软件开发工具包提供的 API 允许本地调用其他 Lambda 函数,发布消息和使用 Thing Shadows。

您可以在启用了 OverlayFS 和用户命名空间功能的 x86 和 ARM 设备 (具有版本 4.4.11 或更高版本 Linux 内核) 上运行 Greengrass 核心。虽然大部分 Greengrass 部署将针对专业化的工业级硬件,但您也可以在 Raspberry Pi 或 EC2 实例上运行 Greengrass 核心进行开发和测试。

在本文中,我使用了附加到 BrickPi 的 Raspberry Pi,它通过 WiFi 连接到我的家庭网络:

Raspberry Pi、BrickPi、盒子和所有其他部件均在 BrickPi 3 初学者工具包中提供。您需要一些 Linux 命令行专业知识和一定的动手能力将所有这一切组装起来,不过如果我都能做到,您肯定也可以。

Greengrass 的实际使用

我可以从控制台、API 或 CLI 访问 Greengrass。我将使用控制台。Greengrass 控制台的简介页面允许我定义组,添加 Greengrass 核心,并向组中添加设备:

单击 Get Started,然后单击 Use easy creation

然后为组命名:

并为第一个 Greengrass 核心命名:

准备好后,单击 Create Group and Core

这将运行几秒钟,然后提供可供下载的安全资源 (两个密钥和一个证书) 以及 Greengrass 核心:

我下载这些安全资源并将它们放到一个安全的地方,然后选择并下载所需版本的 Greengrass 核心软件 (适用于我的 Raspberry Pi 的 ARMv7l),最后单击 Finish

现在我打开 Pi 的电源,并将安全资源和软件复制到其中 (我将它们放在一个 S3 存储桶中,并使用 wget下载它们)。这是此时的外壳程序历史记录:

重要更新:正如我在 AWS 安全团队的一位细心的同事指出的那样,这不是向设备分发密钥的好方法。我本来可以使用 AWS CLI 从加密的存储桶中下载,通过剪切和粘贴复制它们,或者使用 USB 闪存盘。

我按照用户指南中的说明创建新用户和组,然后运行 rpi-update 脚本,并安装几个程序包,包括 sqlite3openssl几次重启后,我就可以继续了!

接下来,仍然遵循指示,解压缩 Greengrass 核心软件,并将安全资源移动到其最终目的地 (/greengrass/configuration/certs),在这个过程中为它们指定通用名称。目录看起来如下所示:

下一步是将核心与 AWS IoT 事物关联起来。返回到控制台,点击浏览组和 Greengrass 核心,找到 Thing ARN:

将证书名称和 Thing ARN 插入到 config.json 文件中,同时填充缺失的 iotHostggHost部分:

启动 Greengrass 守护程序 (这是我的第二次尝试;第一次我把其中一个路径名称拼错了):

在命令行中度过愉快的时光后 (这让我回想起了使用 Unix v7 和 BSD 4.2 的日子),现在是时候再次转到视觉界面了!访问我的 AWS IoT 控制面板,看到我的 Greengrass 核心正在与 IoT 建立连接:

我转到 Lambda 控制台并使用 Python 2.7 运行时创建一个 Lambda 函数 (IAM 角色在这里无关紧要):

以常用方式发布函数,然后跳转到 Greengrass 控制台,单击我的组,并选择添加一个 Lambda 函数:

然后选择要部署的版本:

我还将此函数配置为长期存在而不是按需提供:

我的代码会将消息发布到 AWS IoT,所以我通过指定源和目标来创建一个订阅:

我还在订阅上设置一个主题筛选条件 (hello/world):

确认完成的设置并保存我的订阅,现在我已准备就绪,可以部署代码了。重新访问我的组,单击 Deployments,并从 Actions 菜单中选择 Deploy

选择 Automatic detection 以便继续:

由于这是我的第一个部署,我需要创建一个服务级角色,以便为 Greengrass 授予访问其他 AWS 服务的权限。直接单击 Grant permission

可以看到每个部署的状态:

代码现在已在我的 Pi 上运行!它向主题 hello/world 发布消息;我可以通过转到 IoT 控制台,单击“Test”并订阅该主题,来查看这些消息:

消息如下所示:

完成所有设置工作后,我可以通过上传、发布和部署代码的新版本来进行迭代开发。我计划使用 BrickPi 来控制一些 LEGO Technic 电动车,并发布从一些传感器收集的数据。敬请关注相关文章!

Greengrass 定价

作为 AWS 免费套餐的一部分,您可以在三台设备上免费运行一年 Greengrass 核心。在下一级别 (3 到 10,000 台设备),有两个选项可用:

  • 即付即用 – 每台设备每个月 0.16 USD。
  • 年度承诺 – 每台设备每年 1.49 USD,节省 17.5% 的成本。

如果您想在 10,000 台以上的设备上运行 Greengrass 核心,或者想做出更长期的承诺,请与我们联系;有关所有定价模型的详细信息,请参阅 Greengrass 定价页面。

-Jeff