本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
与组件生命周期交互
使用组件生命周期 IPC 服务可以执行以下操作:
-
更新核心设备上的组件状态。
-
订阅组件状态更新。
-
阻止 Nucleus 在部署期间停止组件以应用更新。
-
暂停和恢复组件进程。
主题
最低 SDK 版本
下表列出了在与组件生命周期交互时必须使用的最低版本。 Amazon IoT Device SDK
SDK | 最低版本 |
---|---|
v1.2.10 |
|
v1.5.3 |
|
v1.17.0 |
|
v1.12.0 |
授权
要暂停或恢复自定义组件中的其它组件,必须定义允许组件管理其它组件的授权策略。有关定义授权策略的信息,请参阅授权组件执行 IPC 操作。
组件生命周期管理的授权策略具有以下属性。
IPC 服务标识符:aws.greengrass.ipc.lifecycle
操作 | 描述 | 资源 |
---|---|---|
|
允许某个组件暂停您指定的组件。 |
组件名称,或使用 |
|
允许某个组件恢复您指定的组件。 |
组件名称,或使用 |
|
允许某个组件暂停和恢复您指定的组件。 |
组件名称,或使用 |
授权策略示例
您可以参考以下授权策略示例,帮助您为组件配置授权策略。
例 示例授权策略
以下示例授权策略允许组件暂停和恢复所有组件。
{ "accessControl": { "aws.greengrass.ipc.lifecycle": { "
com.example.MyLocalLifecycleComponent
:lifecycle:1": { "policyDescription": "Allows access to pause/resume all components.", "operations": [ "aws.greengrass#PauseComponent", "aws.greengrass#ResumeComponent" ], "resources": [ "*" ] } } } }
UpdateState
更新核心设备上的组件状态。
请求
此操作的请求包含以下参数:
state
-
要设置的状态。此枚举
LifecycleState
包含以下值:-
RUNNING
-
ERRORED
-
响应
此操作在其响应中未提供任何信息。
SubscribeToComponentUpdates
订阅即可在 Amazon IoT Greengrass 核心软件更新组件之前接收通知。该通知指定了在更新过程中 Nucleus 是否会重启。
只有当部署的组件更新策略指定通知组件时,Nucleus 才会发送更新通知。默认行为是通知组件。有关更多信息,请参阅创建部署以及您在调用CreateDeployment操作时可以提供的DeploymentComponentUpdatePolicy对象。
重要
本地部署不会在更新之前通知组件。
此操作是一种订阅操作,您可以在其中订阅事件消息流。要使用此操作,请定义一个流响应处理程序,其中包含处理事件消息、错误和流关闭的函数。有关更多信息,请参阅 订阅 IPC 事件流。
事件消息类型:ComponentUpdatePolicyEvents
提示
您可以按照教程了解如何开发一个有条件地推迟组件更新的组件。有关更多信息,请参阅 教程:开发可延迟组件更新的 Greengrass 组件。
请求
此操作的请求没有任何参数。
响应
此操作的响应包含以下信息:
messages
-
通知消息流。此对象
ComponentUpdatePolicyEvents
包含以下信息:preUpdateEvent
(Python:pre_update_event
)-
(可选)指示 Nucleus 想要更新组件的事件。您可以通过 DeferComponentUpdate 操作进行响应,以确认更新或推迟更新,直到组件准备好重启为止。此对象
PreComponentUpdateEvent
包含以下信息:deploymentId
(Python:deployment_id
)-
更新组件的 Amazon IoT Greengrass 部署的 ID。
isGgcRestarting
(Python:is_ggc_restarting
)-
Nucleus 是否需要重启才能应用更新。
postUpdateEvent
(Python:post_update_event
)-
(可选)指示 Nucleus 已更新组件的事件。此对象
PostComponentUpdateEvent
包含以下信息:deploymentId
(Python:deployment_id
)-
更新组件的 Amazon IoT Greengrass 部署的 ID。
注意
此功能需要 v2.7.0 或更高版本的 Greengrass Nucleus 组件。
DeferComponentUpdate
确认或推迟使用 SubscribeToComponentUpdates 发现的组件更新。您可以指定在 Nucleus 再次检查组件是否准备好让组件更新继续之前等待的时长。您也可以使用此操作告知 Nucleus 您的组件已准备好进行更新。
如果某个组件未响应组件更新通知,则 Nucleus 会按您在部署组件更新策略中指定的时间等待。超时之后,Nucleus 继续部署。组件更新超时默认值为 60 秒。有关更多信息,请参阅创建部署以及您在调用CreateDeployment操作时可以提供的DeploymentComponentUpdatePolicy对象。
提示
您可以按照教程了解如何开发一个有条件地推迟组件更新的组件。有关更多信息,请参阅 教程:开发可延迟组件更新的 Greengrass 组件。
请求
此操作的请求包含以下参数:
deploymentId
(Python:deployment_id
)-
要推迟的 Amazon IoT Greengrass 部署的 ID。
message
-
(可选)要推迟更新的组件的名称。
默认为发出请求的组件名称。
recheckAfterMs
(Python:recheck_after_ms
)-
推迟更新的时长(以毫秒为单位)。Nucleus 会等待这段时间,然后发送另一个可以通过 SubscribeToComponentUpdates 发现的
PreComponentUpdateEvent
。指定
0
即可确认更新。这会告知 Nucleus 您的组件已准备好进行更新。默认为零毫秒,这意味着确认更新。
响应
此操作在其响应中未提供任何信息。
PauseComponent
此功能适用于 Greengrass nucleus 组件的 v2.4.0 及更高版本。 Amazon IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。
暂停核心设备上的组件进程。要恢复组件,请使用ResumeComponent操作。
只能暂停通用组件。如果您尝试暂停任何其它类型的组件,则此操作将引发 InvalidRequestError
。
注意
此操作无法暂停容器化进程,例如 Docker 容器。要暂停和恢复 Docker 容器,可以使用 docker pause
此操作不会暂停组件依赖关系或依赖于您暂停的组件的组件。当暂停依赖于另一个组件的组件时,请考虑这种行为,因为依赖组件在暂停依赖关系时可能会遇到问题。
当您重启或关闭已暂停的组件时(例如通过部署),Greengrass nucleus 会恢复该组件并运行其关闭生命周期。有关重启组件的更多信息,请参阅 RestartComponent。
重要
要使用此操作,您必须定义授权策略来授予使用此操作的权限。有关更多信息,请参阅 授权。
最低 SDK 版本
下表列出了暂停和恢复组件时 Amazon IoT Device SDK 必须使用的最低版本。
SDK | 最低版本 |
---|---|
v1.4.3 |
|
v1.6.2 |
|
v1.13.1 |
|
v1.12.0 |
请求
此操作的请求包含以下参数:
componentName
(Python:component_name
)-
要暂停的组件的名称,该组件必须是通用组件。有关更多信息,请参阅 组件类型。
响应
此操作在其响应中未提供任何信息。
ResumeComponent
此功能适用于 Greengrass nucleus 组件的 v2.4.0 及更高版本。 Amazon IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。
恢复核心设备上的组件进程。要暂停组件,请使用PauseComponent操作。
您只能恢复已暂停的组件。如果您尝试恢复未暂停的组件,则此操作将引发 InvalidRequestError
。
重要
要使用此操作,您必须定义授权策略来授予执行此操作的权限。有关更多信息,请参阅 授权。
最低 SDK 版本
下表列出了暂停和恢复组件时 Amazon IoT Device SDK 必须使用的最低版本。
SDK | 最低版本 |
---|---|
v1.4.3 |
|
v1.6.2 |
|
v1.13.1 |
|
v1.12.0 |
请求
此操作的请求包含以下参数:
componentName
(Python:component_name
)-
要恢复的组件的名称。
响应
此操作在其响应中未提供任何信息。