本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
与组件生命周期交互
使用组件生命周期 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 Core 软件更新组件之前接收通知。该通知指定了在更新过程中 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
)-
要恢复的组件的名称。
响应
此操作在其响应中未提供任何信息。