取得部署和元件健康狀態通知 - AWS IoT Greengrass

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

取得部署和元件健康狀態通知

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

注意

Amazon EventBridge 是一種事件匯流排服務,可用來將應用程式與來自各種來源的資料連接起來,例如 Greengrass 核心裝置以及部署和元件通知。如需詳細資訊,請參閱什麼是 Amazon EventBridge?Amazon 用 EventBridge 戶指南

部署狀態變更事件

AWS IoT Greengrass 當部署進入下列狀態時,會發出事件:FAILEDSUCCEEDEDCOMPLETEDREJECTED、和CANCELED。您可以建立針對所有狀態轉換或轉換至您指定的狀態執行的 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|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 COMPLETEDREJECTED,便會啟動事件CANCELED。如果核心裝置上的部署失敗,您將收到詳細的回應,說明部署失敗的原因。如需部署錯誤碼的更多資訊,請參閱詳細的部署錯誤代碼

部署狀態
  • FAILED。 部署失敗。

  • SUCCEEDED。 以物件群組為目標的部署已成功完成。

  • COMPLETED。 以物件為目標的部署已成功完成。

  • REJECTED。 部署被拒絕。如需詳細資訊,請參閱statusDetails欄位。

  • CANCELED。 使用者已取消部署。

事件可能會重複或不按順序。若要判斷事件的順序,請使用 time 屬性。

如需和中錯誤代碼的完整清單 errorStackserrorTypes,請參閱詳細的部署錯誤代碼詳細的元件狀態代碼

元件狀態變更事件

對於 2.12.2 及更早 AWS IoT Greengrass 版本,Greengrass 會在組件進入下列狀態時發出事件:和。ERRORED BROKEN對於 Greengrass 核 2.12.3 及更新版本,Greengrass 會在元件進入下列狀態時發出事件:、、和。ERRORED BROKEN RUNNING FINISHEDGreengrass 也會在部署完成時發出事件。您可以建立針對所有狀態轉換或轉換至您指定的狀態執行的 EventBridge 規則。當安裝的元件進入啟動規則的狀態時,會 EventBridge 呼叫規則中定義的目標動作。這可讓您傳送通知、擷取事件資訊、採取修正動作,或啟動其他事件來回應狀態變更。

元件狀態變更的件使用下列格式:

Greengrass nucleus v2.12.2 and earlier

元件狀態:ERROREDBROKEN

{ "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

元件狀態:ERROREDBROKEN

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

元件狀態:RUNNINGFINISHED

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

您可以建立規則和事件,以更新已安裝元件的狀態。當元件變更裝置上的狀態時,就會啟動事件。您將收到詳細的回應,說明元件錯誤或損壞的原因。您也會收到一個狀態碼,指出失敗的原因。若要取得有關元件狀態碼的更多資訊,請參閱詳細的元件狀態代碼

建立 EventBridge 規則的先決條件

在建立的 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 戶指南 EventBridge中開始使用 Amazon

設定裝置健全狀況通知 (主控台)

使用下列步驟建立 EventBridge 規則,以便在群組的部署狀態變更時發佈 Amazon SNS 主題。藉由這個規則,Web 伺服器、電子郵件地址和其他主題訂閱者將能回應事件。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南的建立可從 AWS 資源觸發事件的 EventBridge 規則

  1. 打開 Amazon EventBridge 控制台

  2. 在導覽窗格中,選擇規則

  3. 選擇建立規則

  4. 輸入規則的名稱和描述。

    在同一個區域和同一個事件匯流排上,規則不能與另一個規則同名。

  5. 針對事件匯流排,選擇要與此規則建立關聯的事件匯流排。如果您想要此規則匹配來自您的帳戶的事件,請選取 AWS 預設事件匯流排。當您帳戶中的某個 AWS 服務發出活動時,它始終會進入您帳戶的預設事件匯流排。

  6. 針對規則類型,選擇具有事件模式的規則

  7. 選擇下一步

  8. 事件來源,選擇 AWS 事件

  9. 對於事件模式,選擇AWS 服務

  10. 對於AWS 服務,請選擇 Greengrass。

  11. 對於事件類型,請從下列項目中進行選擇:

    • 對於部署事件,請選擇 Greengrass V2 有效部署狀態變更。

    • 對於元件事件,請選擇 Greengrass V2 已安裝的元件狀態變更。

  12. 選擇下一步

  13. 目標類型欄位中,選擇 AWS 服務

  14. 對於選取目標,設定您的目標。此範例使用 Amazon SNS 主題,但您可以設定其他目標類型以傳送通知。

    1. Target (目標),選擇 SNS topic (SNS 主題)

    2. Topic (主題),選擇您的目標主題。

    3. 選擇下一步

  15. 選擇下一步

  16. 檢閱規則的詳細資訊,然後選擇建立規則

設定裝置健全狀況通知 (CLI)

使用下列步驟建立 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\"]}"

    模式省略的屬性會遭到忽略。

  2. 新增主題作為規則目標。

    • 用您的 Amazon SNS 主題的 ARN 替換主題。

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

    要允許 Amazon 調 EventBridge 用您的目標主題,您必須在主題中添加基於資源的政策。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的 Amazon SNS 許可。

如需詳細資訊,請參閱 Amazon EventBridge 使用者指南 EventBridge中的事件和事件模式

設定裝置健全狀況通知 (AWS CloudFormation)

使用 AWS CloudFormation 範本建立 EventBridge 規則,以傳送有關 Greengrass 群組部署狀態變更的通知。如需詳細資訊,請參閱AWS CloudFormation 使用者指南中的 Amazon EventBridge 資源類型參考

另請參閱