配置 Amazon IoT Greengrass 流管理器 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

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

配置 Amazon IoT Greengrass 流管理器

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

注意

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

流管理器参数

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

存储目录

参数名称: STREAM_MANAGER_STORE_ROOT_DIR

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

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

最低Amazon IoT GreengrassCore 版本:1.10.0

Server port

参数名称: STREAM_MANAGER_SERVER_PORT

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

最低Amazon IoT GreengrassCore 版本:1.10.0

验证客户端身份

参数名称: STREAM_MANAGER_AUTHENTICATE_CLIENT

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

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

  • true. 只允许 Greengrass Lambda 作为客户端运行。Lambda 函数客户端使用内部函数Amazon IoT Greengrass要使用进行身份验证的核心协议Amazon IoT GreengrassCore 开发工具包。

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

最低Amazon IoT GreengrassCore 版本:1.10.0

最大带宽

参数名称: STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH

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

最低Amazon IoT GreengrassCore 版本:1.10.0

线程池大小

参数名称: STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE

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

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

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

最低Amazon IoT GreengrassCore 版本:1.10.0

JVM 参数

参数名称: JVM_ARGS

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

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

最低Amazon IoT GreengrassCore 版本:1.10.0

只读输入文件目录

参数名称: STREAM_MANAGER_READ_ONLY_DIRS

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

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

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

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

    • UNDER/tmp在根文件系统上。

  • 这些区域有:默认容器化Greengrass 组的Greengrass 容器.

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

最低Amazon IoT GreengrassCore 版本: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。

最低Amazon IoT GreengrassCore 版本:1.11.0

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

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

更改将在部署 Greengrass 组后生效。有关演示如何部署包含与流管理器交互的 Lambda 函数的 Greengrass 组的教程,请参阅将数据流导出到Amazon Web Services 云(console).

注意

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

 

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

  1. 在Amazon IoT控制台导航窗格,在Manage展开Greengrass,然后选择组 (V1).

  2. 选择目标组。

  3. 选择Lambda 函数选项卡.

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

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

 

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

  1. 在Amazon IoT控制台导航窗格,在Manage展开Greengrass,然后选择组 (V1).

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

  3. 继续执行为您的群组命名然后选择一个Greengrass 核心页.

  4. 选择创建组

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

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

       

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

      1. 在存储库的配置流管理器页面上,选择使用自定义设置启用.

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

         

    • 要禁用流管理器,请选择禁用.

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

         

  6. 选择 Save(保存)。

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

  8. 在存储库的Client 设备页面上,下载安全资源,查看信息,然后选择Finish.

    注意

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

 

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

  1. 在Amazon IoT控制台导航窗格,在Manage展开Greengrass,然后选择组 (V1).

  2. 选择目标组。

  3. 选择Lambda 函数选项卡.

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

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

 

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

  1. 在Amazon IoT控制台导航窗格,在Manage展开Greengrass,然后选择组 (V1).

  2. 选择目标组。

  3. 选择Lambda 函数选项卡.

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

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

  6. 选择 Save(保存)。

配置流管理器设置 (CLI)

在Amazon CLI,使用系统GGStreamManager用于配置流管理器的 Lambda 函数。系统 Lambda 函数是以下的组件Amazon IoT GreengrassCore 软件。对于流管理器和其他一些系统 Lambda 函数 Greengrass 通过管理对应的FunctionFunctionDefinitionVersionGreengrass 组中的对象。有关更多信息,请参阅 Amazon IoT Greengrass 组对象模型概述

您可以使用该 API 执行以下管理任务。本节中的示例向您展示如何使用Amazon CLI,但您也可调用Amazon IoT Greengrass直接使用 API 或使用Amazon开发工具包包。

更改在部署组后生效。有关演示如何使用与流管理器交互的 Lambda 函数部署 Greengrass 组的教程,请参阅将数据流导出到Amazon Web Services 云(CLI).

提示

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

ps aux | grep -i 'streammanager'

 

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

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

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

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

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

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

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

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

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • Replacelatest-group-version-idLatestVersion你复制了文档。

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

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

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

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

    • Replacefunction-definition-id使用函数定义 ID。

    • Replacefunction-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)

在Amazon 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" }

Amazon 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']"
    注意

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

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

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • Replacelatest-group-version-idLatestVersion你复制了文档。

    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. 在函数定义中添加一个函数定义版本。

    • Replacefunction-definition-idId为函数定义复制的。

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

     

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

    以下示例通过包括GGStreamManagerfunctionfunctions数组。此示例使用流管理器参数的默认值。

    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

    • Replacecore-definition-version-arnCoreDefinitionVersionArn从最新的组版本中复制的。

    • Replacefunction-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

    • Replacegroup-version-idVersion为新组版本复制的。

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

 

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

另请参阅