使用 Greengrass 连接器与服务和协议集成 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

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

使用 Greengrass 连接器与服务和协议集成

此功能适用于 Amazon IoT Greengrass Core v1.7 及更高版本。

Amazon IoT Greengrass 中的连接器是一种预置模块,提供与本地基础设施、设备协议、Amazon 和其他云服务的内置集成。借助连接器,您可以减少花在学习新协议和 API 上的时间,花更多的时间关注对您的业务十分重要的逻辑。

下图显示了连接器在Amazon IoT Greengrass 格局中的作用。

连接器连接到设备、服务和本地资源。

许多连接器使用 MQTT 消息与组中的设备和Greengrass Lambda函数进行通信,或者与Amazon IoT和本地影子服务进行通信。在以下示例中, 连接器从用户定义的 Lambda 函数接收 MQTT 消息,从 Amazon Secrets Manager 使用密钥的本地引用,并调用 Twilio API。

连接器从 Lambda 函数接收 MQTT 消息并调用服务。

有关创建此解决方案的教程,请参阅Greengrass 连接器入门(控制台)Greengrass 连接器入门 (CLI)

Greengrass 连接器可帮助您快速扩展设备功能或创建单一用途设备。通过使用连接器,您可以:

  • 实施可重用的业务逻辑。

  • 与云和本地服务(包括 Amazon 和第三方服务)进行交互。

  • 提取并处理设备数据。

  • 使用 MQTT 主题订阅和用户定义的 Lambda 函数启用设备到设备调用。

Amazon 提供了一组 Greengrass 连接器,可简化与常见服务和数据源的交互。这些预先构建的模块支持各种场景,其中包括日志记录和诊断,补充、行业数据处理以及警报和消息传递。有关更多信息,请参阅Amazon 提供的 Greengrass 连接器

要求

要使用连接器,请记住以下几点:

  • 您必须满足要使用的每个连接器的要求。这些要求可能包括最低 Amazon IoT Greengrass Core 软件版本、设备先决条件、所需权限和限制。有关更多信息,请参阅Amazon 提供的 Greengrass 连接器

  • Greengrass 组只能包含给定连接器的一个已配置实例。但是,可在多个订阅中使用该实例。有关更多信息,请参阅配置参数

  • 当 Greengrass 组的默认容器化设置为无容器时,组中的连接器必须在不执行容器化的情况下运行。要查找支持无容器模式的连接器,请参阅Amazon 提供的 Greengrass 连接器

使用 Greengrass 连接器

连接器是一种组组件。与其他组组件(如设备和用户定义的 Lambda 函数)一样,您可以向组添加连接器,配置其设置,并将它们部署到 Amazon IoT Greengrass。连接器在核心环境中运行。

有些连接器可部署为简单的独立应用程序。例如,Device Defender 连接器从核心设备读取系统指标,并将其发送到 Amazon IoT Device Defender 以供分析。

其他连接器可用作较大解决方案中的构建块。以下示例解决方案使用 Modbus-RTU Protocol Adapter 连接器处理来自传感器的消息,并使用 Twilio Notifications 连接器触发 Twilio 消息。

数据从 Lambda 函数流向 Modbus-RTU 协议适配器连接器,再到 Lambda 函数,再到 Twilio Notifications 连接器,再到 Twilio。

解决方案通常包含挨着连接器的用户定义的 Lambda 函数,并处理连接器发送或接收的数据。在此示例中,TempMonitor 函数从 Modbus-RTU 协议适配器接收数据,运行某一业务逻辑,然后将数据发送到 Twilio Notifications。

要创建和部署解决方案,您需要遵循以下一般过程:

  1. 标出高级数据流。标识您需要使用的数据源、数据通道、服务、协议和资源。在示例解决方案中,这包含 Modbus RTU 协议、物理 Modbus 串行端口和 Twilio 上的数据。

  2. 标识要包含在解决方案中的连接器,并将其添加到您的组。示例解决方案使用 Modbus-RTU 协议适配器和 Twilio Notifications。要帮助找到适用于您场景的连接器并了解其各自的要求,请参阅 Amazon 提供的 Greengrass 连接器

  3. 确定是需要用户定义的 Lambda 函数、设备还是资源,然后创建它们并将其添加到组。这可能包括一些函数,这些函数包含业务逻辑,或将数据处理为解决方案中其他实体所需的格式。该示例使用函数来发送解决方案 Modbus RTU 请求并启动 Twilio 通知。它还包括 Modbus RTU 串行端口的本地设备资源以及 Twilio 身份验证令牌的密钥资源。

    注意

    密钥资源引用 Amazon Secrets Manager 中的密码、令牌及其他密钥。连接器和 Lambda 函数可使用密钥对服务和应用程序进行身份验证。默认情况下,Amazon IoT Greengrass 可访问其名称以“greengrass-”开头的密钥。有关更多信息,请参阅将密钥部署到 Amazon IoT Greengrass 核心

  4. 创建允许解决方案中的实体交换 MQTT 消息的订阅。如果在订阅中使用连接器,则该连接器以及消息源或目标必须使用该连接器支持的预定义主题语法。有关更多信息,请参阅输入和输出

  5. 将组部署到 Greengrass 核心。

有关创建和部署连接条件的信息,请参阅以下教程:

配置参数

许多连接器提供了可让您自定义行为或输出的参数。这些参数在连接器生命周期中的初始化期间、运行时或其他时间使用。

参数类型和用法因连接器而异。例如,SNS 连接器有一个参数用于配置默认的 SNS 主题;而 Device Defender 有一个参数用于配置数据采样率。

组版本可包含多个连接器,但一次只能包含给定连接器的一个实例。这意味着组中的每个连接器只能有一个有效配置。但是,连接器实例可以在组中的多个订阅中使用。例如,您可以创建允许许多设备将数据发送到 Kinesis Firehose 连接器的多个订阅。

用于访问组资源的参数

Greengrass 连接器使用组资源访问核心设备上的文件系统、端口、外围设备及其他本地资源。如果连接器需要访问组资源,则它会提供相关的配置参数。

组资源包括:

  • 本地资源。Greengrass 核心设备上存在的目录、文件、端口、引脚和外围设备。

  • 机器学习资源。机器学习模型在云中训练并部署到核心进行本地推理。

  • 密钥资源。来自 Amazon Secrets Manager 的密码、密钥、令牌或任意文本的本地加密副本。连接器可以安全访问这些本地密钥,并使用这些密钥对服务或本地基础设施进行身份验证。

例如,Device Defender 的参数允许访问主机 /proc 目录中的系统指标,而 Twilio Notifications 的参数允许访问本地存储的 Twilio 身份验证令牌。

更新连接器参数

在向 Greengrass 组添加连接器时配置参数。您可以在添加连接器后更改参数值。

  • 在控制台中:从组配置页面上,打开 Connectors (连接器),然后从连接器的上下文菜单中选择 Edit (编辑)

    注意

    如果连接器使用的某一密钥资源后来更改为引用其他密钥,您必须编辑连接器的参数并确认这一更改。

  • 在 API 中:创建连接器的另一个版本,用于定义新的配置。

    Amazon IoT Greengrass API 使用版本来管理群组。版本是不可变的,因此要添加或更改组组件(例如群组的客户端设备、函数和资源),必须创建新的或更新的组件的版本。然后,创建并部署组版本,其中包含每个组件的目标版本。

对连接器配置进行更改后,必须部署该组以将更改传播到核心。

输入和输出

许多 Greengrass 连接器可通过发送和接收 MQTT 消息与其他实体进行通信。MQTT 通信由订阅控制,这些订阅允许连接器与 Greengrass 组中的 Lambda 函数、设备以及其他连接器交换数据,或者与 Amazon IoT 和本地影子服务交换数据。要允许此通信,您必须在该连接器所属的组中创建订阅。有关更多信息,请参阅MQTT 消息传递工作流中的托管订阅

连接器可以是消息发布者和/或消息订阅者。每个连接器都定义了它发布到或订阅的 MQTT 主题。这些预定义的主题必须在连接器是其消息源或消息目标的订阅中使用。有关包含为连接器配置订阅的步骤的教程,请参阅Greengrass 连接器入门(控制台)Greengrass 连接器入门 (CLI)

注意

许多连接器还具有内置的通信模式以便与云或本地服务进行交互。这些通信模式因连接器而异,可能要求您为组角色配置参数或添加权限。有关连接器要求的信息,请参阅 Amazon 提供的 Greengrass 连接器

输入主题

大多数连接器接收有关 MQTT 主题的输入数据。有些连接器订阅输入数据的多个主题。例如,Serial Stream 连接器支持两个主题:

  • serial/+/read/#

  • serial/+/write/#

对于此连接器,读取和写入请求将发送到相应的主题。创建订阅时,请确保使用符合您的实施的主题。

前面示例中的 +# 字符为通配符。这些通配符允许订阅者接收多个主题上的消息,并允许发布者自定义他们发布到的主题。

  • + 通配符可出现主题层次结构中的任何位置。它可以替换为某个层次结构项目。

    例如,对于主题 sensor/+/input,消息可发布到主题 sensor/id-123/input,但不能发布到 sensor/group-a/id-123/input

  • # 通配符只能出现在主题层次结构末端。它可以替换为零个或零个以上的层次结构项目。

    例如,对于主题 sensor/#,消息可发布到 sensor/, sensor/id-123sensor/group-a/id-123,但不能发布到 sensor

仅当订阅主题时,通配符才有效。消息不能发布到包含通配符的主题。请检查连接器的文档以了解其输入或输出主题要求。有关更多信息,请参阅Amazon 提供的 Greengrass 连接器

对容器化的支持

默认情况下,大多数连接器在由 Amazon IoT Greengrass 管理的隔离运行时环境中的 Greengrass 核心上运行。这些运行时环境称为容器,它们可以将连接器和主机系统分隔开,从而为主机和连接器提供更高的安全性。

但在某些情况下不支持这种 Greengrass 容器化,例如在 Docker 容器或没有 cgroup 的旧版 Linux 内核上运行 Amazon IoT Greengrass 时。在这些情况下,连接器必须在无容器模式下运行。要查找支持无容器模式的连接器,请参阅Amazon 提供的 Greengrass 连接器。有些连接器本身就在这种模式下运行,而有些连接器则允许您设置隔离模式。

您也可以在支持 Greengrass 容器化的环境中将隔离模式设置为无容器模式,但我们建议尽可能使用 Greengrass 容器模式。

注意

Greengrass 组的默认容器化设置不适用于连接器

升级连接器版本

连接器提供商可能会发布新版本的连接器,以添加功能、修复问题或提高性能。有关可用版本和相关更改的信息,请参阅每个连接器的文档

在 Amazon IoT 控制台中,您可以检查 Greengrass 组中连接器的新版本。

  1. 在 Amazon IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)

  2. Greengrass 组下,选择您的组。

  3. 选择 Connectors (连接器) 以显示组中的连接器。

    如果连接器有新版本,则升级列中会显示可用按钮。

  4. 要升级连接器版本,请执行以下操作:

    1. Connectors (连接器) 页上的 Upgrade (升级) 列中,选择 Available (可用)。此时将打开 Upgrade connector (升级连接器) 页面,并显示当前参数设置(如果适用)。

      选择新的连接器版本,根据需要定义参数,然后选择 Upgrade (升级)

    2. Subscriptions (订阅) 页面上,在组中添加新订阅,以替换使用连接器作为源或目标的任何订阅。然后,删除旧订阅。

      订阅按版本引用连接器,因此,如果您更改组中的连接器版本,则这些连接器将变为无效。

    3. Actions (操作) 菜单中,选择 Deploy (部署) 以将更改部署到核心。

要从 Amazon IoT Greengrass API 升级连接器,请创建并部署包含更新的连接器和订阅的组版本。使用与向组添加连接器时相同的过程。有关演示如何使用 Amazon CLI 配置和部署示例 Twilio Notifications 连接器的详细步骤,请参阅Greengrass 连接器入门 (CLI)

连接器的日志记录

Greengrass 包含向 Greengrass 日志写入事件和错误的 Lambda 函数。根据您的组设置,日志将写入到 CloudWatch 日志、本地文件系统或两者。来自连接器的日志包含相应函数的 ARN。下面的示例 ARN 来自 Kinesis Firehose 连接器。

arn:aws:lambda:aws-region:account-id:function:KinesisFirehoseClient:1

默认日志记录配置使用以下目录结构将信息级别日志写入到文件系统:

greengrass-root/ggc/var/log/user/region/aws/function-name.log

有关 Greengrass 日志记录的更多信息,请参阅 利用 Amazon IoT Greengrass 日志进行监控