

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

# 获取部署和组件运行状态通知
<a name="deployment-health-notifications"></a>

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

**注意**  
Amazon EventBridge 是一项事件总线服务，您可以使用它来连接应用程序与来自各种来源的数据，例如 [Greengrass 核心](telemetry.md)设备以及部署和组件通知。有关更多信息，请参阅[什么是亚马逊 EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 在《*亚马逊 EventBridge 用户指南》*中。

**Topics**
+ [

## 部署状态更改事件
](#deployment.events-message-format)
+ [

## 组件状态更改事件
](#component.events-message-format)
+ [

## 创建 EventBridge 规则的先决条件
](#create-events-rule-prereqs)
+ [

## 配置设备运行状况通知（控制台）
](#create-events-rule-console)
+ [

## 配置设备运行状况通知（CLI）
](#create-events-rule-cli)
+ [

## 配置设备运行状况通知（CloudFormation）
](#create-events-rule-cloudformation)
+ [

## 另请参阅
](#deployment-notifications-see-also)

## 部署状态更改事件
<a name="deployment.events-message-format"></a>

AWS IoT Greengrass 当部署进入以下状态时会发出一个事件：`FAILED`、`SUCCEEDED`、`COMPLETED``REJECTED`、和。`CANCELED`您可以创建一条 EventBridge 规则，该规则适用于所有状态转换或向指定状态的过渡。当部署进入启动规则的状态时， EventBridge 调用规则中定义的目标操作。这样，您就可以发送通知、捕获事件信息、采取纠正措施或启动其他事件以响应状态更改。例如，您可以为以下使用案例创建规则：
+ 启动部署后操作，例如下载资产和通知人员。
+ 在部署成功或失败时发送通知。
+ 发布关于部署事件的自定义指标。

部署状态更改的[事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)采用以下格式：

```
{
    "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|REJECTED|CANCELED",
        "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=)"
     }
}
```

您可以创建规则和事件，以更新您的部署状态。当部署以 `FAILED`、`SUCCEEDED`、`COMPLETED`、`REJECTED` 或 `CANCELED` 状态完成时，会启动事件。如果在核心设备上部署失败，您将收到详细的回复，其中解释了部署失败的原因。有关部署错误代码的更多信息，请参阅[详细的部署错误代码](troubleshooting-deployment.md)。

**部署状态**  
+ `FAILED`. 部署失败。
+ `SUCCEEDED`。以事物组为目标的部署成功完成。
+ `COMPLETED`。以事物为目标的部署成功完成。
+ `REJECTED`。部署被拒绝。有关更多信息，请参阅 `statusDetails` 字段。
+ `CANCELED`。用户取消了部署。

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

有关 `errorStacks` 和 `errorTypes` 中错误代码的完整列表，请参阅[详细的部署错误代码](troubleshooting-deployment.md)和[详细的组件状态代码](troubleshooting-component.md)。

## 组件状态更改事件
<a name="component.events-message-format"></a>

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

针对组件状态更改的[事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)采用以下格式：

------
#### [ Greengrass nucleus v2.12.2 and earlier ]

组件状态：`ERRORED` 或 `BROKEN`  

```
{
    "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."
          }
        ]
    }
}
```

------
#### [ Greengrass nucleus v2.12.3 and later ]

组件状态：`ERRORED` 或 `BROKEN`  

```
{
    "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."
          }
        ]
    }
}
```

组件状态：`RUNNING` 或 `FINISHED`  

```
{
    "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": "RUNNING|FINISHED",
            "lifecycleStateDetails": null
          }
        ]
    }
}
```

------

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

## 创建 EventBridge 规则的先决条件
<a name="create-events-rule-prereqs"></a>

在为创建 EventBridge 规则之前 AWS IoT Greengrass，请执行以下操作：
+ 熟悉中的事件、规则和目标。 EventBridge
+ 创建和配置您的 EventBridge 规则调用的目标。规则可以调用许多类型的目标，包括：
  + Amazon Simple Notification Service (Amazon SNS)
  + AWS Lambda 函数
  + Amazon Kinesis Video Streams
  + Amazon Simple Queue Service（Amazon SQS）队列

有关更多信息，请参阅[什么是亚马逊 EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 以及《[亚马逊* EventBridge 用户指南》 EventBridge中的 “亚马逊*入门](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html)”。

## 配置设备运行状况通知（控制台）
<a name="create-events-rule-console"></a>

使用以下步骤创建 EventBridge 规则，以便在群组的部署状态发生变化时发布 Amazon SNS 主题。这样，Web 服务器、电子邮件地址和其他主题订阅者就可以响应事件。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[创建针对来自 AWS 资源的事件触发的 EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html)。

1. 打开 [Amazon EventBridge 控制台](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

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

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

1. 对于**事件总线**，请选择要与此规则关联的事件总线。如果您希望此规则对来自您自己的账户的匹配事件触发，请选择 **AWS 默认事件总线**。当你账户中的某项 AWS 服务发出事件时，它总是会进入你账户的默认事件总线。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件源**，选择 **AWS 事件**。

1. 在**事件模式**中，选择 **AWS 服务**。

1. 对于**AWS 服务**，选择 Greengrass。

1. 对于**事件类型**，您可以从下面选择：
   + 对于部署事件，请选择 **Greengrass V2 有效部署状态更改**。
   + 对于组件事件，请选择 **Greengrass V2 已安装组件状态更改**。

1. 选择**下一步**。

1. 对于**目标类型**，选择**AWS 服务**。

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

   1. 对于 **Target (目标)**，选择 **SNS topic (SNS 主题)**。

   1. 对于 **Topic (主题)**，请选择您的目标主题。

   1. 选择**下一步**。

1. 选择**下一步**。

1. 查看规则详细信息并选择**创建规则**。

## 配置设备运行状况通知（CLI）
<a name="create-events-rule-cli"></a>

使用以下步骤创建在发生 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\"]}"
     ```

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

1. 将主题添加为规则目标。
   + *topic-arn*替换为您的 Amazon SNS 主题的 ARN。

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**注意**  
要允许 Amazon EventBridge 调用您的目标主题，您必须在主题中添加基于资源的策略。有关更多信息，请参阅《[亚马逊* EventBridge 用户指南》中的 Ama* zon SNS 权限](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions)。

有关更多信息，请参阅 *Amazon EventBridge 用户指南 EventBridge*[中的事件和事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html)。

## 配置设备运行状况通知（CloudFormation）
<a name="create-events-rule-cloudformation"></a>

使用 CloudFormation 模板创建 EventBridge 规则，发送有关 Greengrass 群组部署状态变更的通知。有关更多信息，请参阅*AWS CloudFormation 用户指南*中的 [Amazon EventBridge 资源类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Events.html)。

## 另请参阅
<a name="deployment-notifications-see-also"></a>
+ [检查设备部署状态](check-deployment-status.md#check-device-deployment-status)
+ [什么是亚马逊 EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 在 *Amazon EventBridge 用户指南*中