配置 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 核心上,流管理器可以存储、处理和导出 IoT 设备数据。流管理器提供用于配置组级运行时设置的参数。这些设置适用于 Greengrass 核心上的所有流。您可以使用 AWS IoT 控制台或 AWS IoT Greengrass API 配置流管理器设置。更改在部署组后生效。

注意

配置流管理器后,您可以创建和部署在 Greengrass 核心上运行并与流管理器交互的 IoT 应用程序。这些 IoT 应用程序通常是用户定义的 Lambda 函数。有关更多信息,请参阅使用 StreamManagerClient 处理流

流管理器参数

流管理器提供以下允许您定义组级别设置的参数。所有参数都是可选的。

存储目录

参数名称: STREAM_MANAGER_STORE_ROOT_DIR

用于存储流的本地目录的绝对路径。此值必须以正斜杠开头(例如, /data)。

有关保护流数据安全的信息,请参阅本地数据安全性

AWS IoT Greengrass Core 最低版本:1.10.0

Server port

参数名称: STREAM_MANAGER_SERVER_PORT

用于与流管理器通信的本地端口号。默认为 8088

AWS IoT Greengrass Core 最低版本:1.10.0

验证客户端身份

参数名称: STREAM_MANAGER_AUTHENTICATE_CLIENT

指示客户端是否必须通过身份验证才能与流管理器交互。客户端和流管理器之间的所有交互都由 AWS IoT Greengrass 核心开发工具包控制。此参数确定哪些客户端可以调用 AWS IoT Greengrass 核心开发工具包来处理流。有关更多信息,请参阅客户端身份验证

有效值为 truefalse。默认值为 true(推荐)。

  • true。仅允许 Greengrass Lambda 函数作为客户端。Lambda 函数客户端使用内部 AWS IoT Greengrass 核心协议向 AWS IoT Greengrass Core SDK 进行身份验证。

  • false. 允许在 AWS IoT Greengrass 核心上运行的任何进程成为客户端。除非您的业务案例需要,否则请勿设置为 false。例如,仅当核心设备上的非 Lambda 进程必须直接与流管理器(例如在核心上运行的 Docker 容器)通信时,才将此值设置为 false

AWS IoT Greengrass Core 最低版本:1.10.0

最大带宽

参数名称: STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH

可用于导出数据的平均最大带宽(以千位/秒为单位)。默认设置允许无限制使用可用带宽。

AWS IoT Greengrass Core 最低版本:1.10.0

线程池大小

参数名称: STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE

可用于导出数据的最大活动线程数。默认为 5

最佳大小取决于您的硬件、流的量和计划的导出流数量。如果导出速度较慢,您可以调整此设置以找出适合您的硬件和业务案例的最佳大小。核心设备硬件的 CPU 和内存是限制因素。首先,您可以尝试将此值设置为等于设备上的处理器核心数。

请注意,不要设置大于硬件可以支持的大小。每个流都会消耗硬件资源,因此您应该尝试限制受约束设备上的导出流的数量。

AWS IoT Greengrass Core 最低版本:1.10.0

JVM 参数

参数名称: JVM_ARGS

在启动时传递给流管理器的自定义 Java 虚拟机参数。多个参数应该用空格分隔。

仅当您必须覆盖 JVM 使用的默认设置时才使用此参数。例如,如果计划导出大量的流,则可能需要增加默认堆大小。

AWS IoT Greengrass Core 最低版本:1.10.0

只读输入文件目录

参数名称: STREAM_MANAGER_READ_ONLY_DIRS

以逗号分隔的列表,列出了根文件系统以外存储输入文件的目录的绝对路径。流管理器读取文件并将其上传到 Amazon S3,并将这些目录挂载为只读。有关更多关于导出至 Amazon S3 的信息,请参阅 Amazon S3 对象

仅当满足以下条件时才使用此参数:

  • 导出到 Amazon S3 的流的输入文件目录位于以下位置之一:

    • 根文件系统以外的分区。

    • 在根文件系统中的 /tmp 下。

  • Greengrass 组的默认容器化Greengrass 容器

示例值: /mnt/directory-1,/mnt/directory-2,/tmp

AWS IoT Greengrass Core 最低版本:1.11.0

分段上传的最小大小

参数名称: STREAM_MANAGER_EXPORTER_S3_DESTINATION_MULTIPART_UPLOAD_MIN_PART_SIZE_BYTES

向 Amazon S3 进行分段上传的分段最小大小(以字节为单位)。流管理器使用此设置和输入文件的大小来确定如何对多部分 PUT 请求中的数据进行批处理。默认最小值为 5242880 字节 (5 MB)。

注意

流管理器使用流的 sizeThresholdForMultipartUploadBytes 属性来确定是以单段上传还是分段上传的形式导出到 Amazon S3。用户定义的 Lambda 函数在创建导出到 Amazon S3 的流时会设置此阈值。默认阈值为 5 MB。

AWS IoT Greengrass Core 最低版本:1.11.0

配置流管理器设置(控制台)

您可以使用 AWS IoT 控制台执行以下管理任务:

更改将在部署 Greengrass 组后生效。请参阅将数据流导出到 AWS Cloud(控制台),其中的教程演示了如何部署一个包含可与流管理器交互的 Lambda 函数的 Greengrass 组。

注意

使用控制台启用流管理器并部署组时,流管理器的内存大小默认设置为 4194304 KB (4 GB)。建议您将内存大小设置为至少 128000 KB。

 

检查流管理器是否已启用(控制台)

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

  2. 选择目标组。

  3. 选择 Lambda 函数选项卡

  4. 系统 Lambda 函数下,选择流管理器,然后选择编辑

  5. 检查启用或禁用状态。还会显示所有配置的自定义流管理器设置。

 

在组创建过程中启用或禁用流管理器(控制台)

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

  2. 选择 Create Group(创建组)。您在下一页上的选择决定了如何为组配置流管理器。

  3. 继续完成命名您的组,然后选择 Greengrass 核心页面。

  4. 选择创建组

  5. 在组配置页面上,选择 Lambda 函数选项卡,选择流管理器,然后选择编辑

    • 要使用默认设置启用流管理器,请选择 启用默认设置

       

    • 要使用自定义设置启用流管理器,请选择 Customize settings (自定义设置)

      1. 配置流管理器页面上,选择启用自定义设置

      2. Custom settings (自定义设置) 下,输入流管理器参数的值。有关更多信息,请参阅流管理器参数。将字段留空以允许 AWS IoT Greengrass 使用其默认值。

         

    • 要禁用直播管理器,请选择禁用

      1. Configure stream manager (配置流管理器) 页面上,选择 Disable (禁用)

         

  6. 选择 Save(保存)。

  7. 继续浏览剩余页面以创建您的组。

  8. 客户端设备页面上,下载安全资源,查看信息,然后选择完成

    注意

    启用流管理器后,必须在核心设备上安装 Java 8 运行时,然后再部署组。

 

为现有组启用或禁用流管理器(控制台)

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

  2. 选择目标组。

  3. 选择 Lambda 函数选项卡

  4. 系统 Lambda 函数下,选择流管理器,然后选择编辑

  5. 检查启用或禁用状态。还会显示所有配置的自定义流管理器设置。

 

更改流管理器设置(控制台)

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

  2. 选择目标组。

  3. 选择 Lambda 函数选项卡

  4. 系统 Lambda 函数下,选择流管理器,然后选择编辑

  5. 检查启用或禁用状态。还会显示所有配置的自定义流管理器设置。

  6. 选择 Save(保存)。

配置流管理器设置 (CLI)

在 AWS CLI 中,使用系统 GGStreamManager Lambda 函数配置流管理器。系统 Lambda 函数是 AWS IoT Greengrass 核心软件的组件。对于流管理器和其他一些系统 Lambda 函数,您可以通过管理 Greengrass 组中的相应 FunctionFunctionDefinitionVersion 对象来配置 Greengrass 功能。有关更多信息,请参阅AWS IoT Greengrass 组对象模型概述

您可以使用 API 执行以下管理任务。本节中的示例说明了如何使用 AWS CLI,但您也可以直接调用 AWS IoT Greengrass API 或使用 AWS SDK。

更改在部署组后生效。请参阅 将数据流导出到 AWS Cloud (CLI),其中的教程演示了如何部署一个包含可与流管理器交互的 Lambda 函数的 Greengrass 组。

提示

要查看核心设备流管理器是否启用并正在运行,您可以在设备上的终端中运行以下命令。

ps aux | grep -i 'streammanager'

 

检查流管理器是否启用 (CLI)

如果部署的函数定义版本包含系统 GGStreamManager Lambda 函数,则启用了流管理器。要进行检查,请执行以下操作;

  1. 获取目标 Greengrass 组和组版本的 ID。此过程假定这是最新的组和组版本。以下查询将返回最近创建的组。

    aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"

    或者,您也可以按名称查询。系统不要求组名称是唯一的,所以可能会返回多个组。

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

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

  2. 从输出中的目标组复制 IdLatestVersion 值。

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • latest-group-version-id 替换为复制的 LatestVersion

    aws greengrass get-group-version \ --group-id group-id \ --group-version-id latest-group-version-id
  4. 从输出中的 FunctionDefinitionVersionArn,获得函数定义的 ID 和函数定义版本。

    • 函数定义 ID 是 Amazon 资源名称(ARN)中 functions 段后面的 GUID。

    • 函数定义版本 ID 是 ARN 中 versions 段后面的 GUID。

    arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/function-definition-id/versions/function-definition-version-id
  5. 获取函数定义版本。

    • function-definition-id 替换为函数定义 ID。

    • function-definition-version-id 替换为函数定义版本 ID。

    aws greengrass get-function-definition-version \ --function-definition-id function-definition-id \ --function-definition-version-id function-definition-version-id

如果输出中的 functions 数组包含 GGStreamManager 函数,则启用了流管理器。为函数定义的任何环境变量都表示流管理器的自定义设置。

启用、禁用或配置流管理器 (CLI)

在 AWS CLI 中,使用系统 GGStreamManager Lambda 函数配置流管理器。更改在部署组后生效。

  • 要启用流管理器,请在函数定义版本的 functions 数组中包含 GGStreamManager。要配置自定义设置,请为相应的流管理器参数定义环境变量。

  • 要禁用流管理器,请从函数定义版本的 functions 数组中删除 GGStreamManager

带默认设置的流管理器

以下示例配置使用默认设置启用流管理器。它将任意函数 ID 设置为 streamManager

{ "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }
注意

对于 FunctionConfiguration 属性,您可能知道以下内容:

  • 在默认设置下,MemorySize 设置为 4194304 KB (4 GB)。您可随时更改此值。建议您将 MemorySize 设置为至少 128000 KB。

  • Pinned 必须设置为 true

  • Timeout 是函数定义版本所需的,但 GGStreamManager 不使用它。

带自定义设置的流管理器

以下示例配置使用针对存储目录、服务器端口和线程池大小参数的自定义值来启用流管理器。

{ "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "Environment": { "Variables": { "STREAM_MANAGER_STORE_ROOT_DIR": "/data", "STREAM_MANAGER_SERVER_PORT": "1234", "STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE": "4" } }, "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }

对于未指定为环境变量的流管理器参数,AWS IoT Greengrass 将使用默认值。

带有 Amazon S3 自定义导出设置的流管理器

以下示例配置为流管理器启用了上传目录的自定义值和最小分段上传大小参数。

{ "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "Environment": { "Variables": { "STREAM_MANAGER_READ_ONLY_DIRS": "/mnt/directory-1,/mnt/directory-2,/tmp", "STREAM_MANAGER_EXPORTER_S3_DESTINATION_MULTIPART_UPLOAD_MIN_PART_SIZE_BYTES": "10485760" } }, "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }

 

启用、禁用或配置流管理器 (CLI)
  1. 获取目标 Greengrass 组和组版本的 ID。此过程假定这是最新的组和组版本。以下查询将返回最近创建的组。

    aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"

    或者,您也可以按名称查询。系统不要求组名称是唯一的,所以可能会返回多个组。

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

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

  2. 从输出中的目标组复制 IdLatestVersion 值。

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • latest-group-version-id 替换为复制的 LatestVersion

    aws greengrass get-group-version \ --group-id group-id \ --group-version-id latest-group-version-id
  4. 从输出中复制 CoreDefinitionVersionArn 和所有其他版本的 ARN(FunctionDefinitionVersionArn 除外)。在创建组版本时,将使用这些值。

  5. 在输出的 FunctionDefinitionVersionArn 中,复制函数定义的 ID。该 ID 是 ARN 中的 functions 段后面的 GUID,如以下示例所示。

    arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
    注意

    或者,您可以通过运行 create-function-definition 命令以创建一个函数定义,然后从输出中复制该 ID。

  6. 在函数定义中添加一个函数定义版本。

    • 使用为函数定义复制的 替换 function-definition-idId

    • functions 数组中,包括要在 Greengrass 核心上提供的所有其他函数。您可以使用 get-function-definition-version 命令获取现有函数的列表。

     

    使用默认设置启用流管理器

    以下示例通过在 functions 数组中包含 GGStreamManager 函数来启用流管理器。此示例使用流管理器参数的默认值。

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[ { "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }, { "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias", "FunctionConfiguration": { "Executable": "myLambdaFunction.function_handler", "MemorySize": 16000, "Pinned": true, "Timeout": 5 }, "Id": "myLambdaFunction" }, ... more user-defined functions ] }'
    注意

    示例中的 myLambdaFunction 函数表示用户定义的 Lambda 函数之一。

    使用自定义设置启用流管理器

    以下示例通过在 functions 数组中包含 GGStreamManager 函数来启用流管理器。除非要更改默认值,否则所有流管理器设置都是可选的。此示例演示如何使用环境变量来设置自定义值。

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[ { "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "Environment": { "Variables": { "STREAM_MANAGER_STORE_ROOT_DIR": "/data", "STREAM_MANAGER_SERVER_PORT": "1234", "STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE": "4" } }, "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }, { "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias", "FunctionConfiguration": { "Executable": "myLambdaFunction.function_handler", "MemorySize": 16000, "Pinned": true, "Timeout": 5 }, "Id": "myLambdaFunction" }, ... more user-defined functions ] }'
    注意

    对于 FunctionConfiguration 属性,您可能知道以下内容:

    • 在默认设置下,MemorySize 设置为 4194304 KB (4 GB)。您可随时更改此值。建议您将 MemorySize 设置为至少 128000 KB。

    • Pinned 必须设置为 true

    • Timeout 是函数定义版本所需的,但 GGStreamManager 不使用它。

    禁用流管理器

    以下示例省略了用于禁用流管理器的 GGStreamManager 函数。

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[ { "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias", "FunctionConfiguration": { "Executable": "myLambdaFunction.function_handler", "MemorySize": 16000, "Pinned": true, "Timeout": 5 }, "Id": "myLambdaFunction" }, ... more user-defined functions ] }'
    注意

    如果不需要部署任何 Lambda 函数,则可以完全省略函数定义版本。

  7. 从输出中复制函数定义版本的 Arn

  8. 创建一个包含系统 Lambda 函数的组版本。

    • group-id 替换为组的 Id

    • core-definition-version-arn 替换为从最新组版本中复制的 CoreDefinitionVersionArn

    • 使用为新函数定义版本复制的 替换 function-definition-version-arnArn

    • 替换从最新组版本中复制的其他组组件(例如 SubscriptionDefinitionVersionArnDeviceDefinitionVersionArn)的 ARN。

    • 删除任何未使用的参数。例如,如果组版本不包含任何资源,请删除 --resource-definition-version-arn

    aws greengrass create-group-version \ --group-id group-id \ --core-definition-version-arn core-definition-version-arn \ --function-definition-version-arn function-definition-version-arn \ --device-definition-version-arn device-definition-version-arn \ --logger-definition-version-arn logger-definition-version-arn \ --resource-definition-version-arn resource-definition-version-arn \ --subscription-definition-version-arn subscription-definition-version-arn
  9. 从输出中复制 Version。这是新组版本的 ID。

  10. 用新组版本替换组。

    • 使用为组复制的 替换 group-idId

    • 使用为新组版本复制的 替换 group-version-idVersion

    aws greengrass create-deployment \ --group-id group-id \ --group-version-id group-version-id \ --deployment-type NewDeployment

 

如果您想稍后再次编辑流管理器设置,请按照以下步骤进行操作。请确保创建一个函数定义版本,其中包括具有更新配置的 GGStreamManager 函数。组版本必须引用要部署到核心的所有组件版本 ARN。更改在部署组后生效。

另请参阅