AWS IoT Greengrass是什麼?V1和V2版本及其差異
阿新 • • 發佈:2021-01-22
## AWS IoT Greengrass
Greengrass主要是用於邊緣計算或者機器學習有關,對於詳細瞭解請閱讀結尾處的官方文件,文件內容也較為豐富。
[TOC]
### 一、AWS IoT Greengrass V1
#### 1. 概述
AWS Greengrass 是一種軟體,用於將 AWS 雲功能擴充套件到本地裝置,使得本地裝置可以更靠近資訊源來收集和分析資料,同時在本地網路上安全地相互通訊。更具體來說,使用 AWS Greengrass 的開發人員可以在雲中編寫無伺服器程式碼 (AWS Lambda 函式),然後方便地將其部署到裝置以在本地執行應用程式。在 AWS Greengrass 中,裝置可在本地網路上安全地通訊並互相交換訊息而不必連線到雲。
#### 2. 功能
- Lambda 執行時:可以將雲上建立的 Lambda 函式部署到 Greengrass Core 上並使其執行。Lambda 函式可以和邊緣物聯網裝置,以及雲服務進行互動。
- 影子裝置:為邊緣物聯網裝置提供 Device Shadow 服務,類似雲上 Device Shadow 服務。可以通過更新和查詢裝置的影子,來獲取和修改裝置的狀態。
- 訊息管理器:支援 Greengrass 組中的物聯網裝置之間的通訊,以及與 Lambda 函式、裝置影子服務之間通訊。影子資料可以只儲存在本地(Local Shadow),也可以同步到雲上。
- 組管理: 管理 Greengrass Group,一個 group 為一個獨立的邊緣物聯網環境。
- 發現服務:物聯網裝置可以通過連線到IoT雲服務,然後通過 Discovery 功能來發現 Greengrass Core,從而與之通訊。
- 無線更新代理:可以遠端更新 Greengrass Core 軟體。
- 本地資源訪問:支援 Greengrass Core 上的 Lambda 函式訪問本地資源,比如樹莓派的GPIO,本地視訊攝像頭等。
- 機器學習推理:支援將雲上 ML 機器學習推理功能部署到Greengrass Core。
#### 3. 基本架構
![img](https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/images/greengrass.png)
- 若干本地裝置和一個Greengrass Core (GGC)組成一個 Greengrass 組。與 AWS Greengrass Core 通訊的所有裝置都必須是 Greengrass 組的成員。每個組都必須包含 AWS Greengrass Core (似乎一個組只能有一個 GGC)。Discovery API 使裝置能夠檢索連線到 AWS Greengrass Core (與裝置位於同一 Greengrass 組中) 所需的資訊。
- 本地裝置和 Greengrass Core 通過本地網路通訊,可以不用訪問雲(Discovery Service 需要裝置在啟動時連線到雲上獲取到 GG Core 的連線資訊)。裝置上必須安裝 AWS IoT Device SDK。
- Greengrass 可以和雲通訊,需要有網際網路訪問能力。
- 可以在 Greengrass Core 上執行 Lambda 函式,這些函式可以和裝置之間通訊,也可以和雲通訊。
- 雲上的配置、Lambda 函式以及機器學習模版通過 『Deploy』 被安裝到 Greengrass Core 上。Greengrass Core 上有一個部署代理,它在接到通知後,從雲上獲取待部署材料,然後在 Greengrass Core 上進行部署。
- 組中裝置連線到GGC 的過程:
- AWS IoT 裝置使用其裝置證書、私有金鑰和 AWS IoT 根 CA 連線到 Greengrass 雲服務。
- 連線後,AWS IoT 裝置將使用 Greengrass Discovery Service 查詢其 AWS Greengrass 核心裝置的 IP 地址。該裝置還可下載組的根 CA 證書,該證書可用於對 Greengrass 核心裝置進行身份驗證。
- AWS IoT 設備嘗試連線到 AWS Greengrass Core,並傳遞其裝置證書和客戶端 ID。如果客戶端 ID 與裝置的事物名稱匹配並且證書有效,則將進行連線。否則,將終止連線。
#### 4. 相關角色功能
- **AWS IoT Core**
- AWS IoT Core 是一款**託管的雲服務**,讓互聯裝置與雲應用程式及其他裝置互動。AWS IoT Core 可以支援數十億臺裝置和數萬億條訊息,並且可以對這些訊息進行處理並將其安全可靠地路由至 AWS 終端節點和其他裝置。藉助 AWS IoT Core,應用程式可以隨時跟蹤所有裝置並與其通訊。
- 藉助 AWS IoT Core,還可以使用一系列 Amazon 服務來構建 IoT 應用程式,以便收集、處理和分析互聯裝置生成的資料並據之採取行動。
- 同時也提供控制檯配置 Greengrass,從而簡化開發和部署過程。Greengrass組內本地裝置Lambda等初始化時需要先與雲連接獲取Greengrass Core的資訊,之後可以通過本地網路通訊可與雲網絡斷開。
- **遠端監控**的作用
- **AWS IoT Greengrass**
GreenGrass則彌補上了AWS雲和IoT裝置之間的中間段,主要處理的就是邊緣計算這一部分,尤其在和AWS雲服務中斷同時也能夠繼續執行,甚至可以在邊緣設別上繼續執行Lambda應用
- **AWS IoT Greengrass Core**
- 可以執行AMS Lambda,進行訊息傳輸,裝置遮蔽(device shadows),安全性保護以及和雲端進行通訊
- **Lambda**
- Greengrass 可將 Lambda 函式擴充套件到邊緣站點。Lambda 函式是按需執行或者無限執行的小應用程式。可以使用本地 Lambda 函式離線響應裝置
- Lambda 函式使用 AWS IoT Greengrass Core 開發工具包與 AWS IoT Greengrass Core 進行本地互動。允許已部署的 Lambda 函式與 AWS IoT Core 交換 MQTT 訊息、與 Greengrass 組中的聯結器、裝置及其他 Lambda 函式交換 MQTT 訊息等
- 也可以處理篩選裝置資料,然後再將資料傳輸到雲
- **Device**
- 裝置通過AWS IoT 裝置開發工具包用於和Greengrass Core通訊,釋出和接受Greengrass的訊息。
- 通常IoT裝置都不是獨立工作,各個裝置之間能夠通訊和協作,同時不同的Greengrass Core之間也可以協作
#### 5. 主要元件
AWS IoT Greengrass 由一種雲服務和三個適用於 IoT 裝置的軟體發行版組成:AWS IoT Greengrass Core、AWS IoT 裝置開發工具包和 AWS IoT Greengrass 開發工具包
| | 用途 | 執行位置 |
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
| **AWS IoT Greengrass Core** | 提供本地服務(計算、訊息收發、狀態、安全),並在本地與執行 AWS IoT 裝置開發工具包的裝置通訊 | 執行通用作業系統(如 Linux)、基於 CPU 的 64 位裝置(x86 或 Arm)。 |
| **AWS IoT 裝置開發工具包**(aws-iot-device-sdk) | 允許裝置與 AWS IoT Greengrass Core 在本地互動 | 幾乎所有支援 C++ 或 Python 2.7 和 3.7 的裝置。同時包含在 FreeRTOS 中 |
| **AWS IoT Greengrass 開發工具包**(aws-greengrass-core-sdk) | 允許 Lambda 函式與 AWS IoT Greengrass Core 中的本地服務進行互動 | 在部署到 AWS IoT Greengrass Core 的 Lambda 函式中 |
### 二、AWS IoT Greengrass V2
#### 1. 概述
AWS IoT Greengrass V2是開源的物聯網邊緣執行時和雲服務,可幫助您在裝置上構建,部署和管理IoT應用程式。AWS IoT Greengrass使您的裝置可以在更接近資料生成位置的地方收集和分析資料,對本地事件進行自動響應,並與區域網上的其他裝置進行安全通訊。Greengrass裝置還可以與AWS IoT Core安全通訊,並將IoT資料匯出到AWS Cloud。您可以使用AWS IoT Greengrass使用稱為**元件的預構建軟體模組**來構建邊緣應用程式,這些模組可以將邊緣裝置連線到AWS服務或第三方服務。您還可以使用AWS IoT Greengrass使用Lambda函式、Docker容器、本地作業系統程序、或者自定義執行時等。
#### 2. 基本架構
![img](https://docs.aws.amazon.com/zh_cn/greengrass/v2/developerguide/images/greengrass-interaction.png)
- AWS IoT Greengrass client software(**aws-greengrass-nucleus**),執行在基於 linux 的發行版上。通過 AWS IoT Greengrass,你可以程式設計裝置對它們產生的資料進行本地操作,執行基於機器學習模型的預測,過濾和聚合裝置資料。可以在本地執行 AWS Lambda 函式、 Docker 容器、本地作業系統程序或自定義執行時。
- AWS IoT Greengrass 提供了預先構建的軟體模組,稱為**元件**,可以輕鬆擴充套件邊緣裝置功能。AWS 的 IoT Greengrass 元件能夠連線到 AWS 服務和邊緣的第三方應用程式。在開發完物聯網應用程式之後,AWS IoT Greengrass 可以遠端部署、配置和管理這些應用程式。
#### 4. 相關角色功能
- Greengrass core device
- 一個執行AWS IoT Greengrass Core軟體的裝置。Greengrass core device是 AWS 的物聯網事物。可以將多個核心裝置新增到 AWS 的物聯網事物組中,建立 Greengrass core裝置組
- AWS IoT Greengrass Core software
- 安裝在核心裝置上的所有 AWS 物聯網軟體的超集。Greengrass Core software由以下幾部分組成:
- Nucleus
所需的元件包括 Greengrass Core software的最低功能。該核心管理其他元件的部署、編制和生命週期管理。它也促進了 AWS 物聯網元件之間的程序間通訊
- Optional components
AWS 提供的可配置元件,可以在邊緣裝置上增加額外功能。根據自身需求可以選擇要部署到裝置的可選元件,例如資料流、本地機器學習推理或本地命令列介面等
- Greengrass component
- 部署在 Greengrass 核心裝置上並在其上執行的軟體模組。所有與 AWS IoT Greengrass一起開發和部署的軟體都是作為一個元件建模的。AWS IoT Greengrass 提供了預先構建的公共元件,它們提供可以在應用程式中使用的特性和功能。還可以在本地裝置或雲中開發自己的定製元件。在開發了一個定製元件之後,可以使用 AWS IoT Greengrass雲服務將其部署到單核或多核裝置上。您可以建立自定義元件並將該元件部署到核心裝置
### 三、AWS IoT Greengrass V1-V2相異點
#### 1. V2 New
- 開源,github:https://github.com/aws-greengrass
- 模組化,可根據實際資源用途等新增/刪除預構建的軟體元件
- 新的本地開發工具,可本地開發和除錯應用程式
- 改進的應用部署
#### 2. 差異
- 組和部署方式
- V1中,一個組定義了一個核心裝置,該核心裝置的設定和軟體以及連線到該核心裝置的AWS IoT列表
- V2中,可以使用部署來定義在核心裝置上執行的軟體元件和配置,每個部署都針對單個核心裝置或可以包含多個核心裝置的AWS IoT事物組
- Core software和聯結器
- V1中,AWS IoT Greengrass Core軟體是一個軟體包,其中包含該軟體及其所有功能。AWS IoT Greengrass聯結器是您部署到AWS IoT Greengrass V1核心裝置的模組
- V2中,AWS IoT Greengrass Core軟體是模組化的,因此可以選擇安裝內容以控制記憶體佔用量。Greengrass nucleus component是處理其他元件的部署,業務流程和生命週期管理的AWS IoT Greengrass Core軟體的最低必需安裝。流管理器,祕密管理器和日誌管理器等功能是僅在需要這些功能時才部署的元件。AWS IoT Greengrass V2還提供了一些AWS IoT Greengrass V1聯結器作為元件
- Lambda函式
- V1中,Lambda 函式定義了在核心裝置上執行的軟體。在每個 Greengrass 組中,定義該函式使用的訂閱和本地資源
- V2中,元件是在核心裝置上執行的軟體。元件可以由任何軟體組成,每個元件都有一個配方,定義元件的元資料、引數、依賴項和指令碼,以便在元件生命週期的每個步驟中執行
- Subscriptions
- V1中,訂閱指定 Lambda 函式接收事件訊息的位置作為函式有效負載。功能訂閱本地釋出/訂閱訊息和 AWS 物聯網核心 MQTT 訊息
- V2中,元件管理自己對本地釋出/訂閱和 AWS 的 IoT Core MQTT 訊息的訂閱。在元件配方中,定義授權策略以指定元件可以使用哪些主題進行通訊。在元件程式碼中,您可以為本地釋出/訂閱訊息和 AWS IoT Core MQTT 訊息使用程序間通訊(IPC)
- 本地資源
- V1中,Lambda 函式執行在容器中,可以配置這些容器來訪問核心裝置檔案系統中的卷和裝置
- V2中,元件執行在容器之外,因此不需要指定元件可以訪問哪些本地資源。可以開發直接使用核心裝置上的本地資源的元件。還可以開發執行 Docker 容器的元件
### 四、官方文件
- V1版本:https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/what-is-gg.html
- V2版本:https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html (英文版)
- AWS IoT Greengrass Github:https://github.com/aws-greengrass
- 使用需要進行登入:https://console.aws.amazon.com/console/home (注意:註冊需要有**信用卡**,註冊成功後會**贈送一年**的雲服