什么是 AWS IoT Greengrass?
AWS IoT Greengrass 是将云功能扩展到本地设备的软件。这使得设备可以更靠近信息源来收集和分析数据,自主响应本地事件,同时在本地网络上彼此安全地通信。本地设备还可以与 AWS IoT 安全通信并将 IoT 数据导出到 AWS 云。
下图演示了 AWS IoT Greengrass 的基本架构。
在 AWS IoT Greengrass 中,设备可在本地网络上安全地通信并互相交换消息而不必连接到云。
AWS IoT Greengrass 提供了一个本地发布/订阅消息管理器,该管理器可在丢失连接的情况下智能地缓冲消息,使云的入站和出站消息得到保留。
AWS IoT Greengrass 核心软件
AWS IoT Greengrass 核心软件提供了以下功能:
- 连接器和 Lambda 函数的部署与本地执行。
- 在本地处理数据流,并自动导出到 AWS 云。
- 使用托管订阅通过本地网络在设备、连接器和 Lambda 函数之间进行的 MQTT 消息传递。
- 使用托管订阅在 AWS IoT 与设备、连接器和 Lambda 函数之间进行的 MQTT 消息传递。
- 使用设备身份验证和授权确保设备和云之间的安全连接。
- 设备的本地影子同步。影子可配置为与云同步。
- 对本地设备和卷资源的受控访问。
- 用于运行本地推理的云训练机器学习模型的部署。
- 使设备能够发现 Greengrass 核心设备的自动 IP 地址检测。
- 全新的或更新的组配置的集中部署。下载配置数据后,核心设备将自动重启。
- 用户定义的 Lambda 函数的安全、无线 (OTA) 软件更新。
- 本地密钥的安全、加密的存储以及连接器和 Lambda 函数进行的受控访问。
AWS IoT Greengrass 组
AWS IoT Greengrass 组 是一系列设置和组件,例如 AWS IoT Greengrass Core、设备和订阅。组用于定义交互范围。例如,一个组可能表示建筑物的一层、一辆卡车或整个采矿场所。下图显示了可以构成 Greengrass 组的组件。
在上图中:
-
A:AWS IoT Greengrass 组定义
有关 AWS IoT Greengrass 组的一组信息。
-
B:AWS IoT Greengrass 组设置
包括:AWS IoT Greengrass 组 角色。证书颁发机构和本地连接配置。AWS IoT Greengrass Core连接信息。默认 Lambda 运行时环境和本地日志配置。
-
C:AWS IoT Greengrass Core
表示 AWS IoT Greengrass Core的 AWS IoT 事物。
AWS IoT Greengrass Core 是一个 AWS IoT 事物(设备)。与其他 AWS IoT 设备一样,核心位于注册表中,具有设备影子,并使用设备证书在 AWS IoT 中进行身份验证。核心设备运行 AWS IoT Greengrass 核心软件,以使其可以管理 Greengrass 组的本地进程,如通信、影子同步和令牌交换。
-
D:Lambda 函数定义
核心上本地运行的 Lambda 函数的列表,包含关联的配置数据。
本地事件、云中的消息和其他来源可能会触发本地 Lambda 函数,这会为连接的设备提供本地计算功能。例如,您可以使用 Greengrass Lambda 函数筛选设备数据,然后再将数据传输到云。
Greengrass 组可以按别名 (推荐) 或版本引用 Lambda 函数。通过使用别名,可以更轻松地管理代码更新,因为您在更新函数代码时无需更改订阅表或组定义。相反,您只是将别名指向新的函数版本。 在组部署期间,别名将解析为版本号。在使用别名时,解析的版本将在部署时更新为别名指向的版本。
-
按需函数在调用时启动,并在没有要执行的任务时停止。除非具有可重复使用的现有容器,否则,函数调用将创建单独的容器(或沙盒)以处理调用。发送到函数的数据可以由任何容器提取。
按需函数的多次调用可以并行运行。
在创建新的容器时,不会保留在函数处理程序外部定义的变量和预处理逻辑。
-
长时间生存的(或固定的)函数在 AWS IoT Greengrass Core启动时自动启动,并在单个容器中运行。发送到函数的所有数据由相同的容器提取。
多个调用将排入队列,直到执行了以前的调用。
将为处理程序的每次调用保留在函数处理程序外部定义的变量和预处理逻辑。
如果需要在没有任何初始输入的情况下开始工作,长时间生存的 Lambda 函数是非常有用的。
-
-
E:订阅定义
允许使用 MQTT 消息进行通信的订阅列表。订阅定义了:消息源和消息目标。这些可能是设备、Lambda 函数、连接器、AWS IoT 和本地影子服务主题,这是 MQTT 主题或用于筛选消息数据的主题筛选条件。
AWS IoT Greengrass 使用订阅表来定义如何在 Greengrass 组中的设备、函数和连接器之间交换 MQTT 消息以及如何与 AWS IoT 或本地影子服务交换 MQTT 消息。每个订阅都指定了发送或接收消息所借助的源、目标和 MQTT 主题。仅当定义了相应的订阅时,AWS IoT Greengrass 才允许将消息从源发送到目标。
订阅仅定义从源到目标的单向消息流。要支持双向消息交换,您必须创建两个订阅,每个订阅针对一个方向。
-
F:连接器定义
核心上本地运行的连接器的列表,包含关联的配置数据。
Greengrass 连接器是预先构建的模块,有助于加快针对常见边缘场景的开发生命周期。它们使您能够更加轻松地与本地基础设施、设备协议、AWS 及其他云服务进行交互。借助连接器,您可以减少花在学习新协议和 API 上的时间,花更多的时间关注对您的业务十分重要的逻辑。
许多连接器使用 MQTT 消息与组中的设备和 Greengrass Lambda 函数进行通信,或者与 AWS IoT 和本地影子服务进行通信。在以下示例中,Twilio 通知 连接器从用户定义的 Lambda 函数接收 MQTT 消息,从 AWS Secrets Manager 使用密钥的本地引用,并调用 Twilio API。
Greengrass 连接器可帮助您快速扩展设备功能或创建单一用途设备。连接器使您可以更轻松地:
- 实施可重用的业务逻辑。
- 与云和本地服务(包括 AWS 和第三方服务)进行交互。
- 提取并处理设备数据。
- 使用 MQTT 主题订阅和用户定义的 Lambda 函数启用设备到设备调用。
-
G:设备定义
作为 AWS IoT Greengrass 组 的成员的 AWS IoT 事物(设备)以及关联的配置数据的列表。
一个 AWS IoT Greengrass 组 可以包含两种类型的设备:
-
AWS IoT Greengrass Core
核心是运行 AWS IoT Greengrass 核心软件的 AWS IoT 设备,该软件使设备能够直接与 AWS IoT 和 AWS IoT Greengrass 云服务进行通信。核心具有自己的证书,用于在 AWS IoT 中进行身份验证。它具有设备影子并存在于 AWS IoT 设备注册表中。AWS IoT Greengrass 核心运行本地 Lambda 运行时、部署代理和 IP 地址跟踪器(用于将 IP 地址信息发送到 AWS IoT Greengrass 云服务以允许 Greengrass 设备自动发现其组和核心连接信息)。
-
连接到 Greengrass 核心的 AWS IoT 设备
连接的设备(也称为 Greengrass 设备)可以连接到同一 Greengrass 组中的核心。设备有其自己的用于进行身份验证的证书、设备影子以及在 AWS IoT 设备注册表中的项。设备的尺寸可能不同 - 从基于微控制器的小型设备到大型设备。注意目前,一个 Greengrass 组最多可包含 200 个设备。一个设备最多可以是 10 个组的成员。
设备影子 是用于存储事物的当前或所需状态信息的 JSON 文档。
-
-
H:资源定义
AWS IoT Greengrass Core 上的本地资源、机器学习资源和密钥资源的列表,包含关联的配置数据。
您可以访问两种类型的本地资源:卷资源和设备资源。
-
卷资源
根文件系统上的文件或目录(
/sys
、/dev
或/var
中的文件或目录除外)。包括:
- 用于在 Greengrass Lambda 函数中读取或写入信息的文件夹或文件(例如,
/usr/lib/python2.x/site-packages/local
)。 - 主机的 /proc 文件系统中的文件夹或文件(例如,
/proc/net
或/proc/stat
)。在 v1.6 or later 中受支持。
提示
要将
/var
、/var/run
和/var/lib
目录配置为卷资源,请先将目录挂载到不同的文件夹,然后配置文件夹作为卷资源。配置卷资源时,您可以指定源路径和目标路径。源路径是资源在主机上的绝对路径。目的地路径是资源在 Lambda 命名空间环境内的绝对路径。这是 Greengrass Lambda 函数或连接器在其中运行的容器。对目标路径的任何更改都会反映在主机文件系统上的源路径中。注意
目标路径中的文件仅在 Lambda 命名空间中可见。您在常规 Linux 命名空间中看不到它们。
- 用于在 Greengrass Lambda 函数中读取或写入信息的文件夹或文件(例如,
-
设备资源
/dev
下的文件。设备资源只允许/dev
下的字符设备或块存储设备。包括:
- 用于与通过串行端口连接的设备进行通信的串行端口(例如,
/dev/ttyS0
、/dev/ttyS1
)。 - 用于连接 USB 外围设备的 USB(例如,
/dev/ttyUSB0
或/dev/bus/usb
)。用于通过 GPIO 连接的传感器和致动器的 GPIO(例如,/dev/gpiomem
)。 - 用于使用板载 GPU 加快机器学习的 GPU(例如,
/dev/nvidia0
)。用于捕获图像和视频的摄像机(例如,/dev/video0
)。
- 用于与通过串行端口连接的设备进行通信的串行端口(例如,
-
在部署后,AWS IoT Greengrass 组 定义、Lambda 函数、连接器、资源和订阅表将复制到 AWS IoT Greengrass Core设备中。