

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 什麼是 AWS IoT Greengrass？
<a name="what-is-gg"></a>

AWS IoT Greengrass 是將雲端功能擴展到本機裝置的軟體。這能讓裝置收集與分析更接近資訊來源的資料、自主回應本機裝置，在本機網路上安全地互相通訊。本機裝置也可以安全地與 通訊 AWS IoT Core ，並將 IoT 資料匯出至 AWS 雲端。 AWS IoT Greengrass 開發人員可以使用 AWS Lambda 函數和預先建置的[連接器](connectors.md)來建立部署至裝置以進行本機執行的無伺服器應用程式。

下圖顯示 的基本架構 AWS IoT Greengrass。

![\[Greengrass 核心可讓本機執行 Lambda、簡訊、裝置陰影和安全性。Greengrass 核心與 互動， AWS 雲端 並在本機使用間歇性連線。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/greengrass.png)


AWS IoT Greengrass 可讓客戶建置 IoT 裝置和應用程式邏輯。具體而言， AWS IoT Greengrass 提供在裝置上執行之應用程式邏輯的雲端型管理。本機部署的 Lambda 函數和連接器是由本機事件、來自雲端的訊息或其他來源觸發。

在 中 AWS IoT Greengrass，裝置可在本機網路上安全地通訊，並互相交換訊息，而不必連線到雲端。 AWS IoT Greengrass 提供本機 pub/sub 訊息管理員，可在連線中斷時智慧緩衝訊息，以便保留傳入和傳出至雲端的訊息。

AWS IoT Greengrass 保護使用者資料：
+ 透過裝置的安全身分驗證和授權。
+ 在本機網路內安全的連線能力。
+ 本機裝置和雲端之間。

裝置安全登入資料在群組內作用，直到撤銷，即使當連接至雲端的連線中斷，裝置還可以繼續安全地在本機進行通訊。

AWS IoT Greengrass 提供 Lambda over-the-air更新。

AWS IoT Greengrass 包含：
+ 軟體分發
  + AWS IoT Greengrass 核心軟體
  + AWS IoT Greengrass 核心 SDK
+ 雲端服務
  + AWS IoT Greengrass API
+ 功能
  + Lambda 執行時間
  + 陰影實作
  + 訊息管理員
  + 群組管理
  + 探索服務
  + 無線更新代理程式
  + 串流管理員
  + 本機資源存取
  + 本機機器學習推論
  + 本機秘密管理員
  + 內建整合服務、通訊協定和軟體的連接器

**Topics**
+ [AWS IoT Greengrass 核心軟體](#gg-core-software)
+ [AWS IoT Greengrass 群組](#gg-group)
+ [中的裝置 AWS IoT Greengrass](#devices)
+ [軟體開發套件](#gg-sdks)
+ [支援平台和需求](#gg-platforms)
+ [AWS IoT Greengrass 下載](#gg-downloads)
+ [我們希望傾聽您的意見](#contact-us)
+ [安裝 AWS IoT Greengrass 核心軟體](install-ggc.md)
+ [設定 AWS IoT Greengrass 核心](gg-core.md)

## AWS IoT Greengrass 核心軟體
<a name="gg-core-software"></a>

Core AWS IoT Greengrass 軟體提供下列功能：<a name="ggc-software-features"></a>
+ 部署和本機執行連接器和 Lambda 函數。
+ 在本機使用自動匯出至 來處理資料串流 AWS 雲端。
+ 使用 受管訂閱，透過裝置、連接器和 Lambda 函數之間的本機網路傳送 MQTT 訊息。
+ 使用受管訂閱的 AWS IoT 和 裝置、連接器和 Lambda 函數之間的 MQTT 訊息。
+  AWS 雲端 使用裝置身分驗證和授權保護裝置與 之間的連線。
+ 裝置的本機陰影同步。陰影可設定為與 同步 AWS 雲端。
+ 對本機裝置和磁碟區資源控制的存取。
+ 用於執行本機推論的雲端訓練機器學習模型部署。
+ 可讓裝置探索 Greengrass 核心裝置的自動 IP 地址偵測。
+ 新的或更新的群組組態的集中部署。下載組態資料之後，核心裝置會自動重新啟動。
+ 使用者定義 Lambda 函數的安全over-the-air (OTA) 軟體更新。
+ 本機秘密的安全加密儲存，以及連接器和 Lambda 函數控制的存取。

AWS IoT Greengrass 核心執行個體是透過 AWS IoT Greengrass APIs設定，以建立和更新存放在雲端中的 AWS IoT Greengrass 群組定義。

### AWS IoT Greengrass 核心軟體版本
<a name="ggc-versions"></a>

AWS IoT Greengrass 提供多種安裝 AWS IoT Greengrass Core 軟體的選項，包括 tar.gz 下載檔案、快速入門指令碼，以及在支援的 Debian 平台上`apt`安裝。如需詳細資訊，請參閱[安裝 AWS IoT Greengrass 核心軟體](install-ggc.md)。

下列索引標籤說明 AWS IoT Greengrass Core 軟體版本中的新增和變更項目。

------
#### [ GGC v1.11 ]<a name="ggc-v1.11-tab"></a>

1.11.6  
錯誤修正與效能改進：  
+ 改善在部署期間突然發生電源中斷時的彈性。
+ 修正串流管理員資料損毀可能使 AWS IoT Greengrass Core 軟體無法啟動的問題。
+ 已修正在某些情況下，新用戶端裝置無法連線至核心的問題。
+ 修正串流管理員串流名稱不能包含 的問題`.log`。

1.11.5  
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。

1.11.4  
錯誤修正與效能改進：  
+ 修正串流管理員無法升級至 AWS IoT Greengrass Core 軟體 v1.11.3 的問題。如果您使用串流管理員將資料匯出至雲端，您現在可以使用 OTA 更新，將舊版 AWS IoT Greengrass 的核心軟體 v1.x 升級至 v1.11.4。
+ 一般效能改進與錯誤修正。

1.11.3  
錯誤修正與效能改進：  
+ 修正在 Ubuntu 裝置上快速執行 AWS IoT Greengrass 的 Core 軟體在裝置突然停電後停止回應的問題。
+ 修正導致 MQTT 訊息延遲交付至長期 Lambda 函數的問題。
+ 修正當`maxWorkItemCount`值設為大於 的值時，導致 MQTT 訊息無法正確傳送的問題`1024`。
+ 修正導致 OTA 更新代理程式忽略 中 `keepAlive` 屬性中指定的 MQTT `KeepAlive`期間的問題[`config.json`](gg-core.md#config-json)。
+ 一般效能改進與錯誤修正。
如果您使用串流管理員將資料匯出至雲端，*請勿*從舊版 v1.x 升級到 AWS IoT Greengrass Core 軟體 v1.11.3。如果您是第一次啟用串流管理員，強烈建議您先安裝最新版本的 AWS IoT Greengrass Core 軟體。

1.11.1  
 錯誤修正與效能改進：  
+ 已修正造成串流管理員記憶體使用量增加的問題。
+ 修正`0`如果 Greengrass 核心裝置關閉的時間超過串流資料的指定time-to-live (TTL) 期間，導致串流管理員將串流的序號重設為 的問題。
+ 修正串流管理員無法正確停止重試嘗試將資料匯出至 的問題 AWS 雲端。

1.11.0  
新功能：  <a name="what-new-v1110"></a>
+ Greengrass 核心上的遙測代理程式會收集本機遙測資料並將其發佈至 AWS 雲端。若要擷取遙測資料以供進一步處理，客戶可以建立 Amazon EventBridge 規則並訂閱目標。如需詳細資訊，請參閱[從 AWS IoT Greengrass 核心裝置收集系統運作狀態遙測資料](https://docs.aws.amazon.com/greengrass/v1/developerguide/telemetry.html)。
+ 本機 HTTP API 會傳回由 啟動之本機工作者程序目前狀態的快照 AWS IoT Greengrass。如需詳細資訊，請參閱[呼叫本機運作狀態檢查 API](https://docs.aws.amazon.com/greengrass/v1/developerguide/health-check.html)。
+ [串流管理員](stream-manager.md)會自動將資料匯出至 Amazon S3 和 AWS IoT SiteWise。

  新的[串流管理員參數](configure-stream-manager.md)可讓您更新現有的串流，並暫停或繼續資料匯出。
+ 支援在核心上執行 Python 3.8.x Lambda 函數。
+ 中的新`ggDaemonPort`屬性[`config.json`](gg-core.md#config-json)，用於設定 Greengrass 核心 IPC 連接埠號碼。預設連接埠號碼為 8000。

  在 中[`config.json`](gg-core.md#config-json)用來設定 Greengrass 核心 IPC 身分驗證逾時的新`systemComponentAuthTimeout`屬性。預設逾時為 5000 毫秒。
+ 將每個 AWS IoT Greengrass 群組 AWS IoT 的裝置數量上限從 200 個增加到 2500 個。

  將每個群組的訂閱數量上限從 1000 個增加到 10000 個。

  如需詳細資訊，請參閱 [AWS IoT Greengrass 端點和配額](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)。
錯誤修正與效能改進：  <a name="bug-fix-v1110"></a>
+ 一般最佳化，可減少 Greengrass 服務程序的記憶體使用率。
+ 新的執行時間組態參數 (`mountAllBlockDevices`) 可讓 Greengrass 在設定 OverlayFS 之後，使用繫結掛載將所有區塊裝置掛載到容器中。如果 `/usr` 不在`/`階層下，此功能解決了導致 Greengrass 部署失敗的問題。
+ 修正如果 `/tmp`是符號連結，則會導致 AWS IoT Greengrass 核心故障的問題。
+ 修正讓 Greengrass 部署代理程式從 `mlmodel_public` 資料夾移除未使用機器學習模型成品的問題。
+ 一般效能改進與錯誤修正。

------
#### [ Extended life versions ]<a name="ggc-v1.10-tab"></a>

1.10.5  
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。

1.10.4  
錯誤修正與效能改進：  
+ <a name="bug-fix-v1104-snap-power-loss"></a>修正在 Ubuntu 裝置上快速執行 AWS IoT Greengrass 的 Core 軟體在裝置突然停電後停止回應的問題。
+ <a name="bug-fix-v1104-mqtt-long-lived-delay"></a>修正導致 MQTT 訊息延遲交付至長期 Lambda 函數的問題。
+ <a name="bug-fix-v1104-mqtt-max-work-item-count"></a>修正當`maxWorkItemCount`值設為大於 的值時，導致 MQTT 訊息無法正確傳送的問題`1024`。
+ <a name="bug-fix-v1104-ota-mqtt-keep-alive"></a>修正導致 OTA 更新代理程式忽略 中 `keepAlive` 屬性中指定的 MQTT `KeepAlive`期間的問題[`config.json`](gg-core.md#config-json)。
+ 一般效能改進與錯誤修正。

1.10.3  
錯誤修正與效能改進：  
+ <a name="bug-fix-v1103-system-component-auth-timeout"></a>在 中[`config.json`](gg-core.md#config-json)用來設定 Greengrass 核心 IPC 身分驗證逾時的新`systemComponentAuthTimeout`屬性。預設逾時為 5000 毫秒。
+ <a name="bug-fix-v1103-stream-manager-mem-usage"></a>已修正造成串流管理員記憶體使用量增加的問題。

1.10.2  
錯誤修正與效能改進：  
+ <a name="bug-fix-v1102-mqtt-operation-timeout"></a>[config.json](gg-core.md#config-json) 中的新`mqttOperationTimeout`屬性，用於設定 MQTT 連線中發佈、訂閱和取消訂閱操作的逾時 AWS IoT Core。
+ 一般效能改進與錯誤修正。

1.10.1  
錯誤修正與效能改進：  
+ <a name="bug-fix-v1101-stream-mgr"></a>[串流管理員](stream-manager.md)對檔案資料損毀更有彈性。
+ <a name="bug-fix-v1101-sysfs"></a>使用 Linux 核心 5.1 及更新版本，修正在裝置上造成 sysfs 掛載失敗的問題。
+ 一般效能改進與錯誤修正。

1.10.0  
新功能：  <a name="what-new-v1100"></a>
+ 串流管理員，可在本機處理資料串流，並將其 AWS 雲端 自動匯出至 。此功能需使用 Greengrass 核心裝置上的 Java 8。如需詳細資訊，請參閱[管理 AWS IoT Greengrass 核心上的資料串流](stream-manager.md)。
+ 在核心裝置上執行 Docker 應用程式的全新 Greengrass Docker 應用程式部署連接器。如需詳細資訊，請參閱[Docker 應用程式部署連接器](docker-app-connector.md)。
+ 新的 IoT SiteWise 連接器，可將工業裝置資料從 OPC-UA 伺服器傳送至其中的資產屬性 AWS IoT SiteWise。如需詳細資訊，請參閱[IoT SiteWise 連接器](iot-sitewise-connector.md)。
+ 在沒有容器化的情況下執行的 Lambda 函數可以存取 Greengrass 群組中的機器學習資源。如需詳細資訊，請參閱[從 Lambda 函數存取機器學習資源](access-ml-resources.md)。
+ 支援搭配 的 MQTT 持久性工作階段 AWS IoT。如需詳細資訊，請參閱[使用 的 MQTT 持久性工作階段 AWS IoT Core](gg-core.md#mqtt-persistent-sessions)。
+ 本機 MQTT 流量可以透過預設連接埠 8883 以外的連接埠傳輸。如需詳細資訊，請參閱[設定本機簡訊的 MQTT 連接埠](gg-core.md#config-local-mqtt-port)。
+ [AWS IoT Greengrass 核心 SDK](lambda-functions.md#lambda-sdks-core) 中的新`queueFullPolicy`選項，用於從 Lambda 函數進行可靠的訊息發佈。
+ 支援在核心上執行 Node.js 12.x Lambda 函數。<a name="bug-fix-v1100"></a>
+ <a name="bug-fix-v1100-ota"></a>具備硬體安全性整合的無線 (OTA) 更新可透過 OpenSSL 1.1 進行設定。
+ 一般效能改進與錯誤修正。

1.9.4  
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。

1.9.3  
新功能：  
+ <a name="what-new-v193-armv6l"></a>Armv6l. AWS IoT Greengrass Core 軟體 v1.9.3 或更新版本的支援可以安裝在 Armv6l 架構的 Raspbian 分佈上 （例如 Raspberry Pi Zero 裝置）。
+ <a name="what-new-v193-ota-alpn"></a>帶有 ALPN 的連接埠 443 OTA 更新。使用連接埠 443 進行 MQTT 流量的 Greengrass 核心現在支援over-the-air(OTA) 軟體更新。 AWS IoT Greengrass 使用應用程式層通訊協定網路 (ALPN) TLS 延伸來啟用這些連線。如需詳細資訊，請參閱[AWS IoT Greengrass Core 軟體的 OTA 更新](core-ota-update.md)及[連線至連接埠 443 或透過網路代理](gg-core.md#alpn-network-proxy)。
錯誤修正與效能改進：  
+ 修正 v1.9.0 中引入的錯誤，防止 Python 2.7 Lambda 函數將二進位承載傳送至其他 Lambda 函數。
+ 一般效能改進與錯誤修正。

1.9.2  
新功能：  
+ <a name="what-new-v192-openwrt"></a>支援 [OpenWrt](https://openwrt.org/). AWS IoT Greengrass Core 軟體 v1.9.2 或更新版本，可以安裝在具有 Armv8 (AArch64) 和 Armv7l 架構的 OpenWrt 分發上。目前，OpenWrt 不支援 ML 推論。

1.9.1  
錯誤修正與效能改進：  
+ 修正存在於 1.9.0 版，從 `cloud` 寫出，標題中包含萬用字元之訊息的錯誤。

1.9.0  
新功能：  
+ <a name="what-new-v190-runtimes"></a>支援 Python 3.7 和 Node.js 8.10 Lambda 執行時間。使用 Python 3.7 和 Node.js 8.10 執行期的 Lambda 函數現在可以在 AWS IoT Greengrass 核心上執行。(AWS IoT Greengrass 繼續支援 Python 2.7 和 Node.js 6.10 執行期。)
+ <a name="what-new-v190-mqtt-opt"></a>最佳化的 MQTT 連線。Greengrass 核心建立更少與 AWS IoT Core的連線。這個變更可對根據連線數目的費用降低操作成本。
+ <a name="what-new-v190-ec-key"></a>本機 MQTT 伺服器的 Elliptic Curve (EC) 金鑰。除了 RSA 金鑰之外，本機 MQTT 伺服器還支援 EC 金鑰。(無論金鑰類型為何，MQTT 伺服器憑證都有一個 SHA-256 RSA 簽章。) 如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)。
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。

1.8.4  
已修正陰影同步和裝置憑證管理員重新連線的問題。  
一般效能改進與錯誤修正。

1.8.3  
一般效能改進與錯誤修正。

1.8.2  
一般效能改進與錯誤修正。

1.8.1  
一般效能改進與錯誤修正。

1.8.0  
新功能：  
+ 群組中 Lambda 函數的可設定預設存取身分。此群組層級設定會決定用來執行 Lambda 函數的預設許可。您可以設定使用者 ID、群組 ID 或兩者。個別 Lambda 函數可以覆寫其群組的預設存取身分。如需詳細資訊，請參閱[為群組中的 Lambda 函數設定預設存取身分](lambda-group-config.md#lambda-access-identity-groupsettings)。
+ 透過連接埠 443 的 HTTPS 流量。HTTPS 通訊可設定為透過連接埠 443 傳送，而非預設的連接埠 8443。這補充了對應用程式層通訊協定網路 (ALPN) TLS 延伸的 AWS IoT Greengrass 支援，並允許 MQTT 和 HTTPS 的所有 Greengrass 訊息流量都使用連接埠 443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](gg-core.md#alpn-network-proxy)。
+  AWS IoT 連線的可預測名稱用戶端 IDs。此變更可支援 AWS IoT Device Defender 和 [AWS IoT 生命週期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)，因此您會收到連線、中斷連線、訂閱和取消訂閱事件的通知。可預測命名也能讓您更輕易建立關於連線 ID 的邏輯 (例如根據憑證屬性建立[訂閱政策](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)範本)。如需詳細資訊，請參閱[與 進行 MQTT 連線的用戶端 IDs AWS IoT](gg-core.md#connection-client-id)。
錯誤修正與效能改進：  
+ 已修正陰影同步和裝置憑證管理員重新連線的問題。
+ 一般效能改進與錯誤修正。

1.7.1  
新功能：  
+ Greengrass 連接器提供與本機基礎設施、裝置通訊協定 AWS和其他雲端服務的內建整合。如需詳細資訊，請參閱[使用 Greengrass 連接器來整合服務和通訊協定](connectors.md)。
+ AWS IoT Greengrass 延伸 AWS Secrets Manager 到核心裝置，讓您的密碼、字符和其他秘密可供連接器和 Lambda 函數使用。私密是在傳輸和靜態時加密。如需詳細資訊，請參閱[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。
+ 支援信任安全選項的硬體根。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)。
+ 允許 Lambda 函數在沒有 Greengrass 容器的情況下執行，並使用指定使用者和群組的許可的隔離和許可設定。如需詳細資訊，請參閱[使用群組特定的組態控制 Greengrass Lambda 函數的執行](lambda-group-config.md)。
+ 您可以將 Greengrass 群組設定為在沒有容器化的情況下執行，以在 Docker 容器 （在 Windows、macOS 或 Linux 上） AWS IoT Greengrass 中執行 。如需詳細資訊，請參閱[AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。
+ 運用應用程式層通訊協定交涉 (ALPN) 或透過網路代理的連線，在連接埠 443 上使用 MQTT 簡訊。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](gg-core.md#alpn-network-proxy)。
+ SageMaker AI Neo 深度學習執行期，支援由 SageMaker AI Neo 深度學習編譯器最佳化的機器學習模型。如需 Neo 深度學習執行時間的資訊，請參閱 [適用於 ML 推論的執行時間和程式庫](ml-inference.md#ml-libraries)。
+ 支援 Raspberry Pi 核心裝置上的 Raspbian Stretch (2018-06-27)。
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。
此外，這個版本還提供以下功能：  
+  AWS IoT Device Tester for AWS IoT Greengrass，您可以使用它來驗證 CPU 架構、核心組態和驅動程式是否可運作 AWS IoT Greengrass。如需詳細資訊，請參閱[使用 AWS IoT Device Tester for AWS IoT Greengrass V1](device-tester-for-greengrass-ug.md)。
+  AWS IoT Greengrass Core 軟體、 AWS IoT Greengrass Core SDK 和 AWS IoT Greengrass Machine Learning SDK 套件可透過 Amazon CloudFront 下載。如需詳細資訊，請參閱[AWS IoT Greengrass 下載](#gg-downloads)。

1.6.1  
新功能：  
+ 在 Greengrass 核心上執行二進位程式碼的 Lambda 可執行檔。使用適用於 C 的新 AWS IoT Greengrass 核心 SDK，以 C 和 C\$1\$1 撰寫 Lambda 可執行檔。如需詳細資訊，請參閱[Lambda 可執行檔](lambda-functions.md#lambda-executables)。
+ 選用本機儲存訊息快取可以在重新啟動持續。您可以設定佇列待處理的 MQTT 訊息之儲存設定。如需詳細資訊，請參閱[雲端目標的 MQTT 訊息佇列](gg-core.md#mqtt-message-queue)。
+ 當核心中斷連線時，可設定重新連線重試時間間隔的最大值。如需詳細資訊，請參閱 [AWS IoT Greengrass 核心組態檔案](gg-core.md#config-json) 中的 `mqttMaxConnectionRetryInterval` 屬性。
+ 本機資源存取 host/proc 目錄。如需詳細資訊，請參閱[使用 Lambda 函數和連接器存取本機資源](access-local-resources.md)。
+ 可設定的寫入目錄。Core AWS IoT Greengrass 軟體可以部署到唯讀和讀寫位置。如需詳細資訊，請參閱[設定 的寫入目錄 AWS IoT Greengrass](gg-core.md#write-directory)。
錯誤修正與效能改進：  
+ 在 Greengrass 核心中以及裝置與核心間執行發佈訊息的改善。
+ 減少處理使用者定義 Lambda 函數所產生的日誌所需的運算資源。

1.5.0  
新功能：  
+ AWS IoT Greengrass Machine Learning (ML) 推論已全面推出。您可以在本機 AWS IoT Greengrass 裝置上使用在雲端建構和訓練的模型來執行 ML 推導。如需詳細資訊，請參閱[執行機器學習推論](ml-inference.md)。
+ 除了 JSON 之外，Greengrass Lambda 函數現在還支援二進位資料作為輸入承載。若要使用此功能，您必須升級至 AWS IoT Greengrass Core SDK 1.1.0 版，您可以從 [AWS IoT Greengrass Core SDK](#gg-core-sdk-download) 下載頁面下載。
錯誤修正與效能改進：  
+ 降低整體的記憶體足跡。
+ 傳送訊息至雲端的效能提升。
+ 下載代理程式的穩定性改善、裝置憑證管理員 、和 OTA 更新代理程式。
+ 次要錯誤修正。

1.3.0  
新功能：  
+ 無線 (OTA) 更新代理程式能夠處理雲端部署的 Greengrass 更新任務。在新 `/greengrass/ota` 目錄中找到的代理程式。如需詳細資訊，請參閱[AWS IoT Greengrass Core 軟體的 OTA 更新](core-ota-update.md)。
+ 資源存取功能可讓 Greengrass Lambda 函數存取本機資源，例如週邊裝置和磁碟區。如需詳細資訊，請參閱[使用 Lambda 函數和連接器存取本機資源](access-local-resources.md)。

1.1.0  
新功能：  
+ 您可以透過刪除 Lambda 函數、訂閱和組態來重設部署的 AWS IoT Greengrass 群組。如需詳細資訊，請參閱[重設部署](reset-deployments-scenario.md)。
+ 除了 Python 2.7 之外，還支援 Node.js 6.10 和 Java 8 Lambda 執行時間。
若要從舊版 AWS IoT Greengrass 的核心遷移：  
+ 從 `/greengrass/configuration/certs` 資料夾複製憑證至 `/greengrass/certs`。
+ 將 `/greengrass/configuration/config.json` 複製至 `/greengrass/config/config.json`。
+ 執行 `/greengrass/ggc/core/greengrassd`，而不是 `/greengrass/greengrassd`。
+ 部署群組到新的核心。

1.0.0  
初始版本

------

## AWS IoT Greengrass 群組
<a name="gg-group"></a>

Greengrass 群組是設定和元件的集合，例如 Greengrass 核心、裝置和訂閱。群組可用來定義互動的範圍。例如，群組可能代表大樓的其中一個樓層、一輛卡車，或整個礦場。下圖顯示可組成 Greengrass 群組的元件。

![\[AWS IoT Core、Greengrass 和 Lambda 元件，具有互連的核心、設定、Lambda 函數、訂閱、連接器、裝置和資源元素。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-group.png)


在上圖中：

A：Greengrass 群組定義  
群組設定和元件的相關資訊。

B：Greengrass 群組設定  
其中包含：  
+ Greengrass 群組角色。
+ 憑證授權機構和本機連線組態。
+ Greengrass 核心連線資訊。
+ 預設 Lambda 執行時間環境。如需詳細資訊，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。
+ CloudWatch 和本機日誌組態。如需詳細資訊，請參閱[使用 AWS IoT Greengrass 日誌監控](greengrass-logs-overview.md)。

C：Greengrass 核心  
代表 Greengrass 核心的 AWS IoT 物件 （裝置）。如需詳細資訊，請參閱[設定 AWS IoT Greengrass 核心](gg-core.md)。

D：Lambda 函數定義  
在核心本機執行的 Lambda 函數清單，以及相關聯的組態資料。如需詳細資訊，請參閱[在 AWS IoT Greengrass 核心上執行 Lambda 函數](lambda-functions.md)。

E：訂閱定義  
可讓通訊使用 MQTT 訊息的訂閱清單。訂閱定義：  
+ 訊息來源和訊息目標。這些可以是用戶端裝置、Lambda 函數 AWS IoT Core、連接器和本機影子服務。
+ 用來篩選訊息的主題 (或主旨)。
如需詳細資訊，請參閱[MQTT 簡訊工作流程中的受管訂閱](gg-sec.md#gg-msg-workflow)。

F：連接器定義  
在本機核心上執行的連接器清單，以及相關聯的組態資料。如需詳細資訊，請參閱[使用 Greengrass 連接器來整合服務和通訊協定](connectors.md)。

G：裝置定義  
屬於 Greengrass 群組成員的 AWS IoT 物件清單 （稱為用戶端裝置），以及相關聯的組態資料。如需詳細資訊，請參閱[中的裝置 AWS IoT Greengrass](#devices)。

H：資源定義  
Greengrass 核心上本機資源、機器學習資源和私密資源的清單，以及相關聯的組態資料。如需詳細資訊，請參閱[使用 Lambda 函數和連接器存取本機資源](access-local-resources.md)、[執行機器學習推論](ml-inference.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。

部署時，Greengrass 群組定義、Lambda 函數、連接器、資源和訂閱資料表會複製到核心裝置。如需詳細資訊，請參閱[將 AWS IoT Greengrass 群組部署至 AWS IoT Greengrass 核心](deployments.md)。

## 中的裝置 AWS IoT Greengrass
<a name="devices"></a>

Greengrass 群組可以包含兩種類型的 AWS IoT 裝置：

Greengrass 核心  
Greengrass 核心是執行 AWS IoT Greengrass Core 軟體的裝置，可讓它直接與 AWS IoT Core 和服務通訊 AWS IoT Greengrass 。核心有自己的裝置憑證，可用來驗證 AWS IoT Core。它在 AWS IoT Core 登錄檔中具有裝置影子和項目。Greengrass 核心會執行本機 Lambda 執行期、部署代理程式和 IP 地址追蹤器，將 IP 地址資訊傳送至 AWS IoT Greengrass 服務，以允許用戶端裝置自動探索其群組和核心連線資訊。如需詳細資訊，請參閱[設定 AWS IoT Greengrass 核心](gg-core.md)。  
Greengrass 群組必須包含恰好一個核心。

用戶端裝置  <a name="greengrass-devices"></a>
用戶端裝置 （也稱為*連線裝置*、*Greengrass 裝置*或*裝置*) 是透過 MQTT 連接到 Greengrass 核心的裝置。他們在 AWS IoT Core 登錄檔中擁有自己的裝置憑證以進行 AWS IoT Core 身分驗證、裝置影子和項目。<a name="gg-device-discovery"></a>用戶端裝置可以執行 [FreeRTOS](https://docs.aws.amazon.com/freertos/latest/userguide/freertos-lib-gg-connectivity.html) 或使用[AWS IoT 裝置 SDK](#iot-device-sdk) 或[AWS IoT Greengrass 探索 API](gg-discover-api.md)，取得用來與相同 Greengrass 群組中核心進行連線和驗證的探索資訊。若要了解如何使用 AWS IoT 主控台為 建立和設定用戶端裝置 AWS IoT Greengrass，請參閱 [單元 4：與 AWS IoT Greengrass 群組中的用戶端裝置互動](module4.md)。或者，如需示範如何使用 AWS CLI 建立和設定用戶端裝置的範例 AWS IoT Greengrass，請參閱《 *AWS CLI 命令參考*》中的 [create-device-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-device-definition.html)。  
在 Greengrass 群組中，您可以建立訂閱，允許用戶端裝置透過 MQTT 與群組中的 Lambda 函數、連接器和其他用戶端裝置，以及與 AWS IoT Core 或本機影子服務進行通訊。MQTT 訊息透過核心路由。如果核心裝置失去與雲端的連線，用戶端裝置可以繼續透過本機網路進行通訊。用戶端裝置的大小可能有所不同，從較小的微型控制器型裝置到大型設備。目前，Greengrass 群組最多可包含 2，500 個用戶端裝置。用戶端裝置最多可為 10 個群組的成員。  
<a name="sitewise-connector-opcua-support"></a>OPC-UA 是一個用於工業通訊的資訊交換標準。若要在 Greengrass 核心上實作對 OPC-UA 的支援，您可以使用 [IoT SiteWise 連接器](iot-sitewise-connector.md)。連接器會將工業裝置資料從 OPC-UA 伺服器傳送至其中的資產屬性 AWS IoT SiteWise。

下表顯示這些裝置所相關的類型。

![\[AWS IoT Core 和 裝置功能矩陣顯示組態，例如憑證、IoT 政策、核心和裝置端支援的 IoT 物件，以及標記 Greengrass 群組許可之外的 Device Gateway、感測器/指示器軟體和函數。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/devices.png)


 AWS IoT Greengrass 核心裝置會將憑證存放在兩個位置：<a name="ggc-certificate-locations"></a>
+ `/greengrass-root/certs` 中的核心裝置憑證 核心裝置憑證通常命名為 `hash.cert.pem` (例如， `86c84488a5.cert.pem`)。當核心連線至 和 AWS IoT Core AWS IoT Greengrass 服務時， AWS IoT 用戶端會使用此憑證進行交互身分驗證。
+ `/greengrass-root/ggc/var/state/server` 中的 MQTT 伺服器憑證。MQTT 伺服器憑證的名稱為 `server.crt`。此憑證用於本機 MQTT 伺服器 (位於 Greengrass 核心) 和 Greengrass 裝置之間的相互驗證。
**注意**  
*greengrass-root* 代表在裝置上安裝 AWS IoT Greengrass Core 軟體的路徑。通常，這是 `/greengrass` 目錄。

## 軟體開發套件
<a name="gg-sdks"></a>

下列 AWS提供的 SDKs可用於 AWS IoT Greengrass：

AWS 開發套件  
使用 AWS SDK 建置與任何 AWS 服務互動的應用程式，包括 Amazon S3、Amazon DynamoDB AWS IoT AWS IoT Greengrass等。在 的內容中 AWS IoT Greengrass，您可以在部署的 Lambda 函數中使用 AWS SDK，直接呼叫任何 AWS 服務。如需詳細資訊，請參閱[AWS SDKs](lambda-functions.md#lambda-sdks-aws)。  
也可在 [AWS IoT Greengrass API](https://docs.aws.amazon.com/greengrass/v1/apireference/) 和 中使用 AWS SDKs的 Greengrass 特定操作[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/greengrass)。

AWS IoT 裝置 SDK  <a name="iot-device-sdk"></a>
 AWS IoT 裝置 SDK 可協助裝置連線至 AWS IoT Core 和 AWS IoT Greengrass。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*[AWS IoT 》中的 裝置SDKs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)。  
<a name="iot-device-sdk-discovery"></a>用戶端裝置可以使用任何 AWS IoT Device SDK v2 平台來探索 Greengrass 核心的連線資訊。連線資訊包括：  <a name="iot-device-sdk-discovery-list"></a>
+ 用戶端裝置所屬的 Greengrass 群組 IDs。
+ 每個群組中 Greengrass 核心的 IP 地址。這些也稱為*核心端點*。
+ 群組 CA 憑證，哪些裝置使用 與 核心進行交互身分驗證。如需詳細資訊，請參閱[裝置連線工作流程](gg-sec.md#gg-sec-connection)。
在 AWS IoT 裝置 SDKs的 v1 中，只有 C\$1\$1 和 Python 平台提供內建探索支援。

AWS IoT Greengrass 核心 SDK  
 AWS IoT Greengrass 核心 SDK 可讓 Lambda 函數與 Greengrass 核心互動、發佈訊息給 AWS IoT、與本機影子服務互動、叫用其他部署的 Lambda 函數，以及存取秘密資源。此 SDK 由在 AWS IoT Greengrass 核心上執行的 Lambda 函數使用。如需詳細資訊，請參閱[AWS IoT Greengrass 核心 SDK](lambda-functions.md#lambda-sdks-core)。

AWS IoT Greengrass Machine Learning SDK  
 AWS IoT Greengrass Machine Learning SDK 可讓 Lambda 函數使用部署到 Greengrass 核心的機器學習模型作為機器學習資源。此 SDK 供在 AWS IoT Greengrass 核心上執行並與本機推論服務互動的 Lambda 函數使用。如需詳細資訊，請參閱[AWS IoT Greengrass Machine Learning SDK](lambda-functions.md#lambda-sdks-ml)。

## 支援平台和需求
<a name="gg-platforms"></a>

下列索引標籤列出 AWS IoT Greengrass Core 軟體支援的平台和需求。

**注意**  
您可以從 AWS IoT Greengrass 核心軟體下載下載 [AWS IoT Greengrass 核心軟體](#gg-core-download-tab)。

------
#### [ GGC v1.11 ]

支援的平台：
+ <a name="arch_armv7l_193"></a>架構：Armv7l
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv8-aarch64_190"></a>架構：Armv8 (AArch64)
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv6l_193"></a>架構：Armv6l
  + 作業系統：Linux
+ <a name="arch_x86-64_amazonlinux_190"></a>架構：x86\$164
  + 作業系統：Linux
+ <a name="arch_docker_180"></a>Windows、macOS 和 Linux 平台可以在 Docker AWS IoT Greengrass 容器中執行。如需詳細資訊，請參閱[AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。

使用要求：
+ <a name="mem_128_disk_space_180"></a> AWS IoT Greengrass 核心軟體可用的磁碟空間至少為 128 MB。如果您使用 [OTA 更新代理程式](core-ota-update.md)，則最小值為 <a name="req-core-ota-disk-space"></a>400 MB。
+ <a name="mem_128_ram_1100"></a>配置給 AWS IoT Greengrass Core 軟體的最小 128 MB RAM。啟用[串流管理員](stream-manager.md)時，至少要用 198 MB RAM。
**注意**  
如果您使用 AWS IoT 主控台上的**預設群組建立**選項來建立 Greengrass 群組，則預設會啟用串流管理員。
+ Linux 核心版本：
  + <a name="kernel_4.4_180"></a>需要 Linux 核心 4.4 版或更新版本，才能支援 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-considerations)執行 。
  + <a name="kernel_3.17_180"></a>需要 Linux 核心 3.17 版或更新版本，才能支援 AWS IoT Greengrass 在沒有容器的情況下執行 。在此組態中，Greengrass 群組的預設 Lambda 函數容器化必須設定為**無容器**。如需說明，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。
+ <a name="glibc_190"></a>[GNU C 程式庫](https://www.gnu.org/software/libc/) (glibc) 2.14 版或更新版本。OpenWrt 發行套件需要 [musl C 程式庫](https://www.musl-libc.org/download.html) 1.1.16 版或更新版本。
+ <a name="var_run_180"></a>必須在此裝置上呈現 `/var/run` 目錄。
+ <a name="dev_dir_180"></a>`/dev/stdin`、`/dev/stdout` 和 `/dev/stderr` 檔案必須可用。
+ <a name="hardlink_softlink_180"></a>必須在裝置上啟用硬連結和軟連結保護。否則， AWS IoT Greengrass 只能使用 `-i`旗標在不安全模式下執行。
+ <a name="kernel_config_180"></a>必須在此裝置啟用下列的 Linux 核心組態：
  + <a name="kernel_namespace_180"></a>命名空間：
    + CONFIG\$1IPC\$1NS
    + CONFIG\$1UTS\$1NS
    + CONFIG\$1USER\$1NS
    + CONFIG\$1PID\$1NS
  + <a name="kernel_cgroups_180"></a>Cgroups：
    + CONFIG\$1CGROUP\$1DEVICE
    + CONFIG\$1CGROUPS
    + CONFIG\$1MEMCG

    核心必須支援 [cgroups](https://en.wikipedia.org/wiki/Cgroups)。 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)執行 時，適用下列要求：
    + 必須啟用並掛載*記憶體* cgroup，以允許 AWS IoT Greengrass 設定 Lambda 函數的記憶體限制。
    + 如果使用具有[本機資源存取權](access-local-resources.md)的 Lambda 函數來開啟 AWS IoT Greengrass 核心裝置上的檔案，則必須啟用並掛載*裝置* cgroup。
  + <a name="kernel_others_180"></a>其他：
    + CONFIG\$1POSIX\$1MQUEUE
    + CONFIG\$1OVERLAY\$1FS
    + CONFIG\$1HAVE\$1ARCH\$1SECCOMP\$1FILTER
    + CONFIG\$1SECCOMP\$1FILTER
    + CONFIG\$1KEYS
    + CONFIG\$1SECCOMP
    + CONFIG\$1SHMEM
+ <a name="s3_iot_root_cert_180"></a>Amazon S3 和 的根憑證 AWS IoT 必須存在於系統信任存放區中。
+ <a name="stream-manager-requirement"></a>除了基本 AWS IoT Greengrass 核心軟體記憶體需求之外，[串流管理員](stream-manager.md)還需要 Java 8 執行期和至少 70 MB RAM。當您在 AWS IoT 主控台上使用**預設群組建立**選項時，預設會啟用串流管理員。OpenWrt 發行版本不支援串流管理員。
+ 支援您要在本機執行之 Lambda 函數所需執行[AWS Lambda 時間](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)的程式庫。必要的程式庫必須安裝在核心上，並新增到 `PATH` 環境變數。多個程式庫可以安裝在同一個核心上。
  + <a name="runtime_python_3.8"></a>[Python](https://www.python.org/) 3.8 版適用於使用 Python 3.8 執行時間的函數。
  + <a name="runtime_python_3.7"></a>[Python](https://www.python.org/) 3.7 版 (若為使用 Python 3.7 執行時間的函數)。
  + <a name="runtime_python_2.7"></a>[Python](https://www.python.org/) 2.7 版 (若為使用 Python 2.7 執行時間的函數)。
  + <a name="runtime_nodejs_12.x"></a>[Node.js](https://www.nodejs.org/) 12.x 版 (若為使用 Node.js 12.x 執行時間的函數)。
  + <a name="runtime_java_8_190"></a>[Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 第 8 版或更新版本 (若為使用 Java 執行時間的函數)。
**注意**  
不正式支援在 OpenWrt 分發執行 Java。不過，如果您的 OpenWrt 組建有 Java 支援，您可能可以在 OpenWrt 裝置上執行以 Java 撰寫的 Lambda 函數。

    如需 Lambda 執行時間 AWS IoT Greengrass 支援的詳細資訊，請參閱 [在 AWS IoT Greengrass 核心上執行 Lambda 函數](lambda-functions.md)。
+ <a name="ota_agent_1110"></a>[無線 (OTA) 更新代理程式](core-ota-update.md#ota-agent)需要以下 shell 命令 (非 BusyBox 變體)：
  + `wget`
  + `realpath`
  + `tar`
  + `readlink`
  + `basename`
  + `dirname`
  + `pidof`
  + `df`
  + `grep`
  + `umount`
  + `mv`
  + `gzip`
  + `mkdir`
  + `rm`
  + `ln`
  + `cut`
  + `cat`
  + `/bin/bash`

------
#### [ GGC v1.10 ]

支援的平台：
+ <a name="arch_armv7l_193"></a>架構：Armv7l
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv8-aarch64_190"></a>架構：Armv8 (AArch64)
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv6l_193"></a>架構：Armv6l
  + 作業系統：Linux
+ <a name="arch_x86-64_amazonlinux_190"></a>架構：x86\$164
  + 作業系統：Linux
+ <a name="arch_docker_180"></a>Windows、macOS 和 Linux 平台可以在 Docker AWS IoT Greengrass 容器中執行。如需詳細資訊，請參閱[AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。

使用要求：
+ <a name="mem_128_disk_space_180"></a> AWS IoT Greengrass 核心軟體可用的磁碟空間至少為 128 MB。如果您使用 [OTA 更新代理程式](core-ota-update.md)，則最小值為 <a name="req-core-ota-disk-space"></a>400 MB。
+ <a name="mem_128_ram_1100"></a>配置給 AWS IoT Greengrass Core 軟體的最小 128 MB RAM。啟用[串流管理員](stream-manager.md)時，至少要用 198 MB RAM。
**注意**  
如果您使用 AWS IoT 主控台上的**預設群組建立**選項來建立 Greengrass 群組，則預設會啟用串流管理員。
+ Linux 核心版本：
  + <a name="kernel_4.4_180"></a>需要 Linux 核心 4.4 版或更新版本，才能支援 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-considerations)執行 。
  + <a name="kernel_3.17_180"></a>需要 Linux 核心 3.17 版或更新版本，才能支援 AWS IoT Greengrass 在沒有容器的情況下執行 。在此組態中，Greengrass 群組的預設 Lambda 函數容器化必須設定為**無容器**。如需說明，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。
+ <a name="glibc_190"></a>[GNU C 程式庫](https://www.gnu.org/software/libc/) (glibc) 2.14 版或更新版本。OpenWrt 發行套件需要 [musl C 程式庫](https://www.musl-libc.org/download.html) 1.1.16 版或更新版本。
+ <a name="var_run_180"></a>必須在此裝置上呈現 `/var/run` 目錄。
+ <a name="dev_dir_180"></a>`/dev/stdin`、`/dev/stdout` 和 `/dev/stderr` 檔案必須可用。
+ <a name="hardlink_softlink_180"></a>必須在裝置上啟用硬連結和軟連結保護。否則， AWS IoT Greengrass 只能使用 `-i`旗標在不安全模式下執行。
+ <a name="kernel_config_180"></a>必須在此裝置啟用下列的 Linux 核心組態：
  + <a name="kernel_namespace_180"></a>命名空間：
    + CONFIG\$1IPC\$1NS
    + CONFIG\$1UTS\$1NS
    + CONFIG\$1USER\$1NS
    + CONFIG\$1PID\$1NS
  + <a name="kernel_cgroups_180"></a>Cgroups：
    + CONFIG\$1CGROUP\$1DEVICE
    + CONFIG\$1CGROUPS
    + CONFIG\$1MEMCG

    核心必須支援 [cgroups](https://en.wikipedia.org/wiki/Cgroups)。 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)執行 時，適用下列要求：
    + 必須啟用並掛載*記憶體* cgroup，以允許 AWS IoT Greengrass 設定 Lambda 函數的記憶體限制。
    + 如果使用具有[本機資源存取權](access-local-resources.md)的 Lambda 函數來開啟 AWS IoT Greengrass 核心裝置上的檔案，則必須啟用和掛載*裝置* cgroup。
  + <a name="kernel_others_180"></a>其他：
    + CONFIG\$1POSIX\$1MQUEUE
    + CONFIG\$1OVERLAY\$1FS
    + CONFIG\$1HAVE\$1ARCH\$1SECCOMP\$1FILTER
    + CONFIG\$1SECCOMP\$1FILTER
    + CONFIG\$1KEYS
    + CONFIG\$1SECCOMP
    + CONFIG\$1SHMEM
+ <a name="s3_iot_root_cert_180"></a>Amazon S3 和 的根憑證 AWS IoT 必須存在於系統信任存放區中。
+ <a name="stream-manager-requirement"></a>除了基本 AWS IoT Greengrass 核心軟體記憶體需求之外，[串流管理員](stream-manager.md)還需要 Java 8 執行期和至少 70 MB RAM。當您在 AWS IoT 主控台上使用**預設群組建立**選項時，預設會啟用串流管理員。OpenWrt 發行版本不支援串流管理員。
+ 支援您要在本機執行之 Lambda 函數所需執行[AWS Lambda 時間](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)的程式庫。必要的程式庫必須安裝在核心上，並新增到 `PATH` 環境變數。多個程式庫可以安裝在同一個核心上。
  + <a name="runtime_python_3.7"></a>[Python](https://www.python.org/) 3.7 版 (若為使用 Python 3.7 執行時間的函數)。
  + <a name="runtime_python_2.7"></a>[Python](https://www.python.org/) 2.7 版 (若為使用 Python 2.7 執行時間的函數)。
  + <a name="runtime_nodejs_12.x"></a>[Node.js](https://www.nodejs.org/) 12.x 版 (若為使用 Node.js 12.x 執行時間的函數)。
  + <a name="runtime_java_8_190"></a>[Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 第 8 版或更新版本 (若為使用 Java 執行時間的函數)。
**注意**  
不正式支援在 OpenWrt 分發執行 Java。不過，如果您的 OpenWrt 組建有 Java 支援，您可能可以在 OpenWrt 裝置上執行以 Java 撰寫的 Lambda 函數。

    如需 Lambda 執行時間 AWS IoT Greengrass 支援的詳細資訊，請參閱 [在 AWS IoT Greengrass 核心上執行 Lambda 函數](lambda-functions.md)。
+ <a name="ota_agent_1100"></a>[無線 (OTA) 更新代理程式](core-ota-update.md#ota-agent)需要以下 shell 命令 (非 BusyBox 變體)：
  + `wget`
  + `realpath`
  + `tar`
  + `readlink`
  + `basename`
  + `dirname`
  + `pidof`
  + `df`
  + `grep`
  + `umount`
  + `mv`
  + `gzip`
  + `mkdir`
  + `rm`
  + `ln`
  + `cut`
  + `cat`
  + `/bin/bash`

------
#### [ GGC v1.9 ]

支援的平台：
+ <a name="arch_armv7l_193"></a>架構：Armv7l
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv8-aarch64_190"></a>架構：Armv8 (AArch64)
  + 作業系統：Linux
  + 作業系統：Linux ([OpenWrt](https://openwrt.org/))
+ <a name="arch_armv6l_193"></a>架構：Armv6l
  + 作業系統：Linux
+ <a name="arch_x86-64_amazonlinux_190"></a>架構：x86\$164
  + 作業系統：Linux
+ <a name="arch_docker_180"></a>Windows、macOS 和 Linux 平台可以在 Docker AWS IoT Greengrass 容器中執行。如需詳細資訊，請參閱[AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。

使用要求：
+ <a name="mem_128_disk_space_180"></a> AWS IoT Greengrass 核心軟體可用的磁碟空間至少為 128 MB。如果您使用 [OTA 更新代理程式](core-ota-update.md)，則最小值為 <a name="req-core-ota-disk-space"></a>400 MB。
+ <a name="mem_128_ram_180"></a>配置給 AWS IoT Greengrass Core 軟體的最小 128 MB RAM。
+ Linux 核心版本：
  + <a name="kernel_4.4_180"></a>需要 Linux 核心 4.4 版或更新版本，才能支援 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-considerations)執行 。
  + <a name="kernel_3.17_180"></a>需要 Linux 核心 3.17 版或更新版本，才能支援 AWS IoT Greengrass 在沒有容器的情況下執行 。在此組態中，Greengrass 群組的預設 Lambda 函數容器化必須設定為**無容器**。如需說明，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。
+ <a name="glibc_190"></a>[GNU C 程式庫](https://www.gnu.org/software/libc/) (glibc) 2.14 版或更新版本。OpenWrt 發行套件需要 [musl C 程式庫](https://www.musl-libc.org/download.html) 1.1.16 版或更新版本。
+ <a name="var_run_180"></a>必須在此裝置上呈現 `/var/run` 目錄。
+ <a name="dev_dir_180"></a>`/dev/stdin`、`/dev/stdout` 和 `/dev/stderr` 檔案必須可用。
+ <a name="hardlink_softlink_180"></a>必須在裝置上啟用硬連結和軟連結保護。否則， AWS IoT Greengrass 只能使用 `-i`旗標在不安全模式下執行。
+ <a name="kernel_config_180"></a>必須在此裝置啟用下列的 Linux 核心組態：
  + <a name="kernel_namespace_180"></a>命名空間：
    + CONFIG\$1IPC\$1NS
    + CONFIG\$1UTS\$1NS
    + CONFIG\$1USER\$1NS
    + CONFIG\$1PID\$1NS
  + <a name="kernel_cgroups_180"></a>Cgroups：
    + CONFIG\$1CGROUP\$1DEVICE
    + CONFIG\$1CGROUPS
    + CONFIG\$1MEMCG

    核心必須支援 [cgroups](https://en.wikipedia.org/wiki/Cgroups)。 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)執行 時，適用下列要求：
    + 必須啟用並掛載*記憶體* cgroup，以允許 AWS IoT Greengrass 設定 Lambda 函數的記憶體限制。
    + 如果使用具有[本機資源存取權](access-local-resources.md)的 Lambda 函數來開啟 AWS IoT Greengrass 核心裝置上的檔案，則必須啟用並掛載*裝置* cgroup。
  + <a name="kernel_others_180"></a>其他：
    + CONFIG\$1POSIX\$1MQUEUE
    + CONFIG\$1OVERLAY\$1FS
    + CONFIG\$1HAVE\$1ARCH\$1SECCOMP\$1FILTER
    + CONFIG\$1SECCOMP\$1FILTER
    + CONFIG\$1KEYS
    + CONFIG\$1SECCOMP
    + CONFIG\$1SHMEM
+ <a name="s3_iot_root_cert_180"></a>Amazon S3 和 的根憑證 AWS IoT 必須存在於系統信任存放區中。
+ 支援您要在本機執行之 Lambda 函數所需執行[AWS Lambda 時間](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)的程式庫。必要的程式庫必須安裝在核心上，並新增到 `PATH` 環境變數。多個程式庫可以安裝在同一個核心上。
  + <a name="runtime_python_2.7"></a>[Python](https://www.python.org/) 2.7 版 (若為使用 Python 2.7 執行時間的函數)。
  + <a name="runtime_python_3.7"></a>[Python](https://www.python.org/) 3.7 版 (若為使用 Python 3.7 執行時間的函數)。
  + <a name="runtime_nodejs_6.10"></a>[Node.js](https://www.nodejs.org/) 6.10 版或更新版本 (若為使用 Node.js 6.10 執行時間的函數)。
  + <a name="runtime_nodejs_8.10"></a>[Node.js](https://www.nodejs.org/) 8.10 版或更新版本 (若為使用 Node.js 8.10 執行時間的函數)。
  + <a name="runtime_java_8_190"></a>[Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 第 8 版或更新版本 (若為使用 Java 執行時間的函數)。
**注意**  
不正式支援在 OpenWrt 分發執行 Java。不過，如果您的 OpenWrt 組建有 Java 支援，您可能可以在 OpenWrt 裝置上執行以 Java 撰寫的 Lambda 函數。

    如需 Lambda 執行時間 AWS IoT Greengrass 支援的詳細資訊，請參閱 [在 AWS IoT Greengrass 核心上執行 Lambda 函數](lambda-functions.md)。
+ <a name="ota_agent_180"></a>[無線 (OTA) 更新代理程式](core-ota-update.md#ota-agent)需要以下 shell 命令 (非 BusyBox 變體)：
  + `wget`
  + `realpath`
  + `tar`
  + `readlink`
  + `basename`
  + `dirname`
  + `pidof`
  + `df`
  + `grep`
  + `umount`
  + `mv`
  + `gzip`
  + `mkdir`
  + `rm`
  + `ln`
  + `cut`
  + `cat`

------
#### [ GGC v1.8 ]
+ 支援的平台：
  + <a name="arch_armv7l_rpi_180"></a>架構：Armv7l；作業系統：Linux
  + <a name="arch_x86-64_amazonlinux_180"></a>架構：x86\$164；作業系統：Linux
  + <a name="arch_armv8-aarch64_archlinux_180"></a>架構：Armv8 (AArch64)；作業系統：Linux
  + <a name="arch_docker_180"></a>Windows、macOS 和 Linux 平台可以在 Docker AWS IoT Greengrass 容器中執行。如需詳細資訊，請參閱[AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。
  + <a name="arch_snap_180"></a>Linux 平台可以使用 Greengrass 快照執行功能 AWS IoT Greengrass 有限的 版本，該快照可透過 [Snapcraft](https://snapcraft.io/aws-iot-greengrass) 取得。如需詳細資訊，請參閱[AWS IoT Greengrass snap 軟體](#gg-snapstore-download)。
+ 下列是必要項目：
  + <a name="mem_128_disk_space_180"></a> AWS IoT Greengrass 核心軟體可用的磁碟空間至少為 128 MB。如果您使用 [OTA 更新代理程式](core-ota-update.md)，則最小值為 <a name="req-core-ota-disk-space"></a>400 MB。
  + <a name="mem_128_ram_180"></a>配置給 AWS IoT Greengrass Core 軟體的最小 128 MB RAM。
  + Linux 核心版本：
    + <a name="kernel_4.4_180"></a>需要 Linux 核心 4.4 版或更新版本，才能支援 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-considerations)執行 。
    + <a name="kernel_3.17_180"></a>需要 Linux 核心 3.17 版或更新版本，才能支援 AWS IoT Greengrass 在沒有容器的情況下執行 。在此組態中，Greengrass 群組的預設 Lambda 函數容器化必須設定為**無容器**。如需說明，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。
  + <a name="glibc_180"></a>[GNU C 程式庫](https://www.gnu.org/software/libc/) (glibc) 2.14 版或更新版本。
  + <a name="var_run_180"></a>必須在此裝置上呈現 `/var/run` 目錄。
  + <a name="dev_dir_180"></a>`/dev/stdin`、`/dev/stdout` 和 `/dev/stderr` 檔案必須可用。
  + <a name="hardlink_softlink_180"></a>必須在裝置上啟用硬連結和軟連結保護。否則， AWS IoT Greengrass 只能使用 `-i`旗標在不安全模式下執行。
  + <a name="kernel_config_180"></a>必須在此裝置啟用下列的 Linux 核心組態：
    + <a name="kernel_namespace_180"></a>命名空間：
      + CONFIG\$1IPC\$1NS
      + CONFIG\$1UTS\$1NS
      + CONFIG\$1USER\$1NS
      + CONFIG\$1PID\$1NS
    + <a name="kernel_cgroups_180"></a>Cgroups：
      + CONFIG\$1CGROUP\$1DEVICE
      + CONFIG\$1CGROUPS
      + CONFIG\$1MEMCG

      核心必須支援 [cgroups](https://en.wikipedia.org/wiki/Cgroups)。 AWS IoT Greengrass 使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)執行 時，適用下列要求：
      + 必須啟用並掛載*記憶體* cgroup，以允許 AWS IoT Greengrass 設定 Lambda 函數的記憶體限制。
      + 如果使用具有[本機資源存取權](access-local-resources.md)的 Lambda 函數來開啟 AWS IoT Greengrass 核心裝置上的檔案，則必須啟用並掛載*裝置* cgroup。
    + <a name="kernel_others_180"></a>其他：
      + CONFIG\$1POSIX\$1MQUEUE
      + CONFIG\$1OVERLAY\$1FS
      + CONFIG\$1HAVE\$1ARCH\$1SECCOMP\$1FILTER
      + CONFIG\$1SECCOMP\$1FILTER
      + CONFIG\$1KEYS
      + CONFIG\$1SECCOMP
      + CONFIG\$1SHMEM
  + <a name="s3_iot_root_cert_180"></a>Amazon S3 和 的根憑證 AWS IoT 必須存在於系統信任存放區中。
+ 下列項目是必要條件：
  + 支援您要在本機[AWS Lambda 執行之 Lambda 函數所需執行時間](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)的程式庫。必要的程式庫必須安裝在核心上，並新增到 `PATH` 環境變數。多個程式庫可以安裝在同一個核心上。
    + <a name="runtime_python_2.7"></a>[Python](https://www.python.org/) 2.7 版 (若為使用 Python 2.7 執行時間的函數)。
    + <a name="runtime_nodejs_6.10"></a>[Node.js](https://www.nodejs.org/) 6.10 版或更新版本 (若為使用 Node.js 6.10 執行時間的函數)。
    + <a name="runtime_java_8"></a>[Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 第 8 版或更新版本 (若為使用 Java 執行時間的函數)。
  + <a name="ota_agent_180"></a>[無線 (OTA) 更新代理程式](core-ota-update.md#ota-agent)需要以下 shell 命令 (非 BusyBox 變體)：
    + `wget`
    + `realpath`
    + `tar`
    + `readlink`
    + `basename`
    + `dirname`
    + `pidof`
    + `df`
    + `grep`
    + `umount`
    + `mv`
    + `gzip`
    + `mkdir`
    + `rm`
    + `ln`
    + `cut`
    + `cat`

------

<a name="gg-limits-genref"></a>如需配額 AWS IoT Greengrass （限制） 的資訊，請參閱《》中的 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass)*Amazon Web Services 一般參考*。

<a name="gg-iot-pricing"></a>如需定價資訊，請參閱 [AWS IoT Greengrass 定價](https://aws.amazon.com/greengrass/pricing)和 [AWS IoT Core 定價](https://aws.amazon.com/iot-core/pricing)。

## AWS IoT Greengrass 下載
<a name="gg-downloads"></a>

 您可以使用以下資訊來尋找及下載與 AWS IoT Greengrass搭配使用的軟體。

**Topics**
+ [AWS IoT Greengrass 核心軟體](#gg-core-download-tab)
+ [AWS IoT Greengrass snap 軟體](#gg-snapstore-download)
+ [AWS IoT Greengrass Docker 軟體](#gg-docker-download)
+ [AWS IoT Greengrass 核心 SDK](#gg-core-sdk-download)
+ [支援的 Machine Learning 執行時間和程式庫](#ml-runtimes-libs)
+ [AWS IoT Greengrass ML 開發套件軟體](#gg-ml-sdk-download)

### AWS IoT Greengrass 核心軟體
<a name="gg-core-download-tab"></a>

<a name="ggc-software-descripton"></a> Core AWS IoT Greengrass 軟體將 AWS 功能延伸到 AWS IoT Greengrass 核心裝置，讓本機裝置可以在本機根據其產生的資料採取行動。

------
#### [ v1.11 ]<a name="ggc-v1.11-tab"></a>

1.11.6  
錯誤修正與效能改進：  
+ 改善在部署期間突然發生電源中斷時的彈性。
+ 修正串流管理員資料損毀可能使 AWS IoT Greengrass Core 軟體無法啟動的問題。
+ 已修正在某些情況下，新用戶端裝置無法連線至核心的問題。
+ 修正串流管理員串流名稱不能包含 的問題`.log`。

1.11.5  
錯誤修正與效能改進：  
+ 一般效能改進與錯誤修正。

1.11.4  
錯誤修正與效能改進：  
+ 修正串流管理員無法升級至 AWS IoT Greengrass Core 軟體 v1.11.3 的問題。如果您使用串流管理員將資料匯出至雲端，您現在可以使用 OTA 更新，將舊版 AWS IoT Greengrass 的核心軟體 v1.x 升級至 v1.11.4。
+ 一般效能改進與錯誤修正。

1.11.3  
錯誤修正與效能改進：  
+ 修正在 Ubuntu 裝置上快速執行 AWS IoT Greengrass 的 Core 軟體在裝置突然停電後停止回應的問題。
+ 修正導致 MQTT 訊息延遲交付至長期 Lambda 函數的問題。
+ 修正當`maxWorkItemCount`值設為大於 的值時，導致 MQTT 訊息無法正確傳送的問題`1024`。
+ 修正導致 OTA 更新代理程式忽略 中 `keepAlive` 屬性中指定的 MQTT `KeepAlive`期間的問題[`config.json`](gg-core.md#config-json)。
+ 一般效能改進與錯誤修正。
如果您使用串流管理員將資料匯出至雲端，*請勿*從舊版 v1.x 升級至 AWS IoT Greengrass Core 軟體 v1.11.3。如果您是第一次啟用串流管理員，強烈建議您先安裝最新版本的 AWS IoT Greengrass Core 軟體。

1.11.1  
 錯誤修正與效能改進：  
+ 已修正造成串流管理員記憶體使用量增加的問題。
+ 修正`0`如果 Greengrass 核心裝置關閉的時間超過串流資料的指定time-to-live (TTL) 期間，導致串流管理員將串流的序號重設為 的問題。
+ 修正串流管理員無法正確停止重試嘗試將資料匯出至 的問題 AWS 雲端。

1.11.0  
新功能：  <a name="what-new-v1110"></a>
+ Greengrass 核心上的遙測代理程式會收集本機遙測資料並將其發佈至 AWS 雲端。若要擷取遙測資料以供進一步處理，客戶可以建立 Amazon EventBridge 規則並訂閱目標。如需詳細資訊，請參閱[從 AWS IoT Greengrass 核心裝置收集系統運作狀態遙測資料](https://docs.aws.amazon.com/greengrass/v1/developerguide/telemetry.html)。
+ 本機 HTTP API 會傳回由 啟動之本機工作者程序目前狀態的快照 AWS IoT Greengrass。如需詳細資訊，請參閱[呼叫本機運作狀態檢查 API](https://docs.aws.amazon.com/greengrass/v1/developerguide/health-check.html)。
+ [串流管理員](stream-manager.md)會自動將資料匯出至 Amazon S3 和 AWS IoT SiteWise。

  新的[串流管理員參數](configure-stream-manager.md)可讓您更新現有的串流，並暫停或繼續資料匯出。
+ 支援在核心上執行 Python 3.8.x Lambda 函數。
+ 中的新`ggDaemonPort`屬性[`config.json`](gg-core.md#config-json)，用於設定 Greengrass 核心 IPC 連接埠號碼。預設連接埠號碼為 8000。

  在 中[`config.json`](gg-core.md#config-json)用來設定 Greengrass 核心 IPC 身分驗證逾時的新`systemComponentAuthTimeout`屬性。預設逾時為 5000 毫秒。
+ 將每個 AWS IoT Greengrass 群組 AWS IoT 的裝置數量上限從 200 個增加到 2500 個。

  將每個群組的訂閱數量上限從 1000 個增加到 10000 個。

  如需詳細資訊，請參閱 [AWS IoT Greengrass 端點和配額](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)。
錯誤修正與效能改進：  <a name="bug-fix-v1110"></a>
+ 一般最佳化，可減少 Greengrass 服務程序的記憶體使用率。
+ 新的執行時間組態參數 (`mountAllBlockDevices`) 可讓 Greengrass 在設定 OverlayFS 之後，使用繫結掛載將所有區塊裝置掛載到容器中。如果 `/usr` 不在`/`階層下，此功能解決了導致 Greengrass 部署失敗的問題。
+ 修正如果 `/tmp`是符號連結，則會導致 AWS IoT Greengrass 核心故障的問題。
+ 修正讓 Greengrass 部署代理程式從 `mlmodel_public` 資料夾移除未使用機器學習模型成品的問題。
+ 一般效能改進與錯誤修正。

若要在核心裝置上安裝 AWS IoT Greengrass 核心軟體，請為您的架構和作業系統 (OS) 下載 套件，然後遵循 [入門指南](gg-gs.md)中的步驟。

**提示**  
<a name="ggc-install-options"></a>AWS IoT Greengrass 也提供安裝 AWS IoT Greengrass Core 軟體的其他選項。例如，您可以使用 [Greengrass 裝置設定](quick-start.md)來設定您的環境，並安裝最新版本的 AWS IoT Greengrass Core 軟體。或者，在支援的 Debian 平台上，您可以使用 [APT 套件管理員](install-ggc.md#ggc-package-manager)來安裝或升級 AWS IoT Greengrass 核心軟體。如需詳細資訊，請參閱[安裝 AWS IoT Greengrass 核心軟體](install-ggc.md)。


| Architecture | 作業系統 | 連結 | 
| --- | --- | --- | 
| Armv8 (AArch64) | Linux | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-linux-aarch64-1.11.6.tar.gz) | 
| Armv8 (AArch64) | Linux (OpenWrt) | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-openwrt-aarch64-1.11.6.tar.gz) | 
| Armv7l | Linux | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-linux-armv7l-1.11.6.tar.gz) | 
| Armv7l | Linux (OpenWrt) | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-openwrt-armv7l-1.11.6.tar.gz) | 
| Armv6l | Linux | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-linux-armv6l-1.11.6.tar.gz) | 
| x86\$164 | Linux | [下載](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/greengrass-linux-x86-64-1.11.6.tar.gz) | 

------
#### [ Extended life versions ]

1.10.5  
v1.10 中的新功能：  <a name="what-new-v1100"></a>
+ 串流管理員，可在本機處理資料串流，並將其 AWS 雲端 自動匯出至 。此功能需使用 Greengrass 核心裝置上的 Java 8。如需詳細資訊，請參閱[管理 AWS IoT Greengrass 核心上的資料串流](stream-manager.md)。
+ 在核心裝置上執行 Docker 應用程式的全新 Greengrass Docker 應用程式部署連接器。如需詳細資訊，請參閱[Docker 應用程式部署連接器](docker-app-connector.md)。
+ 新的 IoT SiteWise 連接器，可將工業裝置資料從 OPC-UA 伺服器傳送至其中的資產屬性 AWS IoT SiteWise。如需詳細資訊，請參閱[IoT SiteWise 連接器](iot-sitewise-connector.md)。
+ 在沒有容器化的情況下執行的 Lambda 函數可以存取 Greengrass 群組中的機器學習資源。如需詳細資訊，請參閱[從 Lambda 函數存取機器學習資源](access-ml-resources.md)。
+ 支援搭配 的 MQTT 持久性工作階段 AWS IoT。如需詳細資訊，請參閱[使用 的 MQTT 持久性工作階段 AWS IoT Core](gg-core.md#mqtt-persistent-sessions)。
+ 本機 MQTT 流量可以透過預設連接埠 8883 以外的連接埠傳輸。如需詳細資訊，請參閱[設定本機簡訊的 MQTT 連接埠](gg-core.md#config-local-mqtt-port)。
+ [AWS IoT Greengrass 核心 SDK](lambda-functions.md#lambda-sdks-core) 中的新`queueFullPolicy`選項，用於從 Lambda 函數進行可靠的訊息發佈。
+ 支援在核心上執行 Node.js 12.x Lambda 函數。
錯誤修正與效能改進：  
+ <a name="bug-fix-v1100-ota"></a>具備硬體安全性整合的無線 (OTA) 更新可透過 OpenSSL 1.1 進行設定。
+ <a name="bug-fix-v1101-stream-mgr"></a>[串流管理員](stream-manager.md)對檔案資料損毀更有彈性。
+ <a name="bug-fix-v1101-sysfs"></a>使用 Linux 核心 5.1 及更新版本，修正在裝置上造成 sysfs 掛載失敗的問題。
+ <a name="bug-fix-v1102-mqtt-operation-timeout"></a>[config.json](gg-core.md#config-json) 中的新`mqttOperationTimeout`屬性，用於設定 MQTT 連線中發佈、訂閱和取消訂閱操作的逾時 AWS IoT Core。
+ <a name="bug-fix-v1103-stream-manager-mem-usage"></a>已修正造成串流管理員記憶體使用量增加的問題。
+ <a name="bug-fix-v1103-system-component-auth-timeout"></a>在 中[`config.json`](gg-core.md#config-json)用來設定 Greengrass 核心 IPC 身分驗證逾時的新`systemComponentAuthTimeout`屬性。預設逾時為 5000 毫秒。
+ <a name="bug-fix-v1104-ota-mqtt-keep-alive"></a>修正導致 OTA 更新代理程式忽略 中 `keepAlive` 屬性中指定的 MQTT `KeepAlive`期間的問題[`config.json`](gg-core.md#config-json)。
+ <a name="bug-fix-v1104-mqtt-max-work-item-count"></a>修正當`maxWorkItemCount`值設為大於 的值時，導致 MQTT 訊息無法正確傳送的問題`1024`。
+ <a name="bug-fix-v1104-mqtt-long-lived-delay"></a>修正導致 MQTT 訊息延遲交付至長期 Lambda 函數的問題。
+ <a name="bug-fix-v1104-snap-power-loss"></a>修正在 Ubuntu 裝置上快速執行 AWS IoT Greengrass 的 Core 軟體在裝置突然停電後停止回應的問題。
+ 一般效能改進與錯誤修正。
若要在核心裝置上安裝 AWS IoT Greengrass 核心軟體，請為您的架構和作業系統 (OS) 下載 套件，然後遵循 [入門指南](gg-gs.md)中的步驟。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/what-is-gg.html)

1.9.4  
v1.9 中的新功能：  
+ <a name="what-new-v190-runtimes"></a>支援 Python 3.7 和 Node.js 8.10 Lambda 執行時間。使用 Python 3.7 和 Node.js 8.10 執行期的 Lambda 函數現在可以在 AWS IoT Greengrass 核心上執行。(AWS IoT Greengrass 繼續支援 Python 2.7 和 Node.js 6.10 執行期。)
+ <a name="what-new-v190-mqtt-opt"></a>最佳化的 MQTT 連線。Greengrass 核心建立更少與 AWS IoT Core的連線。這個變更可對根據連線數目的費用降低操作成本。
+ <a name="what-new-v190-ec-key"></a>本機 MQTT 伺服器的 Elliptic Curve (EC) 金鑰。除了 RSA 金鑰之外，本機 MQTT 伺服器還支援 EC 金鑰。(無論金鑰類型為何，MQTT 伺服器憑證都有一個 SHA-256 RSA 簽章。) 如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)。
+ <a name="what-new-v192-openwrt"></a>支援 [OpenWrt](https://openwrt.org/). AWS IoT Greengrass Core 軟體 v1.9.2 或更新版本，可以安裝在具有 Armv8 (AArch64) 和 Armv7l 架構的 OpenWrt 分發上。目前，OpenWrt 不支援 ML 推論。
+ <a name="what-new-v193-armv6l"></a>Armv6l. AWS IoT Greengrass Core 軟體 v1.9.3 或更新版本的支援可以安裝在 Armv6l 架構的 Raspbian 分佈上 （例如 Raspberry Pi Zero 裝置）。
+ <a name="what-new-v193-ota-alpn"></a>帶有 ALPN 的連接埠 443 OTA 更新。使用連接埠 443 進行 MQTT 流量的 Greengrass 核心現在支援over-the-air(OTA) 軟體更新。 AWS IoT Greengrass 使用應用程式層通訊協定網路 (ALPN) TLS 延伸來啟用這些連線。如需詳細資訊，請參閱[AWS IoT Greengrass Core 軟體的 OTA 更新](core-ota-update.md)及[連線至連接埠 443 或透過網路代理](gg-core.md#alpn-network-proxy)。
若要在核心裝置上安裝 AWS IoT Greengrass 核心軟體，請為您的架構和作業系統 (OS) 下載 套件，然後遵循 [入門指南](gg-gs.md)中的步驟。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/what-is-gg.html)

1.8.4  
+ <a name="what-new-v180"></a>新功能：
  + 群組中 Lambda 函數的可設定預設存取身分。此群組層級設定會決定用來執行 Lambda 函數的預設許可。您可以設定使用者 ID、群組 ID 或兩者。個別 Lambda 函數可以覆寫其群組的預設存取身分。如需詳細資訊，請參閱[為群組中的 Lambda 函數設定預設存取身分](lambda-group-config.md#lambda-access-identity-groupsettings)。
  + 透過連接埠 443 的 HTTPS 流量。HTTPS 通訊可設定為透過連接埠 443 傳送，而非預設的連接埠 8443。這補充了對應用程式層通訊協定網路 (ALPN) TLS 延伸的 AWS IoT Greengrass 支援，並允許 MQTT 和 HTTPS 的所有 Greengrass 訊息流量都使用連接埠 443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](gg-core.md#alpn-network-proxy)。
  +  AWS IoT 連線的可預測名稱用戶端 IDs。此變更可支援 AWS IoT Device Defender 和 [AWS IoT 生命週期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)，因此您會收到連線、中斷連線、訂閱和取消訂閱事件的通知。可預測命名也能讓您更輕易建立關於連線 ID 的邏輯 (例如根據憑證屬性建立[訂閱政策](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)範本)。如需詳細資訊，請參閱[與 進行 MQTT 連線的用戶端 IDs AWS IoT](gg-core.md#connection-client-id)。

  錯誤修正與效能改進：
  + 已修正陰影同步和裝置憑證管理員重新連線的問題。
  + 一般效能改進與錯誤修正。
若要在核心裝置上安裝 AWS IoT Greengrass 核心軟體，請下載架構和作業系統 (OS) 的 套件，然後遵循 [入門指南](gg-gs.md)中的步驟。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/what-is-gg.html)

------

 下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

如需在裝置上安裝 AWS IoT Greengrass Core 軟體之其他選項的相關資訊，請參閱 [安裝 AWS IoT Greengrass 核心軟體](install-ggc.md)。

 

### AWS IoT Greengrass snap 軟體
<a name="gg-snapstore-download"></a>

<a name="gg-snap-description"></a>AWS IoT Greengrass snap 1.11.x 可讓您 AWS IoT Greengrass 透過方便的軟體套件以及所有必要的相依性，在容器化環境中執行有限的 版本。

**注意**  <a name="gg-snap-v1.11-note"></a>
此 AWS IoT Greengrass snap 適用於 AWS IoT Greengrass Core 軟體 v1.11.x. AWS IoT Greengrass doesn，不提供 v1.10.x 的 snap。不支援的版本不會收到錯誤修正或更新。  
 AWS IoT Greengrass snap 不支援連接器和機器學習 (ML) 推論。

如需詳細資訊，請參閱[AWS IoT Greengrass 快速執行](install-ggc.md#gg-snap-support)。

 

### AWS IoT Greengrass Docker 軟體
<a name="gg-docker-download"></a>

AWS 提供 Dockerfile 和 Docker 映像，讓您更輕鬆地 AWS IoT Greengrass 在 Docker 容器中執行。

Dockerfile  
Dockerfiles 包含用於建置自訂 AWS IoT Greengrass 容器映像的原始碼。您可以修改映像，以在不同平台架構上執行或減少映像大小。如需指示，請參閱 README 檔案。  
下載您的目標 AWS IoT Greengrass Core 軟體版本。  
+  適用於 v[1 AWS IoT Greengrass .11.6 的 Dockerfile](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/aws-greengrass-docker-1.11.6.tar.gz)。  
1.10 版  
 適用於 v[1.10 AWS IoT Greengrass .5 的 Dockerfile。](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.10.5/aws-greengrass-docker-1.10.5.tar.gz)  
1.9 版  
 適用於 v[1.9 AWS IoT Greengrass .4 的 Dockerfile](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.9.4/aws-greengrass-docker-1.9.4.tar.gz)。  
1.8 版  
 適用於 v[1.8 AWS IoT Greengrass .1 的 Dockerfile](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.8.1/aws-greengrass-docker-1.8.1.tar.gz)。
 

Docker 映像檔  
Docker 映像具有安裝在 Amazon Linux 2 (x86\$164) 和 Alpine Linux (x86\$164、Armv7l 或 AArch64) 基礎映像上的 AWS IoT Greengrass Core 軟體和相依性。您可以使用預先建立的映像來開始試驗 AWS IoT Greengrass。  
<a name="docker-images-end-of-maintenance"></a>2022 年 6 月 30 日，發佈至 Amazon Elastic Container Registry (Amazon ECR) 和 Docker Hub 的 AWS IoT Greengrass Core 軟體 v1.x Docker 映像的 AWS IoT Greengrass 結束維護。您可以繼續從 Amazon ECR 和 Docker Hub 下載這些 Docker 映像，直到 2023 年 6 月 30 日，也就是維護結束後 1 年。不過，在 2022 年 6 月 30 日結束維護之後， AWS IoT Greengrass Core 軟體 v1.x Docker 映像將不再收到安全修補程式或錯誤修正。如果您執行依賴這些 Docker 映像的生產工作負載，建議您使用 AWS IoT Greengrass 提供的 Dockerfile 建置自己的 Docker 映像。如需詳細資訊，請參閱[AWS IoT Greengrass Version 1 維護政策](maintenance-policy.md)。
從 [ Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 或 Amazon Elastic Container Registry (Amazon ECR) 下載預先建置的映像。  
+ 對於 Docker Hub，使用*版本*標籤下載特定版本的 Greengrass Docker 映像。若要尋找所有可用的映像，請檢查 Docker Hub 上的 **Tags (標籤)** 頁面。
+ 對於 Amazon ECR，請使用 `latest`標籤下載 Greengrass Docker 映像的最新可用版本。如需列出可用映像版本並從 Amazon ECR 下載映像的詳細資訊，請參閱 [AWS IoT Greengrass 在 Docker 容器中執行](run-gg-in-docker-container.md)。
從 AWS IoT Greengrass 核心軟體的 1.11.6 版開始，Greengrass Docker 映像不再包含 Python 2.7，因為 Python 2.7 在 2020 年達到end-of-life，而且不再收到安全性更新。如果您選擇更新這些 Docker 映像，建議您在將更新部署到生產裝置之前，先驗證您的應用程式是否使用新的 Docker 映像。如果您需要使用 Greengrass Docker 映像的應用程式使用 Python 2.7，您可以修改 Greengrass Dockerfile 以包含應用程式的 Python 2.7。
AWS IoT Greengrass 不提供 AWS IoT Greengrass Core 軟體 v1.11.1 的 Docker 映像。  
依預設，`alpine-aarch64` 和 `alpine-armv7l` 映像只能在以 Arm 為基礎的主機上執行。若要在 x86 主機上執行這些映像，您可以安裝 [QEMU](https://www.qemu.org/) 並在主機上安裝 QEMU 程式庫。例如：  

```
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
```

 

### AWS IoT Greengrass 核心 SDK
<a name="gg-core-sdk-download"></a>

Lambda 函數使用 AWS IoT Greengrass 核心 SDK 在本機與 AWS IoT Greengrass 核心互動。這可讓部署的 Lambda 函數：<a name="gg-core-sdk-functionality"></a>
+ 與 交換 MQTT 訊息 AWS IoT Core。
+ 使用 Greengrass 群組中的連接器、用戶端裝置和其他 Lambda 函數交換 MQTT 訊息。
+ 與本機陰影服務互動。
+ 叫用其他本機 Lambda 函數。
+ 存取[私密資源](secrets.md)。
+ 與[串流管理員](stream-manager.md)交動。

從 GitHub 下載適用於您的語言或平台 AWS IoT Greengrass 的核心 SDK。<a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass 適用於 Java 的核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass 適用於 Node.js 的核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass 適用於 Python 的核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass 適用於 C 的核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-c/)

如需詳細資訊，請參閱[AWS IoT Greengrass 核心 SDK](lambda-functions.md#lambda-sdks-core)。

 <a name="gg-ml-runtimes-pc-libs"></a>

### 支援的 Machine Learning 執行時間和程式庫
<a name="ml-runtimes-libs"></a>

 若要在 Greengrass 核心上[執行推論](ml-inference.md)，您必須為 ML 模型類型安裝機器學習執行階段或程式庫。

AWS IoT Greengrass 支援下列 ML 模型類型。請使用這些連結來尋找有關如何為您的模型類型和裝置平台安裝執行階段或程式庫的資訊。
+ [深度學習執行時間 (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/install.html)
+ [MXNet](https://mxnet.apache.org/get_started/?)
+ [TensorFlow](https://www.tensorflow.org/install)

#### 機器學習範例
<a name="gg-ml-samples"></a>

AWS IoT Greengrass 提供範例，您可以搭配支援的 ML 執行期和程式庫使用。這些範例是依據 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)所發行的。

------
#### [  Deep learning runtime (DLR)  ]

下載適用於您裝置平台的範例：
+ [Raspberry Pi](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/dlr/dlr-py3-armv7l.tar.gz) 的 DLR 範例
+ [NVIDIA Jetson TX2](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/dlr/dlr-py3-aarch64.tar.gz) 的 DLR 範例
+ [Intel Atom](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/dlr/dlr-py3-x86_64.tar.gz) 的 DLR 範例

如需使用 DLR 範例的教學課程，請參閱 [如何使用 設定最佳化機器學習推論 AWS 管理主控台](ml-dlc-console.md)。

------
#### [  MXNet  ]

下載適用於您裝置平台的範例：
+ [Raspberry Pi](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-armv7l.tar.gz) 的 MXNet 範例
+ [NVIDIA Jetson TX2](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-aarch64.tar.gz) 的 MXNet 範例
+ [Intel Atom](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-x86_64.tar.gz) 的 MXNet 範例

如需使用 MXNet 範例的教學課程，請參閱 [如何使用 設定機器學習推論 AWS 管理主控台](ml-console.md)。

------
#### [  TensorFlow  ]

下載適用於您裝置平台的 [Tensorflow 範例](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/tf/tf-py3.tar.gz)。此範例適用於 Raspberry Pi、NVIDIA Jetson TX2 與 Intel Atom。

------

 

### AWS IoT Greengrass ML 開發套件軟體
<a name="gg-ml-sdk-download"></a>

[AWS IoT Greengrass Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) 可讓您撰寫的 Lambda 函數使用本機機器學習模型，並將資料傳送至 [ML Feedback](ml-feedback-connector.md) 連接器以進行上傳和發佈。

------
#### [  v1.1.0  ]
+  [ Python 3.7](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-sdk/downloads/python/3.7/greengrass-machine-learning-python-sdk-1.1.0.tar.gz)。

------
#### [  v1.0.0  ]
+  [ Python 2.7](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-sdk/downloads/python/2.7/greengrass-machine-learning-python-sdk-1.0.0.tar.gz)。

------

## 我們希望傾聽您的意見
<a name="contact-us"></a>

我們誠摯歡迎您提供意見回饋。若要聯絡我們，請造訪 [AWS re：Post](https://repost.aws/) 並使用 [AWS IoT Greengrass 標籤](https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass)。

# 安裝 AWS IoT Greengrass 核心軟體
<a name="install-ggc"></a>

<a name="ggc-software-descripton"></a> Core AWS IoT Greengrass 軟體將 AWS 功能延伸到 AWS IoT Greengrass 核心裝置，讓本機裝置可以在本機根據其產生的資料採取行動。

AWS IoT Greengrass 提供數種安裝 AWS IoT Greengrass Core 軟體的選項：
+ [下載並解壓縮 tar.gz 檔案](#download-and-extract-tarball)。
+ [執行 Greengrass 裝置設定指令碼](#run-device-setup-script)。
+ [從 APT 儲存庫安裝](#ggc-package-manager)。

AWS IoT Greengrass 也提供執行 AWS IoT Greengrass Core 軟體的容器化環境。
+ [AWS IoT Greengrass 在 Docker 容器中執行](#gg-docker-support) 。
+ [AWS IoT Greengrass 快速執行](#gg-snap-support)。

 

## 下載並擷取 AWS IoT Greengrass Core 軟體套件
<a name="download-and-extract-tarball"></a>

為您的平台選擇要下載為 tar.gz 檔案並在裝置上擷取 AWS IoT Greengrass 的核心軟體。您可以下載最新版本的軟體。如需詳細資訊，請參閱[AWS IoT Greengrass 核心軟體](what-is-gg.md#gg-core-download-tab)。

 

## 執行 Greengrass 裝置設定指定碼
<a name="run-device-setup-script"></a>

執行 Greengrass 裝置設定以設定您的裝置、安裝最新的 AWS IoT Greengrass Core 軟體版本，並在幾分鐘內部署 Hello World Lambda 函數。如需詳細資訊，請參閱[快速入門：Greengrass 裝置安裝](quick-start.md)。

 

## 從 APT 儲存庫安裝 AWS IoT Greengrass 核心軟體
<a name="ggc-package-manager"></a>

**重要**  
自 2022 年 2 月 11 日起，您無法再從 APT 儲存庫安裝或更新 AWS IoT Greengrass Core 軟體。在您新增 AWS IoT Greengrass 儲存庫的裝置上，您必須[從來源清單中移除儲存庫](#ggc-package-manager-remove-sources)。從 APT 儲存庫執行軟體的裝置將繼續正常運作。建議您使用 [tar 檔案](#download-and-extract-tarball)更新 AWS IoT Greengrass Core 軟體。

提供的 APT 儲存庫 AWS IoT Greengrass 包含下列套件：
+ `aws-iot-greengrass-core`。 安裝 AWS IoT Greengrass 核心軟體。
+ `aws-iot-greengrass-keyring`。 安裝用來簽署 AWS IoT Greengrass 套件儲存庫的 GnuPG (GPG) 金鑰。

  下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

**Topics**
+ [使用 systemd 指令碼以管理 Greengrass 協助程式生命週期](#ggc-package-manager-systemd)
+ [使用 APT 儲存庫解除安裝 AWS IoT Greengrass 核心軟體](#ggc-package-manager-uninstall)
+ [移除 AWS IoT Greengrass 核心軟體儲存庫來源](#ggc-package-manager-remove-sources)

### 使用 systemd 指令碼以管理 Greengrass 協助程式生命週期
<a name="ggc-package-manager-systemd"></a>

`aws-iot-greengrass-core` 套件也會安裝可用來管理 AWS IoT Greengrass Core 軟體 （協助程式） 生命週期的`systemd`指令碼。
+ 在開機期間啟動 Greengrass 協助程式：

  ```
  systemctl enable greengrass.service
  ```
+ 啟動 Greengrass 協助程式：

  ```
  systemctl start greengrass.service
  ```
+ 停止 Greengrass 協助程式：

  ```
  systemctl stop greengrass.service
  ```
+ 檢查 Greengrass 協助程式的狀態：

  ```
  systemctl status greengrass.service
  ```

### 使用 APT 儲存庫解除安裝 AWS IoT Greengrass 核心軟體
<a name="ggc-package-manager-uninstall"></a>

當您解除安裝 AWS IoT Greengrass 核心軟體時，您可以選擇是否要保留或移除 AWS IoT Greengrass 核心軟體的組態資訊，例如裝置憑證、群組資訊和日誌檔案。

**解除安裝 AWS IoT Greengrass 核心軟體並保留組態資訊**
+ 執行下列命令以移除 AWS IoT Greengrass 核心軟體套件，並將組態資訊保留在 `/greengrass` 資料夾中。

  ```
  sudo apt remove aws-iot-greengrass-core aws-iot-greengrass-keyring
  ```

**解除安裝 AWS IoT Greengrass 核心軟體並移除組態資訊**

1. 執行下列命令以移除 AWS IoT Greengrass 核心軟體套件，並從 移除組態資訊`/greengrass folder`。

   ```
   sudo apt purge aws-iot-greengrass-core aws-iot-greengrass-keyring
   ```

1. 從來源清單中移除 AWS IoT Greengrass 核心軟體儲存庫。如需詳細資訊，請參閱[移除 AWS IoT Greengrass 核心軟體儲存庫來源](#ggc-package-manager-remove-sources)。

### 移除 AWS IoT Greengrass 核心軟體儲存庫來源
<a name="ggc-package-manager-remove-sources"></a>

當您不再需要從 APT 儲存庫安裝或更新 AWS IoT Greengrass 核心軟體時，您可以移除 AWS IoT Greengrass 核心軟體儲存庫來源。2022 年 2 月 11 日之後，您必須從來源清單中移除儲存庫，以避免執行 時發生錯誤`apt update`。

**從來源清單中移除 APT 儲存庫**
+ 執行下列命令，從來源清單中移除 AWS IoT Greengrass 核心軟體儲存庫。

  ```
  sudo rm /etc/apt/sources.list.d/greengrass.list
  sudo apt update
  ```

## AWS IoT Greengrass 在 Docker 容器中執行
<a name="gg-docker-support"></a>

AWS IoT Greengrass 提供 Dockerfile 和 Docker 映像，讓您更輕鬆地在 Docker 容器中執行 AWS IoT Greengrass Core 軟體。如需詳細資訊，請參閱[AWS IoT Greengrass Docker 軟體](what-is-gg.md#gg-docker-download)。

**注意**  
您也可以在 Greengrass 核心裝置上執行 Docker 應用程式。為此，使用 [Greengrass Docker 應用程式部署連接器](docker-app-connector.md)。

 

## AWS IoT Greengrass 快速執行
<a name="gg-snap-support"></a>

<a name="gg-snap-description"></a>AWS IoT Greengrass snap 1.11.x 可讓您 AWS IoT Greengrass 透過方便的軟體套件以及所有必要的相依性，在容器化環境中執行有限的 版本。

<a name="gg-snap-support-ends"></a>在 2023 年 12 月 31 日， AWS IoT Greengrass 將結束在 https：// 上發佈 AWS IoT Greengrass 的核心軟體版本 1.11.x Snap 的維護。 [ snapcraft.io ](https://snapcraft.io/aws-iot-greengrass) 目前執行 Snap 的裝置將繼續運作，直到進一步通知為止。不過， AWS IoT Greengrass 核心 Snap 在維護結束後將不再收到安全修補程式或錯誤修正。

### 快照概念
<a name="gg-snap-concepts"></a>

以下是基本的貼齊概念，可協助您了解如何使用貼 AWS IoT Greengrass 齊：

**[Channel](https://snapcraft.io/docs/channels)**  
快照元件，定義要安裝和追蹤哪個版本的快照以進行更新。快照會自動更新至目前頻道的最新版本。

**[介面](https://snapcraft.io/docs/interface-management)**  
授予資源存取權的快照元件，例如網路和使用者檔案。  
若要執行 AWS IoT Greengrass Snap，必須連接下列界面。請注意， `greengrass-support-no-container` 必須先連線，且絕不會中斷連線。  

```
      - greengrass-support-no-container
      - hardware-observe
      - home-for-hooks
      - hugepages-control
      - log-observe
      - mount-observe
      - network
      - network-bind
      - network-control
      - process-control
      - system-observe
```
其他界面是選用的。如果您的 Lambda 函數需要存取特定資源，您可能需要連線到適當的介面。

**[重新整理](https://snapcraft.io/docs/managing-updates)**  
快照會自動更新。`snapd` 協助程式是 snap 套件管理員，預設會每天檢查更新四次。每個更新檢查稱為重新整理。重新整理發生時，協助程式會停止、快照會更新，然後協助程式會重新啟動。

如需詳細資訊，請參閱 [Snapcraft](https://snapcraft.io/) 網站。

### snap v1 AWS IoT Greengrass .11.x 的新功能
<a name="gg-snap-whats-new"></a>

以下說明 1.11.x 版 AWS IoT Greengrass Snap 的新功能和變更。
+ 此版本僅支援`snap_daemon`以使用者 ID (UID) 和群組 (GID) 公開的使用者`584788`。
+ 此版本僅支援非容器化 Lambda 函數。
**重要**  
由於非容器化 Lambda 函數必須共用相同的使用者 (`snap_daemon`)，因此 Lambda 函數沒有彼此隔離。如需詳細資訊，請參閱[使用群組特定組態控制 Greengrass Lambda 函數的執行](https://docs.aws.amazon.com/greengrass/v1/developerguide/lambda-group-config.html)。
+ 此版本支援 C、C\$1\$1、Java 8、Node.js 12.x、Python 2.7、Python 3.7 和 Python 3.8 執行時間。
**注意**  
為了避免多餘的 Python 執行期，Python 3.7 Lambda 函數實際上會執行 Python 3.8 執行期。

### 開始使用 AWS IoT Greengrass snap
<a name="gg-snap-get-started"></a>

下列程序可協助您在裝置上安裝和設定 AWS IoT Greengrass Snap。

#### 要求
<a name="gg-snap-requirements"></a>

若要執行 AWS IoT Greengrass Snap，您必須執行下列動作：
+ 在支援的 Linux 發行版本上執行 AWS IoT Greengrass Snap，例如 Ubuntu、Linux Mint、Debian 和 Fedora。
+ 在您的裝置上安裝`snapd`協助程式。包含 `snapd` `snap`工具的協助程式會管理裝置上的快照環境。

如需支援的 Linux 發行版本和安裝說明清單，請參閱 *Snap 文件*中的[安裝快照](https://snapcraft.io/docs/installing-snapd)。

#### 安裝和設定 AWS IoT Greengrass Snap
<a name="gg-snap-install-config"></a>

下列教學課程說明如何在裝置上安裝和設定 AWS IoT Greengrass Snap。

**注意**  
雖然本教學課程使用 Amazon EC2 執行個體 (x86 t2.micro Ubuntu 20.04)，但您可以使用實體硬體執行 AWS IoT Greengrass 快照，例如 Raspberry Pi。
`snapd` 協助程式預先安裝在 Ubuntu 上。

1. 在裝置的終端機中執行下列命令來安裝 `core18` Snap：

   ```
   sudo snap install core18
   ```

   `core18` 快照是[基本快照](https://snapcraft.io/docs/base-snaps)，提供具有常用程式庫的執行時間環境。此快照是從 [Ubuntu 18.04 LTS 建置而成。](http://releases.ubuntu.com/18.04/)

1. 執行下列命令`snapd`進行升級：

   ```
   sudo snap install --channel=edge snapd; sudo snap refresh --channel=edge snapd
   ```

1. 執行 `snap list`命令來檢查是否已安裝 AWS IoT Greengrass Snap。

   下列範例回應顯示 `snapd` 已安裝，但未安裝`aws-iot-greengrass`。

   ```
   Name              Version               Rev    Tracking         Publisher   Notes
   amazon-ssm-agent  3.0.161.0             2996   latest/stable/…  aws✓        classic
   core              16-2.48               10444  latest/stable    canonical✓  core
   core18            20200929              1932   latest/stable    canonical✓  base
   lxd               4.0.4                 18150  4.0/stable/…     canonical✓  -
   snapd             2.48+git548.g929ccfb  10526  latest/edge      canonical✓  snapd
   ```

1. 選擇下列其中一個選項來安裝 AWS IoT Greengrass snap 1.11.x。
   + 若要安裝 AWS IoT Greengrass snap，請執行下列命令：

     ```
     sudo snap install aws-iot-greengrass
     ```

     回應範例：

     ```
     aws-iot-greengrass 1.11.5 from Amazon Web Services (aws) installed
     ```
   + 若要從舊版遷移至 v1.11.x 或更新至最新的可用修補程式版本，請執行下列命令：

     ```
     sudo snap refresh --channel=1.11.x aws-iot-greengrass
     ```

   如同其他快照，該 AWS IoT Greengrass 快照會使用頻道來管理次要版本。快照會自動更新為目前頻道的最新可用版本。例如，如果您指定 `--channel=1.11.x`，您的 AWS IoT Greengrass snap 會更新為 v1.11.5。

   您可以執行 `snap info aws-iot-greengrass`命令以取得可用頻道的清單 AWS IoT Greengrass。

   回應範例：

   ```
   name:      aws-iot-greengrass
   summary:   AWS supported software that extends cloud capabilities to local devices.
   publisher: Amazon Web Services (aws✓)
   store-url: https://snapcraft.io/aws-iot-greengrass
   contact:   https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass
   license:   Proprietary
   description: |
     AWS IoT Greengrass seamlessly extends AWS onto edge devices so they can act locally on the data
     they generate, while still using the cloud for management, analytics, and durable storage.
     AWS IoT Greenrgrass snap v1.11.0 enables you to run a limited version of AWS IoT Greengrass with
     all necessary dependencies in a containerized environment.
     The AWS IoT Greengrass snap doesn't support connectors and machine learning (ML) inference.
     By downloading this software you agree to the Greengrass Core Software License Agreement
     (https://s3-us-west-2.amazonaws.com/greengrass-release-license/greengrass-license-v1.pdf).
     For more information, see Run AWS IoT Greengrass in a snap
     (https://docs.aws.amazon.com/greengrass/latest/developerguide/install-ggc.html#gg-snap-support) in
     the AWS IoT Greengrass Developer.
     If you need help, try the AWS IoT Greengrass tag on AWS re:Post
     (https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass) or connect with an AWS IQ expert
     (https://iq.aws.amazon.com/services/aws/greengrass).
   snap-id: SRDuhPJGj4XPxFNNZQKOTvURAp0wxKnd
   channels:
     latest/stable:    1.11.3 2021-06-15 (59) 111MB -
     latest/candidate: 1.11.3 2021-06-14 (59) 111MB -
     latest/beta:      1.11.3 2021-06-14 (59) 111MB -
     latest/edge:      1.11.3 2021-06-14 (59) 111MB -
     1.11.x/stable:    1.11.3 2021-06-15 (59) 111MB -
     1.11.x/candidate: 1.11.3 2021-06-15 (59) 111MB -
     1.11.x/beta:      1.11.3 2021-06-15 (59) 111MB -
     1.11.x/edge:      1.11.3 2021-06-15 (59) 111MB -
   ```

1. 若要存取 Lambda 函數所需的特定資源，您可以連線至其他介面。

   執行下列命令以取得 AWS IoT Greengrass 快照支援的介面清單：

   ```
   snap connections aws-iot-greengrass
   ```

   回應範例：

   ```
   Interface                Plug                                                Slot                 Notes
   camera                   aws-iot-greengrass:camera                           -                    -
   dvb                      aws-iot-greengrass:dvb                              -                    -
   gpio                     aws-iot-greengrass:gpio                             -                    -
   gpio-memory-control      aws-iot-greengrass:gpio-memory-control              -                    -
   greengrass-support       aws-iot-greengrass:greengrass-support-no-container  :greengrass-support  -
   hardware-observe         aws-iot-greengrass:hardware-observe                 :hardware-observe    manual
   hardware-random-control  aws-iot-greengrass:hardware-random-control          -                    -
   home                     aws-iot-greengrass:home-for-greengrassd             -                    -
   home                     aws-iot-greengrass:home-for-hooks                   :home                manual
   hugepages-control        aws-iot-greengrass:hugepages-control                :hugepages-control   manual
   i2c                      aws-iot-greengrass:i2c                              -                    -
   iio                      aws-iot-greengrass:iio                              -                    -
   joystick                 aws-iot-greengrass:joystick                         -                    -
   log-observe              aws-iot-greengrass:log-observe                      :log-observe         manual
   mount-observe            aws-iot-greengrass:mount-observe                    :mount-observe       manual
   network                  aws-iot-greengrass:network                          :network             -
   network-bind             aws-iot-greengrass:network-bind                     :network-bind        -
   network-control          aws-iot-greengrass:network-control                  :network-control     -
   opengl                   aws-iot-greengrass:opengl                           :opengl              -
   optical-drive            aws-iot-greengrass:optical-drive                    :optical-drive       -
   process-control          aws-iot-greengrass:process-control                  :process-control     -
   raw-usb                  aws-iot-greengrass:raw-usb                          -                    -
   removable-media          aws-iot-greengrass:removable-media                  -                    -
   serial-port              aws-iot-greengrass:serial-port                      -                    -
   spi                      aws-iot-greengrass:spi                              -                    -
   system-observe           aws-iot-greengrass:system-observe                   :system-observe      -
   ```

   如果您在插槽欄中看到連字號 (-)，則不會連接對應的界面。

1. 遵循[安裝 AWS IoT Greengrass Core 軟體](module2.md)來建立 AWS IoT 物件、Greengrass 群組、啟用安全通訊的安全資源 AWS IoT，以及 AWS IoT Greengrass Core 軟體組態檔案。組態檔案 `config.json`包含 Greengrass 核心特定的組態，例如憑證檔案和 AWS IoT 裝置資料端點的位置。
**注意**  
如果您將檔案下載到不同的裝置，請依照[此步驟](start-greengrass.md#transfer-files-to-device)將檔案傳輸至 AWS IoT Greengrass 核心裝置。

1. 對於 AWS IoT Greengrass Snap，請確定您更新 [config.json](gg-core.md#config-json) 檔案，如下所示：
   + 將 *certificateId* 的每個執行個體取代為憑證和金鑰檔案名稱中的憑證 ID。
   + 如果您下載的 Amazon 根 CA 憑證與 Amazon 根 CA 1 不同，請將 *AmazonRootCA1.pem* 的每個執行個體取代為 Amazon 根 CA 檔案的名稱。

   ```
   {
     ...
     "crypto" : {
       "principals" : {
         "SecretsManager" : {
           "privateKeyPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-private.pem.keyy"
         },
         "IoTCertificate" : {
           "privateKeyPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-private.pem.key",
           "certificatePath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-certificate.pem.crt"
         }
       },
       "caPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/AmazonRootCA1.pem"
     },
     "writeDirectory": "/var/snap/aws-iot-greengrass/current/ggc-write-directory",
     "pidFileDirectory": "/var/snap/aws-iot-greengrass/current/pidFileDirectory"
   }
   ```

1. 執行下列命令來新增您的 AWS IoT Greengrass 憑證和組態檔案：

   ```
   sudo snap set aws-iot-greengrass gg-certs=/home/ubuntu/my-certs
   ```

### 部署 Lambda 函數
<a name="gg-snap-lambda"></a>

本節說明如何在 AWS IoT Greengrass Snap 上部署客戶受管 Lambda 函數。

**重要**  
AWS IoT Greengrass snap v1.11 僅支援非容器化 Lambda 函數。

1. 執行下列命令來啟動 AWS IoT Greengrass 協助程式：

   ```
   sudo snap start aws-iot-greengrass
   ```

   回應範例：

   ```
   Started.
   ```
**注意**  
如果發生錯誤，您可以使用 `snap run`命令取得詳細的錯誤訊息。如需更多故障診斷資訊，請參閱 [錯誤：無法執行下列任務：- 執行 snap "aws-iot-greengrass" (【start snap.aws-iot-greengrass.greengrassd.service】 的服務 【"greengrassd" 啟動服務命令 "start"，結束狀態為 1 的 【start snap.aws-iot-greengrass.greengrassd.service】 失敗：由於控制程序以錯誤碼結束。 如需詳細資訊，請參閱「systemctl status snap.aws-iot-greengrass.greengrassd.service」和「journalctl -xe」。)](#gg-snap-troubleshoot-snaprun)。

1. 執行下列命令以確認協助程式正在執行：

   ```
   snap services aws-iot-greengrass.greengrassd
   ```

   回應範例：

   ```
   Service                         Startup   Current  Notes
   aws-iot-greengrass.greengrassd  disabled  active   -
   ```

1. 遵循[模組 3 （第 1 部分）：上的 Lambda 函數 AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v1/developerguide/module3-I.html)來建立和部署 Hello World Lambda 函數。不過，在您部署 Lambda 函數之前，請先完成下一個步驟。

1. 請確定您的 Lambda 函數以`snap_daemon`使用者身分執行，且處於無容器模式。若要更新 Greengrass 群組的設定，請在 AWS IoT Greengrass 主控台中執行下列動作：

   1. 登入 AWS IoT Greengrass 主控台。

   1. <a name="console-gg-groups"></a>在 AWS IoT 主控台導覽窗格的**管理**下，展開 **Greengrass 裝置**，然後選擇**群組 (V1)**。

   1. 在 **Greengrass 群組**下，選擇目標群組。

   1. 在群組組態頁面的導覽窗格中，選擇 **Lambda 函數**索引標籤。

   1. 在**預設 Lambda 函數執行期環境中**，選擇**編輯**，然後執行下列動作：

      1. 對於**預設系統使用者和群組**，選擇**另一個使用者 ID/群組 ID**，然後**584788**針對**系統使用者 ID （數字）** 和**系統群組 ID （數字）** 輸入 。

      1. 針對**預設 Lambda 函數容器化**，選擇**無容器**。

      1. 選擇**儲存**。

### 停止 AWS IoT Greengrass 協助程式
<a name="gg-snap-stop"></a>

您可以使用 `snap stop`命令來停止服務。

若要停止 AWS IoT Greengrass 協助程式，請執行下列命令：

```
sudo snap stop aws-iot-greengrass
```

命令應傳回 `Stopped.`。

若要檢查您是否已成功停止 snap，請執行下列命令：

```
snap services aws-iot-greengrass.greengrassd
```

回應範例：

```
Service                         Startup   Current   Notes
aws-iot-greengrass.greengrassd  disabled  inactive  -
```

### 解除安裝 AWS IoT Greengrass Snap
<a name="gg-snap-uninstall"></a>

若要解除安裝 AWS IoT Greengrass snap，請執行下列命令：

```
sudo snap remove aws-iot-greengrass
```

回應範例：

```
aws-iot-greengrass removed
```

### 故障診斷 AWS IoT Greengrass Snap
<a name="gg-snap-troubleshoot"></a>

使用以下資訊來協助故障診斷 AWS IoT Greengrass Snap 的問題。

#### 取得許可拒絕錯誤。
<a name="gg-snap-troubleshoot-permission-denied"></a>

**解決方案**：許可遭拒錯誤通常是因為缺少界面。如需缺少界面的清單和詳細的故障診斷資訊，您可以使用 `snappy-debug`工具。

執行下列命令來安裝 工具。

```
sudo snap install snappy-debug
```

回應範例：

```
snappy-debug 0.36-snapd2.45.1 from Canonical✓ installed
```

在個別終端機工作階段中執行 `sudo snappy-debug`命令。操作會持續進行，直到發生許可遭拒錯誤為止。

例如，如果您的 Lambda 函數嘗試讀取 `$HOME`目錄中的檔案，您可能會收到下列回應：

```
INFO: Following '/var/log/syslog'. If have dropped messages, use:
INFO: $ sudo journalctl --output=short --follow --all | sudo snappy-debug
kernel.printk_ratelimit = 0
= AppArmor =
Time: Dec  6 04:48:26
Log: apparmor="DENIED" operation="mknod" profile="snap.aws-iot-greengrass.greengrassd" name="/home/ubuntu/my-file.txt" pid=12345 comm="touch" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
File: /home/ubuntu/my-file.txt (write)
Suggestion:
* add 'home' to 'plugs'
```

此範例顯示建立 `/home/ubuntu/my-file.txt` 檔案會導致 許可錯誤。它也建議您將 `home`新增至 `plugs`。不過，此語句不適用。`home-for-greengrassd` 和 `home-for-hooks`插頭只會獲得唯讀存取權。

如需詳細資訊，請參閱 [Snap 文件中的 Snappy-debug](https://snapcraft.io/docs/debug-snaps#heading--snappy-debug) snap。 **

#### 錯誤：無法執行下列任務：- 執行 snap "aws-iot-greengrass" (【start snap.aws-iot-greengrass.greengrassd.service】 的服務 【"greengrassd" 啟動服務命令 "start"，結束狀態為 1 的 【start snap.aws-iot-greengrass.greengrassd.service】 失敗：由於控制程序以錯誤碼結束。 如需詳細資訊，請參閱「systemctl status snap.aws-iot-greengrass.greengrassd.service」和「journalctl -xe」。)
<a name="gg-snap-troubleshoot-snaprun"></a>

**解決方案**：當`snap start aws-iot-greengrass`命令無法啟動 AWS IoT Greengrass Core 軟體時，您可能會看到此錯誤。

如需更多疑難排解資訊，請執行下列命令：

```
sudo snap run aws-iot-greengrass.greengrassd
```

回應範例：

```
Couldn't find /snap/aws-iot-greengrass/44/greengrass/config/config.json.
```

此範例顯示 AWS IoT Greengrass 找不到 `config.json` 檔案。您可以檢查組態和憑證檔案。

#### /var/snap/aws-iot-greengrass/current/ggc-write-directory/packages/1.11.5/rootfs/merged 不是絕對路徑或是符號連結。
<a name="gg-snap-troubleshoot-lambda"></a>

**解決方案**： AWS IoT Greengrass Snap 僅支援非容器化 Lambda 函數。請確定您在無容器模式下執行 Lambda 函數。如需詳細資訊，請參閱《 *AWS IoT Greengrass Version 1 開發人員指南*》中的[選擇 Lambda 函數容器化時的考量](https://docs.aws.amazon.com/greengrass/v1/developerguide/lambda-group-config.html#no-container-mode)事項。

#### 在您執行 sudo snap refresh snapd 命令後，Snapd 協助程式無法重新啟動。
<a name="gg-snap-troubleshoot-snapd"></a>

**解決方案**：遵循 中的步驟 6 到 8[安裝和設定 AWS IoT Greengrass Snap](#gg-snap-install-config)，將 AWS IoT Greengrass 憑證和組態檔案新增至 AWS IoT Greengrass 快照。

## 封存 AWS IoT Greengrass Core 軟體安裝
<a name="archive-ggc-version"></a>

升級到新版本的 AWS IoT Greengrass Core 軟體時，您可以封存目前安裝的版本。這會保留您目前的安裝環境，讓您可以在相同硬體上測試新的軟體版本。這也可讓您隨時輕鬆轉返至封存版本。

**封存目前安裝並安裝新版本**

1. 下載您想要升級至的 [AWS IoT Greengrass 核心軟體](what-is-gg.md#gg-core-download-tab)安裝套件。

1. 將套件複製到目的地核心裝置。如需示範傳輸檔案的說明，請參閱此[步驟](start-greengrass.md#transfer-files-to-device)。
**注意**  
稍後請將您目前的憑證、金鑰和組態檔案複製到新的安裝。

   在您的核心裝置終端機以下列步驟執行命令。

1. 請確認 Greengrass 協助程式在核心裝置上已停止。

   1. 檢查精靈是否有在運作：

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      若輸出的 `root` 含有 `/greengrass/ggc/packages/ggc-version/bin/daemon` 項目，則精靈有在運作。
**注意**  
編寫此程序時假設 AWS IoT Greengrass Core 軟體已安裝在 `/greengrass`目錄中。

   1. 停止 協助程式：

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd stop
      ```

1. 將目前的 Greengrass 根目錄移到不同的目錄。

   ```
   sudo mv /greengrass /greengrass_backup
   ```

1. 在核心裝置上將新的軟體解壓縮。取代命令中的 *os-architecture* 和 *version* 預留位置。

   ```
   sudo tar –zxvf greengrass-os-architecture-version.tar.gz –C /
   ```

1. 將封存的憑證、金鑰和組態檔案複製到新的安裝。

   ```
   sudo cp /greengrass_backup/certs/* /greengrass/certs
   sudo cp /greengrass_backup/config/* /greengrass/config
   ```

1. 啟動協助程式：

   ```
   cd /greengrass/ggc/core/
   sudo ./greengrassd start
   ```

現在，您可以執行群組部署以測試新的安裝。如果發生故障，您可以還原封存的安裝。

**還原封存的安裝**

1. 停止協助程式。

1. 刪除新的 `/greengrass` 目錄。

1. 將 `/greengrass_backup` 目錄移回 `/greengrass`。

1. 啟動協助程式。

# 設定 AWS IoT Greengrass 核心
<a name="gg-core"></a>

 AWS IoT Greengrass 核心是做為節點環境中中樞或閘道的 AWS IoT 物件 （裝置）。如同其他 AWS IoT 裝置，核心存在於登錄檔中，具有裝置影子，並使用裝置憑證向 AWS IoT Core 和 進行身分驗證 AWS IoT Greengrass。核心裝置執行 AWS IoT Greengrass 核心軟體，利其管理 Greengrass 群組的本機步驟，例如，通訊、陰影同步和字符交換。

Core AWS IoT Greengrass 軟體提供下列功能：<a name="ggc-software-features"></a>
+ 部署和本機執行連接器和 Lambda 函數。
+ 在本機使用自動匯出至 來處理資料串流 AWS 雲端。
+ 使用 受管訂閱，透過裝置、連接器和 Lambda 函數之間的本機網路傳送 MQTT 訊息。
+ 使用受管訂閱的 AWS IoT 和 裝置、連接器和 Lambda 函數之間的 MQTT 訊息。
+  AWS 雲端 使用裝置身分驗證和授權保護裝置與 之間的連線。
+ 裝置的本機陰影同步。陰影可設定為與 同步 AWS 雲端。
+ 對本機裝置和磁碟區資源控制的存取。
+ 用於執行本機推論的雲端訓練機器學習模型部署。
+ 可讓裝置探索 Greengrass 核心裝置的自動 IP 地址偵測。
+ 新的或更新的群組組態的集中部署。下載組態資料之後，核心裝置會自動重新啟動。
+ 使用者定義 Lambda 函數的安全over-the-air (OTA) 軟體更新。
+ 本機秘密的安全加密儲存，以及連接器和 Lambda 函數控制的存取。

## AWS IoT Greengrass 核心組態檔案
<a name="config-json"></a>

Core AWS IoT Greengrass 軟體的組態檔案為 `config.json`。它會置放於 `/greengrass-root/config` 目錄中。

**注意**  
*greengrass-root* 代表 Core AWS IoT Greengrass 軟體安裝在您裝置上的路徑。通常，這是 `/greengrass` 目錄。  
如果您從 AWS IoT Greengrass 主控台使用**預設群組建立**選項，則 `config.json` 檔案會部署到運作狀態的核心裝置。

 您可以執行下列命令檢閱此檔案內容：

```
cat /greengrass-root/config/config.json
```

以下是範例 `config.json` 檔案。這是從 AWS IoT Greengrass 主控台建立核心時產生的版本。

------
#### [ GGC v1.11 ]

```
{
    "coreThing": {
        "caPath": "root.ca.pem",
        "certPath": "hash.cert.pem",
        "keyPath": "hash.private.key",
        "thingArn": "arn:partition:iot:region:account-id:thing/core-thing-name",
        "iotHost": "host-prefix-ats.iot.region.amazonaws.com",
        "ggHost": "greengrass-ats.iot.region.amazonaws.com",
        "keepAlive": 600,
        "ggDaemonPort": 8000,
        "systemComponentAuthTimeout": 5000
    },
    "runtime": {
        "maxWorkItemCount": 1024,
        "maxConcurrentLimit": 25,
        "lruSize": 25,
        "mountAllBlockDevices": "no",
        "cgroup": {
            "useSystemd": "yes"
        }
    },
    "managedRespawn": false,
    "crypto": {
        "principals": {
            "SecretsManager": {
                "privateKeyPath": "file:///greengrass/certs/hash.private.key"
            },
            "IoTCertificate": {
                "privateKeyPath": "file:///greengrass/certs/hash.private.key",
                "certificatePath": "file:///greengrass/certs/hash.cert.pem"
            }
        },
        "caPath": "file:///greengrass/certs/root.ca.pem"
    },
    "writeDirectory": "/var/snap/aws-iot-greengrass/current/ggc-write-directory",
    "pidFileDirectory": "/var/snap/aws-iot-greengrass/current/pidFileDirectory"
}
```

`config.json` 檔案支援以下屬性：

**coreThing**


| 欄位 | Description | 備註 | 
| --- | --- | --- | 
| <a name="shared-config-capath"></a>caPath |   AWS IoT 根 CA 相對於`/greengrass-root/certs`目錄的路徑。  |  用於回溯相容於 1.7.0 之前的版本。當`crypto`物件存在時，會忽略此屬性。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。   | 
| <a name="shared-config-certpath"></a>certPath |  相對於 `/greengrass-root/certs` 目錄的核心裝置憑證路徑。  | 用於回溯相容於 1.7.0 之前的版本。當crypto物件存在時，會忽略此屬性。 | 
| <a name="shared-config-keypath"></a>keyPath | 相對於 /greengrass-root/certs 目錄的核心私有金鑰路徑。 | 用於回溯相容於 1.7.0 之前的版本。當crypto物件存在時，會忽略此屬性。 | 
| <a name="shared-config-thingarn"></a>thingArn | 代表 AWS IoT Greengrass 核心裝置的 AWS IoT 物件的 Amazon Resource Name (ARN)。 | 在 AWS IoT Greengrass 主控台的 核心下尋找核心的 ARN，或執行 CLI [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-core-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-core-definition-version.html) 命令。 | 
| <a name="shared-config-iothost-v1.9"></a>iotHost | 您的 AWS IoT 端點。 |  在**主控台**的設定 AWS IoT 下或透過執行 CLI [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html) 命令來尋找端點。 此命令傳回 Amazon Trust Services (ATS) 端點。如需詳細資訊，請參閱[伺服器身分驗證](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html)文件。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。 請確定您的[端點與您的 對應 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)。    | 
| <a name="shared-config-gghost-v1.9"></a>ggHost | 您的 AWS IoT Greengrass 端點。 |  這是您的 `iotHost` 端點，其具有的主機字首會由 *greengrass* 取代 (例如 `greengrass-ats.iot.region.amazonaws.com`)。使用與 AWS 區域 相同的 `iotHost`。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。 請確定您的[端點對應至您的 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/greengrass.html) 。    | 
| <a name="shared-config-iotmqttport"></a>iotMqttPort | 選用。用於 MQTT 通訊的連接埠號碼 AWS IoT。 | 有效值為 8883 或 443。預設值為 8883。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-iothttpport"></a>iotHttpPort | 選用。用於建立到 AWS IoT之 HTTPS 連線的連接埠號碼。 | 有效值為 8443 或 443。預設值為 8443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-ggmqttport"></a>ggMqttPort | 選用。用於透過區域網路進行 MQTT 通訊的連接埠號碼。 | 有效值為 1024 到 65535。預設值為 8883。如需詳細資訊，請參閱[設定本機簡訊的 MQTT 連接埠](#config-local-mqtt-port)。 | 
| <a name="shared-config-gghttpport"></a>ggHttpPort | 選用。用於建立到 AWS IoT Greengrass 服務之 HTTPS 連線的連接埠號碼。 | 有效值為 8443 或 443。預設值為 8443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-keepalive"></a>keepAlive | 選用。MQTT KeepAlive 期間 (以秒為單位)。 | 有效範圍介於 30 與 1200 秒之間。預設值為 600。 | 
| <a name="shared-config-networkproxy"></a>networkProxy | 選用。定義要連線代理伺服器的物件。 | 代理伺服器可以是 HTTP 或 HTTPS。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="config-mqttOperationTimeout-v1.11.0"></a>mqttOperationTimeout | 選用。在與 AWS IoT Core的 MQTT 連線中，允許 Greengrass 核心完成發佈、訂閱或取消訂閱操作的時間量 (以秒為單位)。 | 預設值為 5。最小值為 5。 | 
| <a name="shared-conifg-ggDaemonPort"></a>ggDaemonPort | 選用。Greengrass 核心 IPC 連接埠號碼。 |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值介於 1024 和 65535 之間。預設值為 8000。  | 
| <a name="shared-config-systemComponentAuthTimeout"></a>systemComponentAuthTimeout | 選用。允許 Greengrass 核心 IPC 完成身分驗證的時間 （以毫秒為單位）。 |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值介於 500 到 5000 之間。預設值為 5000。  | 

**runtime**


| 欄位 | Description | 備註 | 
| --- |--- |--- |
| maxWorkItemCount | 選用。Greengrass 協助程式一次可以處理的工作項目數量上限。超過此限制的工作項目會被忽略。 工作項目佇列由系統元件、使用者定義的 Lambda 函數和連接器共用。 | 預設值為 1024。該最大值受裝置硬體的限制。 增加此值會增加 AWS IoT Greengrass 使用的記憶體。如果您預期核心會接收大量的 MQTT 訊息流量，則可以提高此值。  | 
| maxConcurrentLimit | 選用。Greengrass 協助程式可以擁有的並行未鎖定 Lambda 工作者數量上限。您可以指定不同的整數來覆寫此參數。 | 預設值為 25。最小值由 定義`lruSize`。  | 
| lruSize | Optional. Defines the minimum value for maxConcurrentLimit. | The default value is 25. | 
| mountAllBlockDevices | Optional. Enables AWS IoT Greengrass to use bind mounts to mount all block devices into a container after setting up the OverlayFS. |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值為 `yes` 和 `no`。預設值為 `no`。 `yes` 如果您的`/usr`目錄不在`/`階層下，請將此值設定為 。 | 
| postStartHealthCheckTimeout | Optional. The time (in milliseconds) after starting that the Greengrass daemon waits for the health check to finish. | The default timeout is 30 seconds (30000 ms). | 
| `cgroup` | 
| --- |
| useSystemd | Indicates whether your device uses [https://en.wikipedia.org/wiki/Systemd](https://en.wikipedia.org/wiki/Systemd). | Valid values are 是 or 否. Run the check\$1ggc\$1dependencies script in [模組 1](module1.md) to see if your device uses systemd. | 

**加密**

`crypto` 包含支援透過 PKCS\$111 和本機秘密儲存在硬體安全模組 (HSM) 上儲存私密金鑰的屬性。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。


| 欄位 | Description | 備註 | 
| --- |--- |--- |
| caPath |   AWS IoT 根 CA 的絕對路徑。  |  必須為此格式的檔案 URI：`file:///absolute/path/to/file`。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  選用。OpenSSL 引擎 `.so` 檔案的絕對路徑，此檔案可在 OpenSSL 上啟用 PKCS\$111 支援。  |  必須是檔案系統上的檔案路徑。 如果您使用具有硬體安全性的 Greengrass OTA 更新代理程式，則需要此屬性。如需詳細資訊，請參閱[設定無線更新的支援](hardware-security.md#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 實作的 libdl-loadable 程式庫的絕對路徑。  |  必須是檔案系統上的檔案路徑。  | 
| slotLabel |  用於識別硬體模組的插槽標籤。  |  必須符合 PKCS\$111 標籤規格。  | 
| slotUserPin |  用來向模組驗證 Greengrass 核心的使用者 PIN 碼。  |  必須具有足夠的許可，才能使用設定的私有金鑰執行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | The certificate and private key that the core uses to make requests to AWS IoT. | 
| IoTCertificate  .privateKeyPath  |  核心私有金鑰的路徑。  |  如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。  | 
| IoTCertificate  .certificatePath |  核心裝置憑證的絕對路徑。  |  必須為此格式的檔案 URI：`file:///absolute/path/to/file`。  | 
| MQTTServerCertificate |  選用。核心用於結合憑證做為 MQTT 伺服器或閘道的私有金鑰。  | 
| MQTTServerCertificate  .privateKeyPath |  本機 MQTT 伺服器私有金鑰的路徑。  |  使用此值，為本機 MQTT 伺服器指定您自己的私有金鑰。 如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。 如果省略此屬性， 會根據輪換設定 AWS IoT Greengrass 輪換金鑰。若有指定，則由客戶負責輪換金鑰。  | 
| SecretsManager | The private key that secures the data key used for encryption. For more information, see [將秘密部署到 AWS IoT Greengrass 核心](secrets.md). | 
| SecretsManager  .privateKeyPath |  本機 Secrets Manager 私有金鑰的路徑。  |  僅支援 RSA 金鑰。 如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。必須使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填補機制產生私密金鑰。  | 

也支援下列組態屬性：


****  

| 欄位 | Description | 備註 | 
| --- | --- | --- | 
| <a name="shared-config-mqttmaxconnectionretryinterval"></a> mqttMaxConnectionRetryInterval  |  選用。連線中斷時，MQTT 連線重試的間隔上限 (以秒為單位)。  |  請指定此數值做為未簽署的整數。預設值為 `60`。  | 
| <a name="shared-config-managedrespawn"></a> managedRespawn  |  選用。指出 OTA 代理程式在更新之前需要執行自訂程式碼。  |  有效值為 `true` 或 `false`。如需詳細資訊，請參閱[AWS IoT Greengrass Core 軟體的 OTA 更新](core-ota-update.md)。  | 
| <a name="shared-config-writedirectory"></a> writeDirectory  |  選用。其中 AWS IoT Greengrass 建立所有讀取/寫入資源的寫入目錄。  |  如需詳細資訊，請參閱[設定 的寫入目錄 AWS IoT Greengrass](#write-directory)。  | 
| <a name="shared-config-piddirectory"></a>pidFileDirectory |  Optional. 會將其程序 ID (PID) AWS IoT Greengrass 存放在此目錄下。  |  預設值為 `/var/run`。  | 

------
#### [ Extended life versions ]

下列版本的 AWS IoT Greengrass Core 軟體處於[延長生命週期階段](maintenance-policy.md)。此資訊僅供參考之用。

GGC 1.10 版  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600,
    "systemComponentAuthTimeout": 5000
  },
  "runtime" : {
    "maxWorkItemCount" : 1024,
    "maxConcurrentLimit" : 25,
    "lruSize": 25,
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
<a name="config-json-properties-corething-v1.9"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
`crypto` 包含支援透過 PKCS\$111 和本機秘密儲存在硬體安全模組 (HSM) 上儲存私密金鑰的屬性。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

GGC 1.9 版  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
<a name="config-json-properties-corething-v1.9"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
已在 v1.7.0 中新增 `crypto` 物件。其中推出的屬性可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC 1.8 版**  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:aws:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援下列屬性。  
**coreThing**      
<a name="config-json-properties-corething-v1.8"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
已在 v1.7.0 中新增 `crypto` 物件。其中推出的屬性可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.7**  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:aws:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
於 v1.7.0 新增的 `crypto` 物件所引進的屬性，可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.6**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600,
       "mqttMaxConnectionRetryInterval": 60
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true,
   "writeDirectory": "/write-directory"
}
```
如果您從 AWS IoT Greengrass 主控台使用**預設群組建立**選項，則 `config.json` 檔案會部署到工作狀態的核心裝置，以指定預設組態。
`config.json` 檔案支援以下屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.5**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.3**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.1**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   }
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.0**  
在 AWS IoT Greengrass Core v1.0 中， `config.json` 會部署到 `greengrass-root/configuration`。  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   }
}
```
`config.json` 檔案存在於 `/greengrass-root/configuration` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

------

## 服務端點必須符合根 CA 憑證類型
<a name="certificate-endpoints"></a>

您的 AWS IoT Core 和 AWS IoT Greengrass 端點必須對應至裝置上的根 CA 憑證的憑證類型。如果端點和憑證類型不相符，身分驗證嘗試會在裝置和 AWS IoT Core 或 之間失敗 AWS IoT Greengrass。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[伺服器身分驗證](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html)。

如果您的裝置使用 Amazon Trust Services (ATS) 根 CA 憑證，這是偏好的方法，它也必須使用 ATS 端點進行裝置管理和探索資料平面操作。ATS 端點包含 `ats`區段，如下列 AWS IoT Core 端點語法所示。

```
prefix-ats.iot.region.amazonaws.com
```

**注意**  
為了回溯相容性， AWS IoT Greengrass 目前支援某些 中的舊版 VeriSign 根 CA AWS 區域憑證和端點。如果您使用的是舊式 VeriSign 根 CA 憑證，我們建議您建立 ATS 端點，並改用 ATS 根 CA 憑證。否則，請務必使用對應的舊式端點。如需詳細資訊，請參閱 中[支援的舊版端點](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#greengrass-legacy-endpoints)*Amazon Web Services 一般參考*。

### config.json 中的端點
<a name="certificate-endpoints-config"></a>

在 Greengrass 核心裝置上，端點會在 [`config.json`](#config-json) 檔案的 `coreThing` 物件中指定。`iotHost` 屬性代表 AWS IoT Core 端點。`ggHost` 屬性代表 AWS IoT Greengrass 端點。在下列範例程式碼片段中，這些屬性指定 ATS 端點。

```
{
  "coreThing" : {
    ...
    "iotHost" : "abcde1234uwxyz-ats.iot.us-west-2.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
    ...
  },
```

**AWS IoT Core 端點**  
您可以使用適當的 `--endpoint-type` 參數執行 [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html) CLI 命令來取得 AWS IoT Core 端點。  
+ 若要傳回 ATS 簽署的端點，請執行：

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```
+ 若要傳回舊式 VeriSign 簽署的端點，請執行：

  ```
  aws iot describe-endpoint --endpoint-type iot:Data
  ```

**AWS IoT Greengrass 端點**  
您的 AWS IoT Greengrass 端點是您的`iotHost`端點，主機字首會取代為 *greengrass*。例如，ATS 簽署的端點是 `greengrass-ats.iot.region.amazonaws.com`。這使用與 AWS IoT Core 端點相同的區域。

## 連線至連接埠 443 或透過網路代理
<a name="alpn-network-proxy"></a>

此功能適用於 AWS IoT Greengrass Core v1.7 和更新版本。

Greengrass 核心 AWS IoT Core 使用 MQTT 訊息通訊協定搭配 TLS 用戶端身分驗證與 通訊。根據慣例，透過 TLS 的 MQTT 使用連接埠 8883。不過，做為安全措施之用，受限環境可能會將傳入和傳出流量限制於小範圍的 TCP 連接埠。例如，企業防火牆可能會針對 HTTPS 流量開放連接埠 443，但關閉較不常用之通訊協定的其他連接埠，例如 MQTT 流量的連接埠 8883。其他受限環境可能會要求所有流量先通過 HTTP 連線，再連線至網際網路。

若要在這些案例中啟用通訊， AWS IoT Greengrass 允許下列組態：
+ **透過連接埠 443 使用 TLS 用戶端身分驗證的 MQTT**。如果您的網路允許對連接埠 443 的連線，您可以將核心設定為針對 MQTT 流量使用連接埠 443，而不使用預設的連接埠 8883。這可以直接連線至連接埠 443，或透過網路代理伺服器連線。

  AWS IoT Greengrass 使用 [ Application Layer Protocol Network](https://tools.ietf.org/html/rfc7301) (ALPN) TLS 延伸來啟用此連線。針對預設組態，連接埠 443 上透過 TLS 的 MQTT 使用憑證型的用戶端身分驗證。

  當設定為使用連接埠 443 的直接連線時，核心支援軟體[over-the-air(OTA) 更新](core-ota-update.md)。 AWS IoT Greengrass 此支援需要 AWS IoT Greengrass Core v1.9.3 或更新版本。
+ 根據預設**，透過連接埠 443 的 HTTPS 通訊**會透過連接埠 8443 AWS IoT Greengrass 傳送 HTTPS 流量，但您可以將其設定為使用連接埠 443。
+ **透過網路代理的連線**。您可以設定網路代理伺服器，做為連線至 Greengrass 核心的中介。僅支援基本身分驗證和 HTTP 與 HTTPS 代理。

  代理組態會透過 `http_proxy`、 `https_proxy`和 `no_proxy`環境變數傳遞給使用者定義的 Lambda 函數。使用者定義的 Lambda 函數必須使用這些傳入設定來透過代理連線。根據預設，Lambda 函數用來進行連線的常見程式庫 （例如 boto3 或 cURL 和 python `requests`套件） 通常會使用這些環境變數。如果 Lambda 函數也指定這些相同的環境變數， AWS IoT Greengrass 則不會覆寫它們。
**重要**  
設定為使用網路代理的 Greengrass 核心不支援 [OTA 更新](core-ota-update.md)。<a name="config-mqtt-port"></a>

**透過連接埠 443 設定 MQTT**

此功能需要 AWS IoT Greengrass Core v1.7 或更新版本。

此程序可讓 Greengrass 核心將連接埠 443 用於與 AWS IoT Core傳遞 MQTT 訊息。

1. 執行下列命令來停止 Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `iotMqttPort` 屬性，並將值設定為 **443**，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "iotMqttPort" : 443,
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

 <a name="config-http-port"></a>

**透過連接埠 443 設定 HTTPS**

此功能需要 AWS IoT Greengrass Core v1.8 或更新版本。

此程序會設定核心使用連接埠 443 進行 HTTPS 通訊。

1. 執行下列命令來停止 Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `iotHttpPort` 和 `ggHttpPort` 屬性，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "iotHttpPort" : 443,
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "ggHttpPort" : 443,
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

 <a name="config-network-proxy"></a>

**設定網路代理**

此功能需要 AWS IoT Greengrass Core v1.7 或更新版本。

此程序允許 透過 HTTP 或 HTTPS 網路代理 AWS IoT Greengrass 連線到網際網路。

1. 執行下列命令來停止 Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 使用 `coreThing` 物件來新增 [networkProxy](#networkProxy-object) 物件，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "keepAlive" : 600,
           "networkProxy": {
               "noProxyAddresses" : "http://128.12.34.56,www.mywebsite.com",
               "proxy" : {
                   "url" : "https://my-proxy-server:1100",
                   "username" : "Mary_Major",
                   "password" : "pass@word1357"
               }
           }
       },
       ...
   }
   ```

1. 啟動協助程式。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

**networkProxy 物件**

使用 `networkProxy` 物件，指定網路代理的相關資訊。此物件具有下列屬性。


| 欄位 | Description (描述) | 
| --- | --- | 
| noProxyAddresses |  選用。從代理中免除的 IP 地址或主機名稱清單 (以逗號分隔)。  | 
| proxy |  要連線至的代理。代理具有以下屬性。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)  | 

### 允許端點
<a name="allow-endpoints-proxy"></a>

Greengrass 裝置和 AWS IoT Core 或 之間的通訊 AWS IoT Greengrass 必須經過身分驗證。此身分驗證是根據已註冊的 X.509 裝置憑證和加密金鑰。若要允許經驗證的請求通過代理而不需其他加密，請允許以下端點。


| Endpoint | 站點 | Description | 
| --- | --- | --- | 
| greengrass.region.amazonaws.com | 443 |  用於群組管理的控制平面操作。  | 
| `prefix-ats.iot.region.amazonaws.com` 或 `prefix.iot.region.amazonaws.com` | MQTT：8883 或 443 HTTPS：8443 或 443 |  用於裝置管理的資料平面操作，例如陰影同步。 根據您的核心和用戶端裝置是否使用 Amazon Trust Services （偏好） 根 CA 憑證、舊版根 CA 憑證或兩者，允許使用一個或兩個端點。如需詳細資訊，請參閱[服務端點必須符合根 CA 憑證類型](#certificate-endpoints)。  | 
| `greengrass-ats.iot.region.amazonaws.com` 或 `greengrass.iot.region.amazonaws.com` | 8443 或 443 |  用於裝置探索操作。 根據您的核心和用戶端裝置是否使用 Amazon Trust Services （偏好） 根 CA 憑證、舊版根 CA 憑證或兩者，允許使用一個或兩個端點。如需詳細資訊，請參閱[服務端點必須符合根 CA 憑證類型](#certificate-endpoints)。  在連接埠 443 上連線的用戶端必須實作 [ Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) TLS 延伸模組，並在 `ProtocolName`中`x-amzn-http-ca`做為 傳遞`ProtocolNameList`。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[通訊協定](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)。   | 
| \$1.s3.amazonaws.com | 443 |  用於部署操作和無線更新。此格式包括 `*` 字元，因為端點字首是由內部控制，並可能隨時變更。  | 
| logs.region.amazonaws.com | 443 |  如果 Greengrass 群組設定為將日誌寫入 CloudWatch，則為必要項目。  | 

## 設定 的寫入目錄 AWS IoT Greengrass
<a name="write-directory"></a>

此功能適用於 AWS IoT Greengrass Core v1.6 和更新版本。

根據預設， AWS IoT Greengrass Core 軟體會部署在單一根目錄下，其中 會 AWS IoT Greengrass 執行所有讀取和寫入操作。不過，您可以將 設定為對所有寫入操作 AWS IoT Greengrass 使用單獨的目錄，包括建立目錄和檔案。在此情況下， AWS IoT Greengrass 會使用兩個最上層目錄：
+ *greengrass-root* 目錄，可將其保留為可讀寫或選擇為唯讀。這包含 AWS IoT Greengrass 核心軟體和其他重要元件，這些元件在執行期間應保持不變，例如憑證和 `config.json`。
+ 指定的寫入目錄。這包含可寫入的內容，例如日誌、狀態資訊和部署的使用者定義 Lambda 函數。

此組態結果為下列目錄結構。

**Greengrass 根目錄**  

```
greengrass-root/
|-- certs/
|   |-- root.ca.pem
|   |-- hash.cert.pem
|   |-- hash.private.key
|   |-- hash.public.key
|-- config/
|   |-- config.json
|-- ggc/
|   |-- packages/
|       |-- package-version/
|           |-- bin/
|               |-- daemon 
|           |-- greengrassd
|           |-- lambda/
|           |-- LICENSE/
|           |-- release_notes_package-version.html
|               |-- runtime/
|                   |-- java8/
|                   |-- nodejs8.10/
|                   |-- python3.8/
|   |-- core/
```

**寫入目錄**  

```
write-directory/
|-- packages/
|   |-- package-version/
|       |-- ggc_root/
|       |-- rootfs_nosys/
|       |-- rootfs_sys/
|       |-- var/
|-- deployment/
|   |-- group/
|       |-- group.json
|   |-- lambda/
|   |-- mlmodel/
|-- var/
|   |-- log/
|   |-- state/
```

 

**設定寫入目錄**

1. 執行下列命令來停止 AWS IoT Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 新增 `writeDirectory` 為參數並指定目標目錄路徑，如下所示。

   ```
   {
       "coreThing": {
           "caPath": "root-CA.pem",
           "certPath": "hash.pem.crt",
           ...
       },
       ...
       "writeDirectory" : "/write-directory"
   }
   ```
**注意**  
您隨時可以更新 `writeDirectory` 設定。更新設定後， 會在下一次開始時 AWS IoT Greengrass 使用新指定的寫入目錄，但不會從先前的寫入目錄遷移內容。

1. 現在，您的寫入目錄已設定，您可以選擇設定 *greengrass-root* 目錄為唯讀。如需詳細資訊，請參閱[設定 Greengrass 根目錄成為唯讀](#configure-ro-directory)。

   否則，請啟動 AWS IoT Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

 <a name="configure-ro-directory"></a>

**將 Greengrass 根目錄設為唯讀**

只有在您想要將 Greengrass 根目錄設為唯讀狀態時，才需依照下列步驟執行。開始之前，必須先設定寫入目錄。

1. 授與必要目錄的存取許可：

   1. 將讀取和寫入許可提供給 `config.json` 擁有者。

      ```
      sudo chmod 0600 /greengrass-root/config/config.json
      ```

   1. 使 ggc\$1user 成為憑證和系統 Lambda 目錄的擁有者。

      ```
      sudo chown -R ggc_user:ggc_group /greengrass-root/certs/
      sudo chown -R ggc_user:ggc_group /greengrass-root/ggc/packages/1.11.6/lambda/
      ```
**注意**  
預設會使用 ggc\$1user 和 ggc\$1group 帳戶來執行系統 Lambda 函數。如果您設定群組層級的[預設存取身分](lambda-group-config.md#lambda-access-identity-groupsettings)使用不同的帳戶，您應該改將許可提供給該使用者 (UID) 和群組 (GID)。

1. 使用您偏好的機制將 *greengrass-root* 目錄設為唯讀。
**注意**  
其中一種設定 *greengrass-root* 目錄為唯讀的方法是掛載目錄為唯讀。不過，若要將無線 (OTA) 更新套用至掛載目錄中的 AWS IoT Greengrass Core 軟體，必須先移除掛載目錄，待更新完成後再次掛載目錄。您可以新增這些 `umount` 和 `mount` 操作到 `ota_pre_update` 和 `ota_post_update` 指令碼中。如需 OTA 更新的詳細資訊，請參閱 [Greengrass OTA 更新代理程式](core-ota-update.md#ota-agent) 和 [透過 OTA 更新受管的 respawn](core-ota-update.md#ota-managed-respawn)。

1. 啟動協助程式。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

   如果未正確設定步驟 1 的許可，則協助程式不會啟動。

## 配置 MQTT 設定
<a name="configure-mqtt"></a>

在 AWS IoT Greengrass 環境中，本機用戶端裝置、Lambda 函數、連接器和系統元件可以互相通訊並與之通訊 AWS IoT Core。所有通訊都經過核心，負責管理授權實體與 MQTT 通訊之間的[訂閱](gg-sec.md#gg-msg-workflow)。

如需可設定 MQTT 設定的相關資訊 AWS IoT Greengrass，請參閱下列各節：
+ [訊息服務品質](#message-quality-of-service)
+ [雲端目標的 MQTT 訊息佇列](#mqtt-message-queue)
+ [使用 的 MQTT 持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)
+ [與 進行 MQTT 連線的用戶端 IDs AWS IoT](#connection-client-id)
+ [用於本機訊息的 MQTT 連接埠](#config-local-mqtt-port)
+ [使用 發佈、訂閱、取消訂閱 MQTT 連線操作的逾時 AWS 雲端](#mqtt-operation-timeout)

**注意**  
<a name="sitewise-connector-opcua-support"></a>OPC-UA 是一個用於工業通訊的資訊交換標準。若要在 Greengrass 核心上實作對 OPC-UA 的支援，您可以使用 [IoT SiteWise 連接器](iot-sitewise-connector.md)。連接器會將工業裝置資料從 OPC-UA 伺服器傳送至其中的資產屬性 AWS IoT SiteWise。

### 訊息服務品質
<a name="message-quality-of-service"></a>

AWS IoT Greengrass 根據您的組態和通訊的目標和方向， 支援服務品質 (QoS) 層級 0 或 1。Greengrass 核心做為與 通訊的用戶端， AWS IoT Core 以及用於在本機網路上通訊的訊息中介裝置。

![\[核心做為用戶端和本機訊息代理程式。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/mqtt-qos.png)


如需 MQTT 和 QoS 的詳細資訊，請參閱 MQTT 網站上的[入門](https://mqtt.org/getting-started/)。

**與 通訊 AWS 雲端**  
+ **使用 QoS 1 的傳出訊息**

  核心會使用 QoS 1 傳送目標 AWS 雲端 的訊息。 AWS IoT Greengrass 會使用 MQTT 訊息佇列來處理這些訊息。如果未由 確認訊息傳遞 AWS IoT，訊息會經過多工緩衝處理，以便稍後重試。如果佇列已滿，則無法重試訊息。訊息傳遞確認有助於將間歇性連線造成的資料遺失降到最低。

  由於傳出訊息 AWS IoT 要使用 QoS 1，Greengrass 核心可以傳送訊息的最大速率取決於核心與 之間的延遲 AWS IoT。每次核心傳送訊息時，都會等待 AWS IoT 確認訊息後再傳送下一個訊息。例如，如果核心與其之間的往返時間為 AWS 區域 50 毫秒，則核心每秒最多可傳送 20 則訊息。當您選擇核心連線 AWS 區域 的 時，請考慮此行為。若要將大量 IoT 資料擷取至 AWS 雲端，您可以使用[串流管理員](stream-manager.md)。

  如需 MQTT 訊息佇列的詳細資訊，包括如何設定本機儲存快取，以保留目的地為 AWS 雲端 目標的訊息，請參閱 [雲端目標的 MQTT 訊息佇列](#mqtt-message-queue)。
+ **使用 QoS 0 (預設值) 或 QoS 1 的傳入訊息**

  根據預設，核心會使用 QoS 0 訂閱 AWS 雲端 來源的訊息。如果您啟用持久性工作階段，該核心會使用 QoS 1 進行訂閱。這有助於將間歇連線所造成的資料遺失降至最低。若要管理這些訂閱的 QoS，請在本機多工緩衝處理器系統元件上設定持久性設定。

  如需詳細資訊，包括如何啟用核心以建立具有 AWS 雲端 目標的持久性工作階段，請參閱 [使用 的 MQTT 持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)。

**與本機目標的通訊**  
所有本機通訊都使用 QoS 0。核心會嘗試傳送訊息至本機目標，該目標可以是 Greengrass Lambda 函數、連接器或[用戶端裝置](what-is-gg.md#greengrass-devices)。核心不會存放訊息或確認交付。您可以在元件之間任意刪除訊息。  
雖然 Lambda 函數之間的直接通訊不使用 MQTT 訊息，但行為是相同的。

### 雲端目標的 MQTT 訊息佇列
<a name="mqtt-message-queue"></a>

目標的 MQTT 訊息 AWS 雲端 會排入佇列等待處理。佇列的訊息依先進先出 (FIFO) 順序處理。處理訊息並發佈至 後 AWS IoT Core，訊息會從佇列中移除。

根據預設，Greengrass 核心會存放在以 AWS 雲端 目標為目標的記憶體未處理訊息中。您可以設定該核心，以將未處理的訊息改存放於本機儲存快取中。與記憶體內儲存不同，本機儲存快取能夠在核心重新啟動 （例如，在群組部署或裝置重新啟動之後） 之間保留，因此 AWS IoT Greengrass 可以繼續處理訊息。您也可以設定儲存大小。

**警告**  
Greengrass 核心可能會在失去連線時將重複的 MQTT 訊息排入佇列，因為它會在 MQTT 用戶端偵測到離線之前重試發佈操作。若要避免雲端目標重複的 MQTT 訊息，請將核心`keepAlive`的值設定為小於其`mqttOperationTimeout`值的一半。如需詳細資訊，請參閱[AWS IoT Greengrass 核心組態檔案](#config-json)。

AWS IoT Greengrass 使用多工緩衝處理系統元件 (`GGCloudSpooler`Lambda 函數） 來管理訊息佇列。您可以使用下列 `GGCloudSpooler` 環境變數來設定儲存設定。
+ **GG\$1CONFIG\$1STORAGE\$1TYPE**。訊息佇列的位置。以下為有效值：
  + `FileSystem`。 將未處理的訊息儲存在實體核心裝置的磁碟本機儲存快取中。核心重新啟動時，會保留佇列中的訊息以待處理。訊息處理後會移除。
  + `Memory` (預設)。將未處理的訊息存放於記憶體。核心重新啟動時，佇列的訊息會遺失。

    此選項針對具有限硬體功能的裝置進行最佳化。若使用此組態，建議您在服務中斷最低時部署群組或重新啟動裝置。
+ **GG\$1CONFIG\$1MAX\$1SIZE\$1BYTES**。儲存大小，以位元組計。此值可以是**大於或等於 262144 **(256 KB) 的任何非負整數；較小的大小可防止 AWS IoT Greengrass Core 軟體啟動。預設大小為 2.5 MB。超過大小限制時，舊佇列訊息會由新訊息取代。

**注意**  
此功能適用於 AWS IoT Greengrass Core v1.6 和更新版本。舊版使用佇列大小為 2.5 MB 的記憶體內儲存。您不能設定舊版的儲存設定。

#### 在本機儲存快取訊息
<a name="configure-local-storage-cache"></a>

您可以設定 AWS IoT Greengrass 將訊息快取至檔案系統，使其在核心重新啟動期間持續存在。若要執行此操作，請部署函數定義版本，其中 `GGCloudSpooler` 函數會將儲存類型設定為 `FileSystem`。您必須使用 AWS IoT Greengrass API 來設定本機儲存快取。您無法在主控台執行這項操作。

下列程序使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令來設定多工緩衝處理程式，將排入佇列的訊息儲存至檔案系統。這還會設定一個 2.6 MB 大小的佇列。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. <a name="parse-function-def-id"></a>從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID。該 ID 是 ARN 中跟在 `functions` 區段後面的 GUID，如下列範例所示。

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
   ```
**注意**  
或者，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)命令，然後從輸出複製 ID 來建立函數定義。

1. 新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **spooler-function**。
   + 將您想要在此版本中包含的任何 Lambda 函數新增至`functions`陣列。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html)命令，從現有的函數定義版本取得 Greengrass Lambda 函數。
**警告**  
務必為 `GG_CONFIG_MAX_SIZE_BYTES` 指定**大於或等於 262144 的值**。較小的大小可防止 AWS IoT Greengrass Core 軟體啟動。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_MAX_SIZE_BYTES":"2621440","GG_CONFIG_STORAGE_TYPE":"FileSystem"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id"}]'
   ```
**注意**  
如果您先前已將`GG_CONFIG_SUBSCRIPTION_QUALITY`環境變數設定為[支援 的持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)，請將其包含在此函數執行個體中。

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

 若要更新儲存設定，您可以使用 AWS IoT Greengrass API 來建立新的函數定義版本，其中包含具有更新組態的`GGCloudSpooler`函數。然後，請將函數定義版本新增至新群組版本 (以及其他群組元件) 和部署群組的版本中。如果想要還原預設組態，您可以部署一個不包含 `GGCloudSpooler` 函數的函數定義版本。

 此系統 Lambda 函數不會顯示在主控台中。然而，在函數新增至最新的群組版本後，除非您使用 API 執行取代或移除作業，否則其將包含在從主控台進行的部署中。

### 使用 的 MQTT 持久性工作階段 AWS IoT Core
<a name="mqtt-persistent-sessions"></a>

此功能適用於 AWS IoT Greengrass Core v1.10 和更新版本。

Greengrass 核心可以與 AWS IoT 訊息中介裝置建立持久性工作階段。持久性工作階段是持續的連線，允許核心在離線時接收傳送的訊息。該核心是連線中的用戶端。

在持久性工作階段中， AWS IoT 訊息中介裝置會儲存核心在連線期間所做的所有訂閱。如果核心中斷連線， AWS IoT 訊息中介裝置會儲存未確認和發佈為 QoS 1 的新訊息，並以本機目標為目標，例如 Lambda 函數和[用戶端裝置](what-is-gg.md#greengrass-devices)。當核心重新連線時，持久性工作階段會繼續，且 AWS IoT 訊息中介裝置會以每秒 10 則訊息的最大速率將儲存的訊息傳送至核心。持久性工作階段的預設到期時間為 1 小時，並在訊息代理程式偵測到核心中斷連線時開始。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的 [MQTT 持久性工作階段](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt-persistent-sessions.html)。

AWS IoT Greengrass 使用多工緩衝處理系統元件 (`GGCloudSpooler`Lambda 函數） 來建立具有 AWS IoT 作為來源的訂閱。您可以使用下列 `GGCloudSpooler` 環境變數來設定持久性工作階段。
+ **GG\$1CONFIG\$1SUBSCRIPTION\$1QUALITY**。以 AWS IoT 做為來源的訂閱品質。以下為有效值：
  + `AtMostOnce` (預設)。停用持久性工作階段。使用 QoS 0 的訂閱。
  + `AtLeastOncePersistent`。 啟用持久性工作階段。在 `CONNECT` 訊息中設定 `cleanSession` 旗標為 `0`，並以 QoS 1 訂閱。

    核心接收到的 QoS 1 發佈訊息，會保證達到 Greengrass 協助程式的記憶體內工作佇列。核心會在訊息新增至佇列後確認訊息。從佇列到本機目標 （例如 Greengrass Lambda 函數、連接器或裝置） 的後續通訊會以 QoS 0 傳送。 AWS IoT Greengrass 不保證可交付至本機目標。
**注意**  
您可以使用 [maxWorkItemCount](#config-json-runtime) 組態屬性來控制工作項目佇列的大小。例如，如果您的工作負載需要大量的 MQTT 流量，您可以提升佇列大小。

    啟用持久性工作階段時，核心會開啟至少一個額外的連線，以便與 MQTT 訊息交換 AWS IoT。如需詳細資訊，請參閱[與 進行 MQTT 連線的用戶端 IDs AWS IoT](#connection-client-id)。

#### 設定 MQTT 持久性工作階段
<a name="configure-persistent-sessions"></a>

您可以將 設定為搭配 AWS IoT Greengrass 使用持久性工作階段 AWS IoT Core。若要執行此操作，請部署函數定義版本，其中 `GGCloudSpooler` 函數會將訂閱品質設定為 `AtLeastOncePersistent`。此設定適用於您所有以 AWS IoT Core (`cloud`) 做為來源的訂閱。您必須使用 AWS IoT Greengrass API 來設定持久性工作階段。您無法在主控台執行這項操作。

下列程序使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令，將多工緩衝處理程式設定為使用持久性工作階段。在此程序中，我們假設您正在更新現有群組的最新群組版本設定。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. <a name="parse-function-def-id"></a>從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID。該 ID 是 ARN 中跟在 `functions` 區段後面的 GUID，如下列範例所示。

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
   ```
**注意**  
或者，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)命令來建立函數定義，然後從輸出複製 ID。

1. 新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **spooler-function**。
   + 將您想要在此版本中包含的任何 Lambda 函數新增至`functions`陣列。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html)命令，從現有的函數定義版本取得 Greengrass Lambda 函數。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_SUBSCRIPTION_QUALITY":"AtLeastOncePersistent"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id"}]'
   ```
**注意**  
如果您先前設定 `GG_CONFIG_STORAGE_TYPE` 或 `GG_CONFIG_MAX_SIZE_BYTES` 環境變數來[定義儲存設定](#mqtt-message-queue)，請將它們包含在此函數執行個體中。

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

1. (選用) 提高核心組態檔案中的 [maxWorkItemCount](#config-json-runtime) 屬性。這有助核心處理增加的 MQTT 流量以及與本機目標之間的通訊。

 若要使用這些組態變更更新核心，您可以使用 AWS IoT Greengrass API 來建立新的函數定義版本，其中包含具有更新組態的`GGCloudSpooler`函數。然後，請將函數定義版本新增至新群組版本 (以及其他群組元件) 和部署群組的版本中。如果想要還原預設組態，您可以建立一個不包含 `GGCloudSpooler` 函數的函數定義版本。

 此系統 Lambda 函數不會顯示在主控台中。然而，在函數新增至最新的群組版本後，除非您使用 API 執行取代或移除作業，否則其將包含在從主控台進行的部署中。

### 與 進行 MQTT 連線的用戶端 IDs AWS IoT
<a name="connection-client-id"></a>

此功能適用於 AWS IoT Greengrass Core v1.8 和更新版本。

Greengrass 核心會開啟與 的 MQTT 連線 AWS IoT Core ，以進行陰影同步和憑證管理等操作。對於這些連線，核心會根據核心物件名稱產生可預測的用戶端 ID。可預測IDs 可與監控、稽核和定價功能搭配使用，包括 AWS IoT Device Defender 和 [AWS IoT 生命週期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)。您也可以建立關於可預測用戶端 ID 的邏輯 (例如根據憑證屬性建立[訂閱政策](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)範本)。

------
#### [ GGC v1.9 and later ]

兩個 Greengrass 系統元件會開啟 MQTT 連線 AWS IoT Core。這些元件使用下列模式來產生連線的用戶端 ID。


| 作業 | 用戶端 ID 模式 | 
| --- | --- | 
| 部署 | `core-thing-name` 範例：`MyCoreThing` 此用戶端 ID 可用來連線、中斷連線、訂閱和取消訂閱生命週期事件通知。 | 
| Subscriptions |  `core-thing-name-cn` 範例：`MyCoreThing-c01` `n` 是一個整數，從 00 開始，並隨著每個新連線遞增，最大數量為 250。連線數量取決於與 AWS IoT Core 影子狀態同步的裝置數量 （每個群組最多 2，500 個），以及將 `cloud`作為其來源的訂閱數量 （每個群組最多 10，000 個）。 多工緩衝處理系統元件會與 連線 AWS IoT Core ，以與雲端來源或目標交換訂閱的訊息。多工緩衝處理也會做為 AWS IoT Core 與本機影子服務和裝置憑證管理器之間訊息交換的代理。  | 

若要計算每個群組的 MQTT 連線數，請使用下列公式：

`number of MQTT connections per group = number of connections for Deployment Agent + number of connections for Subscriptions`

其中：
+ 部署代理程式的連線數 = 1。
+ 訂閱的連線數 = `(2 subscriptions for supporting certificate generation + number of MQTT topics in AWS IoT Core + number of device shadows synced) / 50`。
  + 其中， `50` = 每個 AWS IoT Core 連線可支援的訂閱數量上限。

**注意**  
如果您為 訂閱啟用[持久性工作階段](#mqtt-persistent-sessions) AWS IoT Core，核心會開啟至少一個要在持久性工作階段中使用的額外連線。系統組件不支援持久性工作階段，因此它們不能共用該連線。

若要減少 MQTT 連線數量並協助降低成本，您可以使用本機 Lambda 函數彙總邊緣的資料。然後，您將彙總的資料傳送至 AWS 雲端。因此，您在 中使用較少的 MQTT 主題 AWS IoT Core。如需詳細資訊，請參閱[AWS IoT Greengrass 定價](https://aws.amazon.com/greengrass/pricing/)。

------
#### [ GGC v1.8 ]

有數個 Greengrass 系統元件會開啟與 AWS IoT Core的 MQTT 連線。這些元件使用下列模式來產生連線的用戶端 ID。


| 作業 | 用戶端 ID 模式 | 
| --- | --- | 
| 部署 | `core-thing-name` 範例：`MyCoreThing` 此用戶端 ID 可用來連線、中斷連線、訂閱和取消訂閱生命週期事件通知。 | 
| 與 交換 MQTT 訊息 AWS IoT Core | `core-thing-name-spr` 範例：`MyCoreThing-spr` | 
| 影子同步 | `core-thing-name-snn` 範例：`MyCoreThing-s01` `nn` 是從 00 起始的整數，隨著每個新連線遞增，最大到 03。連線數目取決於與影子狀態同步的裝置數目 （每個群組最多 200 個裝置） AWS IoT Core （每個連線最多 50 個訂閱）。 | 
| 裝置憑證管理 | `core-thing-name-dcm` 範例：`MyCoreThing-dcm` | 

------

**注意**  
同時連線中使用重複的用戶端 ID，可能會導致連線-中斷連線的無限迴圈。如果另一個裝置已硬式編碼為在連線中使用核心裝置名稱做為用戶端 ID，就會發生這種情形。如需詳細資訊，請參閱此[故障診斷步驟](gg-troubleshooting.md#config-client-id)。

Greengrass 裝置也與 AWS IoT Device Management的機群索引服務完全整合。這可讓您根據裝置屬性、影子狀態和雲端連線狀態，索引和搜尋裝置。例如，Greengrass 裝置使用實物名稱當做用戶端 ID 建立至少一個連線，因此您可以使用裝置連線索引，探索哪些 Greengrass 裝置目前與 AWS IoT Core連線或中斷連線。如需詳細資訊，請參閱[《 開發人員指南》中的機群索引服務](https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html)。 *AWS IoT *

### 設定本機簡訊的 MQTT 連接埠
<a name="config-local-mqtt-port"></a>

此功能需要 AWS IoT Greengrass Core v1.10 或更新版本。

Greengrass 核心做為本機 Lambda 函數、連接器和[用戶端裝置](what-is-gg.md#greengrass-devices)之間 MQTT 訊息的本機訊息中介裝置。根據預設，核心會使用連接埠 8883 以供區域網路上的 MQTT 流量使用。您可能會想變更連接埠，以避免與在連接埠 8883 上執行的其他軟體發生衝突。

**設定核心用於本機 MQTT 流量的連接埠號碼**

1. 執行下列命令來停止 Greengrass 協助程式：

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `ggMqttPort` 屬性並將值設為您要使用的連接埠號碼。有效值為 1024 到 65535。下列範例會將連接埠號碼設定為 `9000`。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "ggMqttPort" : 9000,
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd start
   ```

1. 如果該核心已啟用[自動 IP 偵測](#ip-auto-detect)，則組態即完成。

   如果自動 IP 偵測未啟用，您必須更新核心的連線資訊。這可讓用戶端裝置在探索操作期間接收正確的連接埠號碼，以取得核心連線資訊。您可以使用 AWS IoT 主控台或 AWS IoT Greengrass API 來更新核心連線資訊。在此程序中，您只會更新連接埠號碼。核心的本機 IP 地址會保持不變。  
**更新核心 (主控台) 的連線資訊**  

   1. 在群組組態頁面上，選擇 Greengrass 核心。

   1. 在核心詳細資訊頁面上，選擇 **MQTT 代理程式端點**索引標籤。

   1. 選擇**管理端點**，然後選擇**新增端點** 

   1. 輸入您目前的本機 IP 地址和新的連接埠號碼。下列範例會設定 IP 地址 `192.168.1.8` 的連接埠號碼 `9000`。

   1. 移除已淘汰的端點，然後選擇 **Update (更新)**  
**更新核心 (API) 的連線資訊**  
   + 使用 [UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html) 動作。下列範例使用 AWS CLI 中的 `update-connectivity-info` 來設定 IP 地址 `192.168.1.8` 的連接埠號碼 `9000`。

     ```
     aws greengrass update-connectivity-info \
         --thing-name "MyGroup_Core" \
         --connectivity-info "[{\"Metadata\":\"\",\"PortNumber\":9000,\"HostAddress\":\"192.168.1.8\",\"Id\":\"localIP_192.168.1.8\"},{\"Metadata\":\"\",\"PortNumber\":8883,\"HostAddress\":\"127.0.0.1\",\"Id\":\"localhost_127.0.0.1_0\"}]"
     ```
**注意**  
您也可以設定核心用於 MQTT 訊息的連接埠 AWS IoT Core。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。

### 使用 發佈、訂閱、取消訂閱 MQTT 連線操作的逾時 AWS 雲端
<a name="mqtt-operation-timeout"></a>

此功能可在 AWS IoT Greengrass v1.10.2 或更新版本中使用。

您可以設定允許 Greengrass 核心在與 AWS IoT Core的 MQTT 連線中完成發佈、訂閱或取消訂閱操作的時間量 (以秒為單位)。如果因為頻寬限制或高延遲而造成操作逾時，您可能會想要調整此設定。若要在 [config.json](#config-json) 檔案中設定此設定，請新增或變更 `coreThing` 物件中的 `mqttOperationTimeout` 屬性。例如：

```
{
  "coreThing": {
    "mqttOperationTimeout": 10,
    "caPath": "root-ca.pem",
    "certPath": "hash.cert.pem",
    "keyPath": "hash.private.key",
    ...
  },
  ...
}
```

預設逾時時間為 5 秒。最小逾時為 5 秒。

## 啟動自動 IP 偵測
<a name="ip-auto-detect"></a>

您可以設定 AWS IoT Greengrass 讓 Greengrass 群組中的用戶端裝置自動探索 Greengrass 核心。啟用時，核心會監控其 IP 地址的變更。如果地址變更，核心會發佈更新的地址清單。這些地址可供與核心位於相同 Greengrass 群組中的用戶端裝置使用。

**注意**  
用戶端裝置 AWS IoT 的政策必須授予`greengrass:Discover`許可，允許裝置擷取核心的連線資訊。如需有關此政策陳述式的詳細資訊，請參閱[探索授權](gg-discover-api.md#gg-discover-auth)。

若要從 AWS IoT Greengrass 主控台啟用此功能，請在第一次部署 Greengrass 群組時選擇**自動偵測**。您也可以選擇 **Lambda 函數**索引標籤並選擇 **IP 偵測器**，在群組組態頁面上啟用或停用此功能。如果選取自動偵測**和覆寫 MQTT 代理程式端點，則會啟用自動 IP 偵測**。

若要使用 AWS IoT Greengrass API 管理自動探索，您必須設定`IPDetector`系統 Lambda 函數。下列程序說明如何使用 [ create-function-definition-version](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令來設定 Greengrass 核心的自動探索。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. 從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID 和函數定義版本：

   ```
   arn:aws:greengrass:region:account-id:/greengrass/groups/function-definition-id/versions/function-definition-version-id
   ```
**注意**  
您可以選擇性地執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html) 命令來建立函數定義，然後從輸出複製 ID。

1.  使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html) 命令來取得目前定義狀態。使用您為函數定義複製的 *function-definition-id*。例如，*4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3*。

   ```
   aws greengrass get-function-definition-version
   --function-definition-id function-definition-id
   --function-definition-version-id function-definition-version-id
   ```

    請記下列出的函數組態。您需要在建立新的函數定義版本中包含這些組態，以防止目前的定義設定遺失。

1.  新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。例如，*4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3*。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **auto-detection-function**。
   + 將您想要在此版本中包含的所有 Lambda 函數新增至`functions`陣列，例如上一個步驟中列出的任何 。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn":"arn:aws:lambda:::function:GGIPDetector:1","Id":"arbitrary-function-id","FunctionConfiguration":{"Pinned":true,"MemorySize":32768,"Timeout":3}}]'\
   --region us-west-2
   ```

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

 如果想要手動輸入 Greengrass 核心的 IP 地址，您可以使用不包含 `IPDetector` 函數的不同函數定義來完成此教學課程。這將防止偵測函數尋找並自動輸入您的 Greengrass 核心 IP 地址。

 Lambda 主控台中看不到此系統 Lambda 函數。將函數新增至最新的群組版本後，它會包含在您從主控台執行的部署中，除非您使用 API 將其取代或移除。

## 設定初始化系統，啟動 Greengrass 協助程式
<a name="start-on-boot"></a>

設定您的初始化系統在開機時啟動 Greengrass 協助程式是很好的實務練習，尤其是在管理大型叢集裝置時。

**注意**  
如果您使用 `apt` 安裝 AWS IoT Greengrass Core 軟體，您可以使用系統化指令碼在開機時啟用啟動。如需詳細資訊，請參閱[使用 systemd 指令碼以管理 Greengrass 協助程式生命週期](install-ggc.md#ggc-package-manager-systemd)。

有不同類型的初始化系統，例如 initd、systemd、SystemV，以及其所使用類似的組態參數。以下範例為 systemd 的服務檔案：此 `Type` 參數設為 `forking` 是因為 greengrassd (用於啟動 Greengrass) 分岔 Greengrass 協助程式程序，而 `Restart` 參數設為 `on-failure`，若 Greengrass 故障時將導引 systemd 重新啟動 Greengrass。

**注意**  
若要查看您的裝置是否使用 systemd，請依照[模組 1 ](module1.md)所述執行`check_ggc_dependencies`指令碼。然後，若要使用 systemd，請確定 中的 `useSystemd` 參數[`config.json`](#config-json)設定為 `yes`。

```
[Unit]
Description=Greengrass Daemon

[Service]
Type=forking
PIDFile=/var/run/greengrassd.pid
Restart=on-failure
ExecStart=/greengrass/ggc/core/greengrassd start
ExecReload=/greengrass/ggc/core/greengrassd restart
ExecStop=/greengrass/ggc/core/greengrassd stop

[Install]
WantedBy=multi-user.target
```

## 另請參閱
<a name="cores-see-also"></a>
+ [什麼是 AWS IoT Greengrass？](what-is-gg.md)
+ [支援平台和需求](what-is-gg.md#gg-platforms)
+ [入門 AWS IoT Greengrass](gg-gs.md)
+ [AWS IoT Greengrass 群組物件模型概觀](deployments.md#api-overview)
+ [硬體安全整合](hardware-security.md)