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

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

配置 AWS IoT Greengrass 流管理器

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

注意

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

流管理器参数

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

存储目录

参数名称: STREAM_MANAGER_STORE_ROOT_DIR

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

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

最低 AWS IoT Greengrass 核心版本: 1.10.0

服务器端口

参数名称: STREAM_MANAGER_SERVER_PORT

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

最低 AWS IoT Greengrass 核心版本: 1.10.0

验证客户端身份

参数名称: STREAM_MANAGER_AUTHENTICATE_CLIENT

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

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

  • true。 仅允许将 Greengrass Lambda 函数用作客户端。Lambda 函数客户端使用内部 AWS IoT Greengrass Core 协议对 AWS IoT Greengrass Core 开发工具包 进行身份验证。

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

最低 AWS IoT Greengrass 核心版本: 1.10.0

最大带宽

参数名称: STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH

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

最低 AWS IoT Greengrass 核心版本: 1.10.0

线程池大小

参数名称: STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE

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

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

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

最低 AWS IoT Greengrass 核心版本: 1.10.0

JVM 参数

参数名称: JVM_ARGS

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

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

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

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

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

更改将在部署 Greengrass 组后生效。有关说明如何部署包含与流管理器交互的 Lambda 函数的 Greengrass 组的教程,请参阅将数据流导出到 AWS 云(控制台)

注意

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

 

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

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

  2. 选择目标组。

  3. 选择 Settings

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

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

 

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

  1. 在 AWS IoT 控制台中,选择 Greengrass,然后选择 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 (自定义设置) 下,输入流管理器参数的值。有关更多信息,请参阅流管理器参数。将字段留空以允许 AWS IoT Greengrass 使用其默认值。

           

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

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

           

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

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

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

    注意

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

 

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

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

  2. 选择目标组。

  3. 选择 Settings

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

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

  6. 选择 Save (保存)

 

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

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

  2. 选择目标组。

  3. 选择 Settings

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

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

  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 开发工具包。

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

提示

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

ps aux | grep -i 'streammanager'

 

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

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

  1. 获取 IDs 目标Greengrass组和组版本的。此操作流程假设这是最新的组和组版本。以下查询 退货 最近创建的组。

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

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

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

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

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

  3. 获取最新的组版本。

    • Replace group-idId 您复制的。

    • Replace latest-group-version-idLatestVersion 您复制的。

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

    • 函数定义 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. 获取函数定义版本。

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

    • Replace 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-cn: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-cn: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-cn: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. 获取 IDs 目标Greengrass组和组版本的。此操作流程假设这是最新的组和组版本。以下查询 退货 最近创建的组。

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

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

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

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

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

  3. 获取最新的组版本。

    • Replace group-idId 您复制的。

    • Replace latest-group-version-idLatestVersion 您复制的。

    aws greengrass get-group-version \ --group-id group-id \ --group-version-id latest-group-version-id
  4. 从输出中复制 CoreDefinitionVersionArn 和所有其他版本的 ARNs,但 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. 在函数定义中添加一个函数定义版本。

    • Replace function-definition-id 替换为您为函数定义复制的 Id

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

     

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

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

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[ { "FunctionArn": "arn:aws-cn:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "MemorySize": 4194304, "Pinned": true, "Timeout": 3 }, "Id": "streamManager" }, { "FunctionArn": "arn:aws-cn: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-cn: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-cn: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-cn: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 函数的组版本。

    • Replace group-idId 为组。

    • Replace core-definition-version-arnCoreDefinitionVersionArn 从最新的组版本复制的。

    • Replace function-definition-version-arnArn 为新函数定义版本所复制的。

    • 更换 ARNs 其他组组件(例如, SubscriptionDefinitionVersionArnDeviceDefinitionVersionArn)从最新的组版本拷贝。

    • 删除任何未使用的参数。例如,如果组版本不包含任何资源,请删除 --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. 用新组版本替换组。

    • Replace group-idId 您为组拷贝的。

    • Replace group-version-idVersion 为新组版本拷贝的。

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

 

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

另请参阅