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

配置 AWS IoT Greengrass 流管理器

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

流管理器参数

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

存储目录

参数名称: STREAM_MANAGER_STORE_ROOT_DIR

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

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

Server port

参数名称: STREAM_MANAGER_SERVER_PORT

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

验证客户端身份

参数名称: 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

最大带宽

参数名称: STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH

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

线程池大小

参数名称: STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE

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

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

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

JVM 参数

参数名称: JVM_ARGS

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

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

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

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

更改将在部署 Greengrass 组后生效。

注意

使用控制台启用流管理器并部署组时,流管理器的内存限制设置为 4 GB。

 

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

  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. 选择 Next

  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. 选择保存

配置流管理器设置 (CLI)

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

您可以使用 CLI 执行以下管理任务:

更改在部署组后生效。

提示

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

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 是 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-cn:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "MemorySize": 128000, "Pinned": true, "Timeout": 3 }, "Id": "StreamManager" }

AWS IoT Greengrass 将为省略的任何流管理器参数使用默认值。有关使用默认设置启用流管理器的端到端教程,请参阅将数据流导出到 AWS 云 (CLI)

带自定义设置的流管理器

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

{ "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": 128000, "Pinned": true, "Timeout": 3 }, "Id": "StreamManager" }

对于 FunctionConfiguration 参数,MemorySize 至少应该是 128000Pinned 必须设置为 true

注意

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

 

  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 是 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。

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

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

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

     

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

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

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[ { "FunctionArn": "arn:aws-cn:lambda:::function:GGStreamManager:1", "FunctionConfiguration": { "MemorySize": 128000, "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": 128000, "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 ] }'

    MemorySize 至少应该为 128000Pinned 必须设置为 true

    注意

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

    禁用流管理器

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

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

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

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

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

    • group-id 替换为组的 Id

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

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

    • 替换从最新组版本中复制的其他组组件(例如 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
  8. 从输出中复制 Version。这是新组版本的 ID。

  9. 用新组版本替换组。

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

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

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

若要更新这些设置,您需要创建一个函数定义版本,其中包括具有更新配置的 GGStreamManager 函数。FunctionDefinitionVersion 中的 functions 数组必须包含要部署到核心的所有 Lambda 函数。您可以使用 get-function-definition-version 命令从现有的函数定义版本中获取 Greengrass Lambda 函数。更改在部署组后生效。

另请参阅