获取部署和组件运行状况通知 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

获取部署和组件运行状况通知

亚马逊 EventBridge 事件规则向您提供有关您的设备收到的 Greengrass 部署以及设备上已安装组件的状态变更的通知。 EventBridge 提供描述Amazon资源变化的近乎实时的系统事件流。 Amazon IoT Greengrass尽最大努力将 EventBridge 这些事件发送到。这意味着,Amazon IoT Greengrass尝试将所有事件发送到, EventBridge 但在极少数情况下,事件可能无法传送。此外,Amazon IoT Greengrass可能会发送给定事件的多个副本,这意味着您的事件侦听器可能不会按照事件发生的顺序接收事件。

注意

Amazon EventBridge 是一项事件总线服务,您可以使用它来连接应用程序与来自各种来源的数据,例如 Greengrass 核心设备以及部署和组件通知。有关更多信息,请参阅什么是亚马逊 EventBridge? 在《亚马逊 EventBridge 用户指南》中。

部署状态更改事件

Amazon IoT Greengrass当部署进入以下状态时会发出一个事件:FAILEDSUCCEEDED和。COMPLETED您可以创建一条 EventBridge 规则,该规则适用于所有状态转换或向指定状态的过渡。当部署进入启动规则的状态时, EventBridge 调用规则中定义的目标操作。这样,您就可以发送通知、捕获事件信息、采取纠正措施或启动其他事件以响应状态更改。例如,您可以为以下使用案例创建规则:

  • 启动部署后操作,例如下载资产和通知人员。

  • 在部署成功或失败时发送通知。

  • 发布关于部署事件的自定义指标。

部署状态更改的事件采用以下格式:

{ "version":"0", "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8", "detail-type":"Greengrass V2 Effective Deployment Status Change", "source":"aws.greengrass", "account":"123456789012", "region":"us-west-2", "time":"2018-03-22T00:38:11Z", "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"], "detail":{ "deploymentId": "4f38f1a7-3dd0-42a1-af48-EXAMPLE09681", "coreDeviceExecutionStatus": "FAILED|SUCCEEDED|COMPLETED", "statusDetails": { "errorStack": ["DEPLOYMENT_FAILURE", "ARTIFACT_DOWNLOAD_ERROR", "S3_ERROR", "S3_ACCESS_DENIED", "S3_HEAD_OBJECT_ACCESS_DENIED"], "errorTypes": ["DEPENDENCY_ERROR", "PERMISSION_ERROR"], }, "reason": "S3_HEAD_OBJECT_ACCESS_DENIED: FAILED_NO_STATE_CHANGE: Failed to download artifact name: 's3://pentest27/nucleus/281/aws.greengrass.nucleus.zip' for component aws.greengrass.Nucleus-2.8.1, reason: S3 HeadObject returns 403 Access Denied. Ensure the IAM role associated with the core device has a policy granting s3:GetObject. null (Service: S3, Status Code: 403, Request ID: HR94ZNT2161DAR58, Extended Request ID: wTX4DDI+qigQt3uzwl9rlnQiYlBgwvPm/KJFWeFAn9t1mnGXTms/luLCYANgq08RIH+x2H+hEKc=)" } }

您可以创建规则和事件,以更新您的部署状态。当部署以、、OR 的形式完成时 FAILEDSUCCEEDED,就会启动事件COMPLETED。如果在核心设备上部署失败,您将收到详细的响应,说明部署失败的原因。有关部署错误代码的更多信息,请参阅详细的部署错误代码

部署状态
  • FAILED. 部署失败。

  • SUCCEEDED。 以事物组为目标的部署成功完成。

  • COMPLETED。 针对某件事的部署成功完成。

可能是事件重复或者顺序颠倒。要确定事件的顺序,请使用 time 属性。

有关errorStacks和中错误代码的完整列表errorTypes,请参阅详细的部署错误代码详细的组件状态码

组件状态更改事件

Amazon IoT Greengrass当组件进入以下状态时会发出一个事件:ERRORED和。BROKEN部署完成后,Greengrass 还会发出一个事件。您可以创建一条 EventBridge 规则,该规则适用于所有状态转换或向指定状态的过渡。当已安装的组件进入启动规则的状态时,将 EventBridge 调用规则中定义的目标操作。这样,您就可以发送通知、捕获事件信息、采取纠正措施或启动其他事件以响应状态更改。

组件状态更改的事件使用以下格式:

{ "version":"0", "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8", "detail-type":"Greengrass V2 Installed Component Status Change", "source":"aws.greengrass", "account":"123456789012", "region":"us-west-2", "time":"2018-03-22T00:38:11Z", "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"], "detail": { "components": [ { "componentName": "MyComponent", "componentVersion": "1.0.0", "root": true, "lifecycleState": "ERRORED|BROKEN", "lifecycleStatusCodes": ["STARTUP_ERROR"], "lifecycleStateDetails": "An error occurred during startup. The startup script exited with code 1." } ] } }

您可以创建规则和事件,以更新已安装组件的状态。当组件在设备上改变状态时,就会启动一个事件。您将收到一份详细的回复,其中解释了组件出错或损坏的原因。您还将收到一个指示失败原因的状态码。有关组件状态代码的更多信息,请参阅详细的组件状态码

创建 EventBridge 规则的先决条件

在为创建 EventBridge 规则之前Amazon IoT Greengrass,请执行以下操作:

  • 熟悉中的事件、规则和目标。 EventBridge

  • 创建和配置您的 EventBridge 规则调用的目标。规则可以调用许多类型的目标,包括:

    • Amazon Simple Notification Service (Amazon SNS)

    • Amazon Lambda 函数

    • Amazon Kinesis Video Streams

    • Amazon Simple Queue Service(Amazon SQS)队列

有关更多信息,请参阅什么是亚马逊 EventBridge? 以及《亚马逊 EventBridge 用户指南》 EventBridge中的 “亚马逊入门”。

配置设备运行状况通知(控制台)

使用以下步骤创建 EventBridge 规则,以便在群组的部署状态发生变化时发布 Amazon SNS 主题。这样,Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。有关更多信息,请参阅 Amazon EventBridge 用户指南中的创建针对来自Amazon资源的事件触发的 EventBridge 规则

  1. 打开亚马逊 EventBridge控制台

  2. 在导航窗格中,选择规则

  3. 选择创建规则

  4. 为规则输入名称和描述。

    规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

  5. 对于事件总线,请选择要与此规则关联的事件总线。如果您希望此规则对来自您自己的账户的匹配事件触发,请选择 Amazon默认事件总线。当您账户中的某个 Amazon 服务发出一个事件时,它始终会发送到您账户的默认事件总线。

  6. 对于规则类型,选择具有事件模式的规则

  7. 选择下一步

  8. 对于事件源,选择 Amazon 事件

  9. 事件模式中,选择 Amazon服务

  10. 对于 Amazon 服务,选择 Greengrass。

  11. 对于事件类型,请从以下选项中进行选择:

    • 对于部署事件,请选择 Greengrass V2 有效部署状态更改。

    • 对于组件事件,请选择 Greengrass V2 已安装组件状态更改。

  12. 选择 Next(下一步)

  13. 对于目标类型,选择Amazon 服务

  14. 选择目标 下,配置您的目标。此示例使用了 Amazon SNS 主题,而您可以配置其他目标类型来发送通知。

    1. 对于 Target (目标),选择 SNS topic (SNS 主题)

    2. 对于 Topic (主题),请选择您的目标主题。

    3. 请选择 Next(下一步)

  15. 请选择 Next(下一步)

  16. 查看规则详细信息并选择创建规则

配置设备运行状况通知 (CLI)

使用以下步骤创建在发生 Greengrass 状态更改事件时发布 Amazon SNS 主题的 EventBridge 规则。这样,Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。

  1. 创建 规则。

    • 用于部署状态更改事件。

      aws events put-rule \ --name TestRule \ --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail-type\": [\"Greengrass V2 Effective Deployment Status Change\"]}"
    • 用于组件状态更改事件。

      aws events put-rule \ --name TestRule \ --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail-type\": [\"Greengrass V2 Installed Component Status Change\"]}"

    模式中省略的属性将被忽略。

  2. 将主题添加为规则目标。

    • topic-arn 替换为 Amazon SNS 主题的 ARN。

    aws events put-targets \ --rule TestRule \ --targets "Id"="1","Arn"="topic-arn"
    注意

    要允许 Amazon EventBridge 调用您的目标主题,您必须在主题中添加基于资源的策略。有关更多信息,请参阅《亚马逊 EventBridge 用户指南》中的 Ama zon SNS 权限

有关更多信息,请参阅 Amazon EventBridge 用户指南 EventBridge中的事件和事件模式

配置设备运行状况通知 (Amazon CloudFormation)

使用Amazon CloudFormation模板创建 EventBridge 规则,发送有关 Greengrass 群组部署状态变更的通知。有关更多信息,请参阅Amazon CloudFormation用户指南中的 Amazon EventBridge 资源类型参考

另请参阅