将 AWS IoT Greengrass 组部署到 AWS IoT Greengrass 核心 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 于 2023 年 6 月 30 日进入延长使用寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1维护策略。在此日期之后,AWS IoT Greengrass V1 不再发布更新来提供新功能、功能增强、错误修复或安全补丁。在 AWS IoT Greengrass V1 上运行的设备不会受到干扰,并且将继续运行并连接到云。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,从而添加重要的新功能支持更多平台

将 AWS IoT Greengrass 组部署到 AWS IoT Greengrass 核心

使用 AWS IoT Greengrass 组用于组织边缘环境中的实体。您也可以使用组来控制组中的实体如何相互交互并与 AWS Cloud 交互。例如,只针对本地运行部署组中的 Lambda 函数,仅组中的设备可以使用本地 MQTT 服务器进行通信。

一个组必须包含一个核心,它是一个运行 AWS IoT Greengrass 核心软件的 AWS IoT 设备。网关作为边缘核心,可在边缘环境中提供 AWS IoT Core 功能。根据您的业务需求,还可以向组中添加以下实体:

您可以管理 AWS Cloud 中的 Greengrass 组,然后将其部署到核心。部署会将组配置复制到核心设备上的 group.json 文件。此文件位于 greengrass-root/ggc/deployments/group 中:

部署到核心设备上的 Greengrass 组的云定义。
注意

在部署期间,核心设备上的 Greengrass 守护程序进程停止,然后重新启动。

从 AWS IoT 控制台中部署组

您可以从 AWS IoT 控制台中的组配置页面中部署组并管理其部署。

注意

要在控制台中打开此页面,请依次选择 Greengrass 设备组 (V1),然后在 Greengrass 组下选择您的组。

部署当前版本的组
  • 在组配置页面上,选择 部署

查看组的部署历史记录

组的部署历史记录包括每次部署尝试的日期和时间、组版本和状态。

  1. 在组配置页面中,选择部署选项卡。

  2. 要查看有关部署的更多信息(包括错误消息),请在 AWS IoT 控制台的 Greengrass 设备下选择部署

重新部署组部署

如果当前部署失败,您可能希望重新部署一个部署,或者恢复为不同的组版本。

  1. 在 AWS IoT 控制台中,选择 Greengrass 设备,然后选择 组 (V1)

  2. 选择 部署 选项卡。

  3. 选择要重新部署的部署,然后选择重新部署

重置组部署

您可能希望重置组部署以移动或删除组或删除部署信息。有关更多信息,请参阅 重置部署

  1. 在 AWS IoT 控制台中,选择 Greengrass 设备,然后选择 组 (V1)

  2. 选择 部署 选项卡。

  3. 选择要重置的部署,然后选择重置部署

使用 AWS IoT Greengrass API 部署组

AWS IoT Greengrass API 提供了以下操作,可用于部署 AWS IoT Greengrass 组和管理组部署。您可以从 AWS CLI、AWS IoT Greengrass API 或 AWS 开发工具包中调用这些操作。

操作 描述

CreateDeployment

创建 NewDeploymentRedeployment 部署。

如果当前部署失败,您可能希望重新部署一个部署。或者,您可能希望重新部署,以恢复到另一个组版本。

GetDeploymentStatus

返回部署的状态:BuildingInProgressSuccessFailure

您可以配置 Amazon EventBridge 事件以接收部署通知。有关更多信息,请参阅 获取部署通知

ListDeployments

返回组的部署历史记录。

ResetDeployments

重置组的部署。

您可能希望重置组部署以移动或删除组或删除部署信息。有关更多信息,请参阅 重置部署

注意

有关批量部署操作的更多信息,请参阅 为组创建批量部署

获取组 ID

组 ID 通常用于 API 操作中。您可以使用 ListGroups 操作从组列表中查找目标组的 ID。例如,在 AWS CLI 中,使用 list-groups 命令。

aws greengrass list-groups

您还可以包含用于筛选结果的 query 选项。例如:

  • 要获取最近创建的组,请执行以下操作:

    aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
  • 按名称获取组:

    aws greengrass list-groups --query "Groups[?Name=='MyGroup']"

    系统不要求组名称是唯一的,所以可能会返回多个组。

以下为 list-groups 响应示例。每个组的信息都包含组 ID(在 Id 属性中)和最新组版本 ID(在 LatestVersion 属性中)。要获取组的其他版本 ID,请将组 ID 与 ListGroupVersions 结合使用。

注意

您还可以在 AWS IoT 控制台中找到这些值。组 ID 显示在组的设置页面上。组版本 ID 显示在组的部署选项卡上。

{ "Groups": [ { "LatestVersionArn": "arn:aws:us-west-2:123456789012:/greengrass/groups/00dedaaa-ac16-484d-ad77-c3eedEXAMPLE/versions/4cbc3f07-fc5e-48c4-a50e-7d356EXAMPLE", "Name": "MyFirstGroup", "LastUpdatedTimestamp": "2019-11-11T05:47:31.435Z", "LatestVersion": "4cbc3f07-fc5e-48c4-a50e-7d356EXAMPLE", "CreationTimestamp": "2019-11-11T05:47:31.435Z", "Id": "00dedaaa-ac16-484d-ad77-c3eedEXAMPLE", "Arn": "arn:aws:us-west-2:123456789012:/greengrass/groups/00dedaaa-ac16-484d-ad77-c3eedEXAMPLE" }, { "LatestVersionArn": "arn:aws:us-west-2:123456789012:/greengrass/groups/036ceaf9-9319-4716-ba2a-237f9EXAMPLE/versions/8fe9e8ec-64d1-4647-b0b0-01dc8EXAMPLE", "Name": "GreenhouseSensors", "LastUpdatedTimestamp": "2020-01-07T19:58:36.774Z", "LatestVersion": "8fe9e8ec-64d1-4647-b0b0-01dc8EXAMPLE", "CreationTimestamp": "2020-01-07T19:58:36.774Z", "Id": "036ceaf9-9319-4716-ba2a-237f9EXAMPLE", "Arn": "arn:aws:us-west-2:123456789012:/greengrass/groups/036ceaf9-9319-4716-ba2a-237f9EXAMPLE" }, ... ] }

如果您不指定 AWS 区域,AWS CLI 命令将使用您的配置文件中的默认区域。要返回不同区域中的组,请包含区域选项。例如:

aws greengrass list-groups --region us-east-1

AWS IoT Greengrass 组对象模型概述

当使用 AWS IoT Greengrass API 编程时,了解 Greengrass 组对象模型很有帮助。

在 AWS IoT Greengrass API 中,顶级 Group 对象包含元数据和 GroupVersion 对象的列表。GroupVersion 对象通过 ID 与 Group 关联。

组的示意图,包含元数据和组版本的列表。

组版本

GroupVersion 对象可定义组成员资格。每个 GroupVersion 通过 ARN 引用一个 CoreDefinitionVersion 和其他组件版本。这些引用可确定组中要包括哪些实体。

通过 ARN 引用其他版本类型的组版本的示意图。

例如,要在组中包含三个 Lambda 函数、一个设备和两个订阅,GroupVersion 引用:

  • 包含所需核心的 CoreDefinitionVersion

  • 包含三个函数的 FunctionDefinitionVersion

  • 包含客户端设备的 DeviceDefinitionVersion

  • 包含两个订阅的 SubscriptionDefinitionVersion

部署到核心设备的 GroupVersion 决定了本地环境中的可用实体及其它们如何进行交互。

组组件

添加到组中的组件具有三级层次结构:

  • 引用给定类型的 DefinitionVersion 对象列表的定义。例如,DeviceDefinition 引用 DeviceDefinitionVersion 对象的列表。

  • 包含一组指定类型的实体的 DefinitionVersion。例如,DeviceDefinitionVersion 包含 Device 对象的列表。

  • 用于定义其属性和行为的各个实体。例如,Device 用于定义 AWS IoT 注册表中相应客户端设备的 ARN、其设备证书的 ARN,以及其本地影子是否自动与云同步。

    您可以向组中添加以下类型的实体:

以下示例 DeviceDefinition 会引用三个 DeviceDefinitionVersion 对象,每个都包含多个 Device 对象。一个组中一次只使用一个 DeviceDefinitionVersion

设备层次结构示意图,其中包含 DeviceDefinition、DeviceDefinitionVersion 和 Device 对象。

更新组

在 AWS IoT Greengrass API 中,您可以使用多个版本更新组的配置。版本是不变的,因此,若要添加、删除或更改组组件,必须创建包含新实体或已更新实体的 DefinitionVersion 对象。

您可以将新 DefinitionVersions 对象与新的或现有的 Definition 对象相关联。例如,您可以使用 CreateFunctionDefinition 操作来创建 FunctionDefinition(其中包含作为初始版本的 FunctionDefinitionVersion),也可以使用 CreateFunctionDefinitionVersion 操作并引用现有 FunctionDefinition

在创建组组件后,创建一个 GroupVersion,其中包含要包含在组中的所有 DefinitionVersion 对象。然后,部署 GroupVersion

要部署 GroupVersion,则必须引用包含一个 CoreCoreDefinitionVersion。所有引用的实体必须是组的成员。此外,Greengrass 服务角色必须与正在部署 GroupVersion 的 AWS 区域 中的 AWS 账户 关联。

注意

API 中的 Update 操作用于更改 Group 或组件 Definition 对象的名称。

更新引用 AWS 资源的实体

Greengrass Lambda 函数和密钥资源会定义 Greengrass 特定属性,并引用相应的 AWS 资源。要更新这些实体,您可以更改相应的 AWS 资源,而不是 Greengrass 对象。例如,Lambda 函数会引用 AWS Lambda 中的一个函数,并且定义特定于 Greengrass 组的生命周期和其他属性。

  • 要更新 Lambda 函数代码或打包依赖项,请在 AWS Lambda 中进行更改。在检索下一组部署的过程中,会从 AWS Lambda 中检索这些更改并将其复制到您的本地环境中。

  • 要更新 Greengrass 特定的属性,您可以创建一个包含已更新 Function 属性的 FunctionDefinitionVersion

注意

Greengrass Lambda 函数可以通过别名 ARN 或版本 ARN 引用 Lambda 函数。如果您引用别名 ARN(推荐),则在 AWS Lambda 中发布新的函数版本时不需要更新 FunctionDefinitionVersion(或 SubscriptionDefinitionVersion)。有关更多信息,请参阅 按别名或版本引用 Lambda 函数

另请参阅