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

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

配置 Amazon IoT Greengrass 流管理器

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

注意

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

流管理器参数

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

存储目录

参数名称: STREAM_MANAGER_STORE_ROOT_DIR

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

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

最低Amazon IoT Greengrass核心版本:1.10.0

Server port

参数名称: STREAM_MANAGER_SERVER_PORT

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

最低Amazon IoT Greengrass核心版本:1.10.0

验证客户端身份

参数名称: STREAM_MANAGER_AUTHENTICATE_CLIENT

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

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

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

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

最低Amazon IoT Greengrass核心版本:1.10.0

最大带宽

参数名称: STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH

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

最低Amazon IoT Greengrass核心版本:1.10.0

线程池大小

参数名称: STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE

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

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

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

最低Amazon IoT Greengrass核心版本:1.10.0

JVM 参数

参数名称: JVM_ARGS

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

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

最低Amazon IoT Greengrass核心版本:1.10.0

只读输入文件目录

参数名称: STREAM_MANAGER_READ_ONLY_DIRS

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

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

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

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

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

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

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

最低Amazon IoT Greengrass核心版本: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 Greengrass核心版本:1.11.0

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

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

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

注意

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

 

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

  1. 在Amazon IoT控制台的导航窗格中,选择Greengrass经典 (V1)Groups.

  2. 选择目标组。

  3. 选择 Settings

  4. Stream manager (流管理器) 下,检查启用或禁用状态。还会显示所有配置的自定义流管理器设置。

    
                            “设置” 页面上的 “流管理器” 部分。Amazon IoT控制台。

 

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

  1. 在Amazon IoT控制台的导航窗格中,选择Greengrass经典 (V1)Groups.

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

  3. 要使用默认组设置创建组,该组也启用具有默认流管理器设置的流管理器:

    1. 选择 Use default creation (使用默认创建)

    2. 跳至步骤 5

  4. 要使用自定义组设置创建组,请执行以下操作:

    1. 选择 Customize (自定义)

    2. 继续完成 Name your Group (命名您的组)Attach an IAM Role to your Group (将 IAM 角色附加到您的组) 页面。

    3. Stream manager (流管理器) 页面上,为组配置流管理器:

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

         

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

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

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

           

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

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

           

      
                            创建组工作流中的流管理器页面。
  5. 选择 Next (下一步)

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

  7. Connect your Core device (连接核心设备) 页面上,下载安全资源,查看信息,然后选择 Finish (完成)

    注意

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

 

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

  1. 在Amazon IoT控制台的导航窗格中,选择Greengrass经典 (V1)Groups.

  2. 选择目标组。

  3. 选择 Settings

  4. 启用或禁用状态与任何自定义流管理器设置一起显示在 Stream manager (流管理器) 下。选择 Edit

  5. 选择 Enable (启用)Disable (禁用)

  6. 选择 Save

 

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

  1. 在Amazon IoT控制台的导航窗格中,选择Greengrass经典 (V1)Groups.

  2. 选择目标组。

  3. 选择 Settings

  4. 启用或禁用状态与任何自定义流管理器设置一起显示在 Stream manager (流管理器) 下。选择 Edit

  5. 编辑流管理器参数的值。将字段留空以允许 Amazon IoT Greengrass 对相应参数使用默认值。

  6. 选择 Save

配置流管理器设置 (CLI)

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

您可以使用 API 执行以下管理任务。本节中的示例向您展示如何使用Amazon CLI,但您也可以调用Amazon IoT GreengrassAPI 直接或使用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

    • 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 是 GUID 后面的functions区域中的 Amazon 资源名称 (ARN) 中的区域。

    • 函数定义版本 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)

在Amazon CLI,请使用系统GGStreamManagerLambda 函数配置流管理器。更改在部署组后生效。

  • 要启用流管理器,请在函数定义版本的 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 千千克。

  • 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

    • 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 命令获取现有函数的列表。

     

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

    以下示例启用流管理器,方法是包含GGStreamManager函数functions属性数组。此示例使用流管理器参数的默认值。

    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 千千克。

    • 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。更改在部署组后生效。

另请参阅