

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 取得部署和元件運作狀態通知
<a name="deployment-health-notifications"></a>

Amazon EventBridge 事件規則會針對裝置收到的 Greengrass 部署和裝置上已安裝的元件，提供您狀態變更的通知。EventBridge 提供近乎即時的系統事件串流，描述 AWS 資源的變更。 *會盡最大努力*將這些事件 AWS IoT Greengrass 傳送至 EventBridge。這表示 會 AWS IoT Greengrass 嘗試將所有事件傳送至 EventBridge，但在某些情況下，可能不會傳送事件。此外， AWS IoT Greengrass 可能會傳送指定事件的多個副本，這表示您的事件接聽程式可能不會按照事件發生的順序接收事件。

**注意**  
Amazon EventBridge 是一種事件匯流排服務，可用來將應用程式與各種來源的資料連線，例如 [Greengrass 核心裝置](telemetry.md)、部署和元件通知。如需詳細資訊，請參閱《Amazon EventBridge 使用者指南》**中的[什麼是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)

**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`、`REJECTED`、 或 時`COMPLETED`，會啟動事件`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 核版本 2.12.3 和更新版本，Greengrass 會在元件進入下列狀態時發出事件：`ERRORED`、`RUNNING`、 `BROKEN`和 `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) 佇列

如需詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的[什麼是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 和 [Amazon 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 資源建立事件觸發的](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) EventBridge 規則。 * EventBridge *

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>

使用下列步驟建立 EventBridge 規則，在發生 Greengrass 狀態變更事件時發佈 Amazon SNS 主題。藉由這個規則，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 呼叫您的目標主題，您必須將以資源為基礎的政策新增到您的主題。如需詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的 [Amazon 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)
+ 《[Amazon EventBridge 使用者指南》中的什麼是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) * EventBridge *