

终止支持通知：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 并将物联网数据导出到 AWS 云。 AWS IoT Greengrass 开发人员可以使用 AWS Lambda 函数和预先构建的[连接器](connectors.md)来创建部署到设备上进行本地执行的无服务器应用程序。

下图显示了的基本架构 AWS IoT Greengrass。

![\[Greengrass 核心支持本地执行 Lambda、消息收发、设备影子和安全。Greengrass 内核与交互并在本地工作，连接断续续 AWS 云 。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/greengrass.png)


AWS IoT Greengrass 使客户可以构建物联网设备和应用逻辑。具体而言， 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 核心软件开发工具包
+ 云服务
  + AWS IoT Greengrass API
+ 功能
  + Lambda 运行时
  + 影子实施
  + 消息管理器
  + 组管理
  + 发现服务
  + Over-the-air 更新代理
  + 流管理器
  + 本地资源访问
  + 本地机器学习推理
  + 本地 Secrets Manager
  + 内置集成了服务、协议和软件的连接器

**Topics**
+ [AWS IoT Greengrass 核心软件](#gg-core-software)
+ [AWS IoT Greengrass 群组](#gg-group)
+ [中的设备 AWS IoT Greengrass](#devices)
+ [SDKs](#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>

 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 核心软件的选项，包括 tar.gz 下载文件、快速入门脚本以及在支持的 Debian 平台上`apt`安装。有关更多信息，请参阅 [安装 AWS IoT Greengrass 核心软件](install-ggc.md)。

以下选项卡描述了 C AWS IoT Greengrass ore 软件版本中的新增内容和变更内容。

------
#### [ 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 核心软件 v1.11.3 的问题。如果您使用流管理器将数据导出到云端，则现在可以使用 OTA 更新将早期 v1.x 版本的 C AWS IoT Greengrass ore 软件升级到 v1.11.4。
+ 常规性能改进和错误修复。

1.11.3  
错误修复和改进：  
+ 修复了导致在 Ubuntu 设备上快速运行的 C AWS IoT Greengrass ore 软件在设备突然断电后停止响应的问题。
+ 修复了一个问题，该问题导致向长时间生存的 Lambda 函数传送 MQTT 消息时出现延迟。
+ 修复了一个问题，该问题导致 `maxWorkItemCount` 值设置为大于 `1024` 时无法正确发送 MQTT 消息。
+ 修复了一个问题，该问题导致 OTA 更新代理忽略 [`config.json`](gg-core.md#config-json) 的 `keepAlive` 属性中指定的 MQTT `KeepAlive` 周期。
+ 常规性能改进和错误修复。
如果您使用流管理器将数据导出到云端，请*不要*从较早的 v1.x 版本升级到 C AWS IoT Greengrass ore 软件 v1.11.3。如果您是首次启用直播管理器，我们强烈建议您先安装最新版本的 AWS IoT Greengrass Core 软件。

1.11.1  
 错误修复和改进：  
+ 修复了导致流管理器内存使用量增大的问题。
+ 修复了在 Greengrass 核心设备关闭时间超过 time-to-live指定的 (TTL) 流数据`0`时段时，直播管理器会将直播的序列号重置为的问题。
+ 修复了一个问题，该问题导致流管理器无法正确停止重新尝试将数据导出到 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 函数。
+ [`config.json`](gg-core.md#config-json) 中包含一个新的 `ggDaemonPort` 属性，可用于配置 Greengrass 核心 IPC 端口号。默认端口号为 8000。

  [`config.json`](gg-core.md#config-json) 中包含一个新的 `systemComponentAuthTimeout` 属性，它可用于配置 Greengrass 核心 IPC 身份验证的超时时间。默认超时为 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 设备上快速运行的 C AWS IoT Greengrass ore 软件在设备突然断电后停止响应的问题。
+ <a name="bug-fix-v1104-mqtt-long-lived-delay"></a>修复了一个问题，该问题导致向长时间生存的 Lambda 函数传送 MQTT 消息时出现延迟。
+ <a name="bug-fix-v1104-mqtt-max-work-item-count"></a>修复了一个问题，该问题导致 `maxWorkItemCount` 值设置为大于 `1024` 时无法正确发送 MQTT 消息。
+ <a name="bug-fix-v1104-ota-mqtt-keep-alive"></a>修复了一个问题，该问题导致 OTA 更新代理忽略 [`config.json`](gg-core.md#config-json) 的 `keepAlive` 属性中指定的 MQTT `KeepAlive` 周期。
+ 常规性能改进和错误修复。

1.10.3  
错误修复和改进：  
+ <a name="bug-fix-v1103-system-component-auth-timeout"></a>[`config.json`](gg-core.md#config-json) 中包含一个新的 `systemComponentAuthTimeout` 属性，它可用于配置 Greengrass 核心 IPC 身份验证的超时时间。默认超时为 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 及更高版本的设备上系统安装失败的问题。
+ 常规性能改进和错误修复。

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)。
+ 一种新的物联网 SiteWise 连接器，可将工业设备数据从OPC-UA服务器发送到中的资产属性。 AWS IoT SiteWise有关更多信息，请参阅 [物联网 SiteWise 连接器](iot-sitewise-connector.md)。
+ 在未进行容器化的情况下运行的 Lambda 函数可以访问 Greengrass 组中的机器学习资源。有关更多信息，请参阅 [从 Lambda 函数访问机器学习资源](access-ml-resources.md)。
+ Support 支持 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 Core 软件开发工具包](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>Over-the-air 可以使用 OpenSSL 1.1 配置具有硬件安全集成功能的 (OTA) 更新。
+ 常规性能改进和错误修复。

1.9.4  
错误修复和改进：  
+ 常规性能改进和错误修复。

1.9.3  
新功能：  
+ <a name="what-new-v193-armv6l"></a>支持 armv6L。 AWS IoT Greengrass 核心软件 v1.9.3 或更高版本可以安装在 armv6L 架构上的 Raspbian 发行版上（例如，在 Raspberry Pi Zero 设备上）。
+ <a name="what-new-v193-ota-alpn"></a>OTA 在端口 443 上使用 ALPN 进行更新。使用端口 443 进行 MQTT 流量的 Greengrass 内核现在支持 (OTA) 软件更新。 over-the-air AWS IoT Greengrass 使用应用层协议网络 (ALPN) TLS 扩展来启用这些连接。有关更多信息，请参阅[AWS IoT Greengrass 核心软件的 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>Support fo [OpenWrt](https://openwrt.org/)r. AWS IoT Greengrass 核心软件 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 服务器的椭圆曲线 (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 支持，并允许所有 Greengrass 消息流量（包括 MQTT 和 HTTPS）使用端口 443。有关更多信息，请参阅 [通过端口 443 或网络代理进行连接](gg-core.md#alpn-network-proxy)。
+ 可以预见地命名为 IDs 用于 AWS IoT 连接的客户端。此更改将启用对于 AWS IoT Device Defender 和 [AWS IoT 生命周期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)的支持，因此，您可以针对连接、断开连接、订阅以及取消订阅事件接收通知。可预测的命名还可以更轻松地围绕连接创建逻辑 IDs （例如，根据证书属性创建[订阅策略](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)模板）。有关更多信息，请参阅 [IDs 用于 MQTT 连接的客户端 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)。
+ 你可以在 Docker 容器（ AWS IoT Greengrass 在 Windows、macOS 或 Linux 上）中运行，方法是将 Greengrass 组配置为在不进行容器化的情况下运行。有关更多信息，请参阅 [AWS IoT Greengrass 在 Docker 容器中运行](run-gg-in-docker-container.md)。
+ 端口 443 上使用应用程序层协议协商 (ALPN) 或网络代理连接的 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 设备测试器 AWS IoT Greengrass，你可以用它来验证你的 CPU 架构、内核配置和驱动程序是否能正常工作 AWS IoT Greengrass。有关更多信息，请参阅 [使用适用于 AWS IoT Greengrass V1 的 AWS IoT 设备测试器](device-tester-for-greengrass-ug.md)。
+  AWS IoT Greengrass 核心软件、Cor AWS IoT Greengrass e SDK 和 Mach AWS IoT Greengrass ine Learning SDK 包可通过亚马逊下载 CloudFront。有关更多信息，请参阅 [AWS IoT Greengrass 下载](#gg-downloads)。

1.6.1  
新功能：  
+ 在 Greengrass 核心上运行二进制代码的 Lambda 可执行文件。使用适用于 C 的全新 C AWS IoT Greengrass ore 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` 属性。
+ 主机上 /proc 目录的本地资源访问权限。有关更多信息，请参阅 [使用 Lambda 函数和连接器访问本地资源](access-local-resources.md)。
+ 可配置的写入目录。C AWS IoT Greengrass ore 软件可以部署到只读和读写位置。有关更多信息，请参阅 [为配置写入目录 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 酷睿 SDK 版本 1.1.0，您可以从[AWS IoT Greengrass 酷睿 SDK](#gg-core-sdk-download) 下载页面下载该版本。
错误修复和改进：  
+ 降低了整体内存占用空间。
+ 将消息发送到云的性能改进。
+ 对下载代理、Device Certificate Manager 和 OTA 更新代理的性能和稳定性改进。
+ 次要错误修复。

1.3.0  
新功能：  
+ Over-the-air (OTA) 更新代理能够处理云端部署的 Greengrass 更新任务。该代理是在新 `/greengrass/ota` 目录下找到的。有关更多信息，请参阅 [AWS IoT Greengrass 核心软件的 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_cn/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 函数的列表，包含关联的配置数据。有关更多信息，请参阅 [在核心上运行 Lambda 函数 AWS IoT Greengrass](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 的设备，它允许它与服务直接通信。 AWS IoT Core AWS IoT Greengrass 内核有自己的设备证书，用于进行 AWS IoT Core身份验证。它有一个设备影子和 AWS IoT Core 注册表中的一个条目。Greengrass 内核运行本地 Lambda 运行时、部署代理和 IP 地址跟踪器，用于 AWS IoT Greengrass 向服务发送 IP 地址信息，从而允许客户端设备自动发现其组和核心连接信息。有关更多信息，请参阅 [配置内 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 设备开发工具包](#iot-device-sdk)或 [AWS IoT Greengrass 发现 API](gg-discover-api.md)，以获取用于连接和验证同一 Greengrass 组中核心的发现信息。要了解如何使用 AWS IoT 控制台为其创建和配置客户端设备 AWS IoT Greengrass，请参阅[模块 4：与 AWS IoT Greengrass 群组中的客户端设备交互](module4.md)。或者，有关说明如何使用为其创建和配置客户端设备的示例 AWS IoT Greengrass，请参阅《*AWS CLI 命令参考*》[create-device-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-device-definition.html)中的。 AWS CLI   
在 Greengrass 群组中，您可以创建订阅，允许客户端设备通过 MQTT 与群组中的 Lambda 函数、连接器和其他客户端设备以及或本地影子服务进行通信。 AWS IoT Core MQTT 消息传递到核心。如果核心设备丢失与云的连接，客户端设备可通过本地网络继续进行通信。客户端设备大小不一，既有基于微控制器的小型设备，也有大型设备。目前，一个 Greengrass 组最多可包含 2,500 个客户端设备。一个客户端设备最多可以是 10 个组的成员。  
<a name="sitewise-connector-opcua-support"></a>OPC-UA 是一种用于工业通信的信息交换标准。[要在 Greengrass 内核上实现对 OPC-UA 的支持，你可以使用物联网连接器。 SiteWise ](iot-sitewise-connector.md)该连接器将工业设备数据从 OPC-UA 服务器发送到中的资产属性。 AWS IoT SiteWise

下表显示了这些设备类型的相关性。

![\[AWS IoT Core 和设备功能矩阵显示了证书、物联网策略、核心和设备端支持的物联网事物等配置，并标记了 Greengrass Group 权限之外的设备网关、 Sensor/Actuator 软件和功能。\]](http://docs.aws.amazon.com/zh_cn/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*表示 C AWS IoT Greengrass ore 软件在您的设备上的安装路径。通常，这是 `/greengrass` 目录。

## SDKs
<a name="gg-sdks"></a>

以下 AWS提供的内容 SDKs 用于使用 AWS IoT Greengrass：

AWS SDK  
使用 AWS 软件开发工具包构建可与任何 AWS 服务交互的应用程序，包括 Amazon S3、Amazon DynamoDB AWS IoT、 AWS IoT Greengrass、等。在的背景下 AWS IoT Greengrass，您可以在部署的 Lambda 函数中使用 AWS 软件开发工具包直接调用任何 AWS 服务。有关更多信息，请参阅 [AWS SDKs](lambda-functions.md#lambda-sdks-aws)。  
[中提供的特定于 Greengrass 的操作也可在 API AWS SDKs 和中找到。AWS IoT Greengrass[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/greengrass)](https://docs.aws.amazon.com/greengrass/v1/apireference/)

AWS IoT 设备软件开发工具包  <a name="iot-device-sdk"></a>
 AWS IoT 设备 SDK 可帮助设备连接到 AWS IoT Core 和 AWS IoT Greengrass。有关更多信息，请参阅《*AWS IoT 开发者指南*》 SDKs中的[AWS IoT 设备](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)。  
<a name="iot-device-sdk-discovery"></a>客户端设备可以使用任何 AWS IoT 设备 SDK v2 平台来发现 Greengrass 内核的连接信息。连接信息包括：  <a name="iot-device-sdk-discovery-list"></a>
+ 客户端设备 IDs 所属的 Greengrass 群组中的一个。
+ 每个组中 Greengrass 核心的 IP 地址。这些也称为*核心端点*。
+ 组 CA 证书，设备使用该证书与核心进行双向身份验证。有关更多信息，请参阅 [设备连接工作流程](gg-sec.md#gg-sec-connection)。
在 AWS IoT 设备的 v1 中 SDKs，只有 C\$1\$1 和 Python 平台提供内置的发现支持。

AWS IoT Greengrass 核心软件开发工具包  
 AWS IoT Greengrass 核心软件开发工具包使 Lambda 函数能够与 Greengrass 核心交互、向本地影子服务发布消息、与本地影子服务交互 AWS IoT、调用其他已部署的 Lambda 函数以及访问机密资源。此软件开发工具包由 AWS IoT Greengrass 核心上运行的 Lambda 函数使用。有关更多信息，请参阅 [AWS IoT Greengrass 核心软件开发工具包](lambda-functions.md#lambda-sdks-core)。

AWS IoT Greengrass Machine Learning  
Mach AWS IoT Greengrass ine Learning SDK 使 Lambda 函数能够使用作为机器学习资源部署到 Greengrass 核心的机器学习模型。在 AWS IoT Greengrass 核心上运行并与本地推理服务交互的 Lambda 函数使用此软件开发工具包。有关更多信息，请参阅 [AWS IoT Greengrass Machine Learning](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>至少 128 MB 磁盘空间可供 AWS IoT Greengrass 酷睿软件使用。如果您要使用 [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 核心软件的最低 128 MB 内存。启用[流管理器](stream-manager.md)后，最小 RAM 为 198 MB。
**注意**  
如果您使用 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)。使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)运行 AWS IoT Greengrass 时，需要满足以下要求：
    + 必须已启用并挂载 *memory* 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 3.8 运行时的函数的 [Python](https://www.python.org/) 版本 3.8。
  + <a name="runtime_python_3.7"></a>适用于使用 Python 3.7 运行时的函数的 [Python](https://www.python.org/) 版本 3.7。
  + <a name="runtime_python_2.7"></a>适用于使用 Python 2.7 运行时的函数的 [Python](https://www.python.org/) 版本 2.7。
  + <a name="runtime_nodejs_12.x"></a>适用于使用 Node.js 12.x 运行时的函数的 [Node.js](https://www.nodejs.org/) 版本 12.x。
  + <a name="runtime_java_8_190"></a>适用于使用 Java 8 运行时的函数的 [Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 版本 8 或更高版本。
**注意**  
官方不支持在 OpenWrt 发行版上运行 Java。但是，如果您的 OpenWrt 版本支持 Java，则可以在您的设备上运行用 Java 编写的 Lambda 函数。 OpenWrt 

    有关 AWS IoT Greengrass 支持 Lambda 运行时的更多信息，请参阅。[在核心上运行 Lambda 函数 AWS IoT Greengrass](lambda-functions.md)
+ <a name="ota_agent_1110"></a>([OTA) 更新代理需要以下 shell 命令over-the-air （不是 BusyBox 变体）](core-ota-update.md#ota-agent)：
  + `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>至少 128 MB 磁盘空间可供 AWS IoT Greengrass 酷睿软件使用。如果您要使用 [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 核心软件的最低 128 MB 内存。启用[流管理器](stream-manager.md)后，最小 RAM 为 198 MB。
**注意**  
如果您使用 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)。使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)运行 AWS IoT Greengrass 时，需要满足以下要求：
    + 必须已启用并挂载 *memory* 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 3.7 运行时的函数的 [Python](https://www.python.org/) 版本 3.7。
  + <a name="runtime_python_2.7"></a>适用于使用 Python 2.7 运行时的函数的 [Python](https://www.python.org/) 版本 2.7。
  + <a name="runtime_nodejs_12.x"></a>适用于使用 Node.js 12.x 运行时的函数的 [Node.js](https://www.nodejs.org/) 版本 12.x。
  + <a name="runtime_java_8_190"></a>适用于使用 Java 8 运行时的函数的 [Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 版本 8 或更高版本。
**注意**  
官方不支持在 OpenWrt 发行版上运行 Java。但是，如果您的 OpenWrt 版本支持 Java，则可以在您的设备上运行用 Java 编写的 Lambda 函数。 OpenWrt 

    有关 AWS IoT Greengrass 支持 Lambda 运行时的更多信息，请参阅。[在核心上运行 Lambda 函数 AWS IoT Greengrass](lambda-functions.md)
+ <a name="ota_agent_1100"></a>([OTA) 更新代理需要以下 shell 命令over-the-air （不是 BusyBox 变体）](core-ota-update.md#ota-agent)：
  + `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>至少 128 MB 磁盘空间可供 AWS IoT Greengrass 酷睿软件使用。如果您要使用 [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 核心软件的最低 128 MB 内存。
+ 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)。使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)运行 AWS IoT Greengrass 时，需要满足以下要求：
    + 必须已启用并挂载 *memory* 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 2.7 运行时的函数的 [Python](https://www.python.org/) 版本 2.7。
  + <a name="runtime_python_3.7"></a>适用于使用 Python 3.7 运行时的函数的 [Python](https://www.python.org/) 版本 3.7。
  + <a name="runtime_nodejs_6.10"></a>适用于使用 Node.js 6.10 运行时的函数的 [Node.js](https://www.nodejs.org/) 版本 6.10 或更高版本。
  + <a name="runtime_nodejs_8.10"></a>适用于使用 Node.js 8.10 运行时的函数的 [Node.js](https://www.nodejs.org/) 版本 8.10 或更高版本。
  + <a name="runtime_java_8_190"></a>适用于使用 Java 8 运行时的函数的 [Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 版本 8 或更高版本。
**注意**  
官方不支持在 OpenWrt 发行版上运行 Java。但是，如果您的 OpenWrt 版本支持 Java，则可以在您的设备上运行用 Java 编写的 Lambda 函数。 OpenWrt 

    有关 AWS IoT Greengrass 支持 Lambda 运行时的更多信息，请参阅。[在核心上运行 Lambda 函数 AWS IoT Greengrass](lambda-functions.md)
+ <a name="ota_agent_180"></a>([OTA) 更新代理需要以下 shell 命令over-the-air （不是 BusyBox 变体）](core-ota-update.md#ota-agent)：
  + `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 快照软件](#gg-snapstore-download)。
+ 需要以下项目：
  + <a name="mem_128_disk_space_180"></a>至少 128 MB 磁盘空间可供 AWS IoT Greengrass 酷睿软件使用。如果您要使用 [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 核心软件的最低 128 MB 内存。
  + 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)。使用[容器](lambda-group-config.md#lambda-containerization-groupsettings)运行 AWS IoT Greengrass 时，需要满足以下要求：
      + 必须已启用并挂载 *memory* 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 2.7 运行时的函数的 [Python](https://www.python.org/) 版本 2.7。
    + <a name="runtime_nodejs_6.10"></a>适用于使用 Node.js 6.10 运行时的函数的 [Node.js](https://www.nodejs.org/) 版本 6.10 或更高版本。
    + <a name="runtime_java_8"></a>适用于使用 Java 8 运行时的函数的 [Java](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) 版本 8 或更高版本。
  + <a name="ota_agent_180"></a>([OTA) 更新代理需要以下 shell 命令over-the-air （不是 BusyBox 变体）](core-ota-update.md#ota-agent)：
    + `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 配额（限制）的信息，请参阅中的 S [ervice Q](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) uotas *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 快照软件](#gg-snapstore-download)
+ [AWS IoT Greengrass Docker 软件](#gg-docker-download)
+ [AWS IoT Greengrass 核心软件开发工具包](#gg-core-sdk-download)
+ [支持的机器学习运行时和库](#ml-runtimes-libs)
+ [AWS IoT Greengrass 机器学习 SDK 软件](#gg-ml-sdk-download)

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

<a name="ggc-software-descripton"></a> AWS IoT Greengrass Core 软件将 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 核心软件 v1.11.3 的问题。如果您使用流管理器将数据导出到云端，则现在可以使用 OTA 更新将早期 v1.x 版本的 C AWS IoT Greengrass ore 软件升级到 v1.11.4。
+ 常规性能改进和错误修复。

1.11.3  
错误修复和改进：  
+ 修复了导致在 Ubuntu 设备上快速运行的 C AWS IoT Greengrass ore 软件在设备突然断电后停止响应的问题。
+ 修复了一个问题，该问题导致向长时间生存的 Lambda 函数传送 MQTT 消息时出现延迟。
+ 修复了一个问题，该问题导致 `maxWorkItemCount` 值设置为大于 `1024` 时无法正确发送 MQTT 消息。
+ 修复了一个问题，该问题导致 OTA 更新代理忽略 [`config.json`](gg-core.md#config-json) 的 `keepAlive` 属性中指定的 MQTT `KeepAlive` 周期。
+ 常规性能改进和错误修复。
如果您使用流管理器将数据导出到云端，请*不要*从较早的 v1.x 版本升级到 C AWS IoT Greengrass ore 软件 v1.11.3。如果您是首次启用直播管理器，我们强烈建议您先安装最新版本的 AWS IoT Greengrass Core 软件。

1.11.1  
 错误修复和改进：  
+ 修复了导致流管理器内存使用量增大的问题。
+ 修复了在 Greengrass 核心设备关闭时间超过 time-to-live指定的 (TTL) 流数据`0`时段时，直播管理器会将直播的序列号重置为的问题。
+ 修复了一个问题，该问题导致流管理器无法正确停止重新尝试将数据导出到 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 函数。
+ [`config.json`](gg-core.md#config-json) 中包含一个新的 `ggDaemonPort` 属性，可用于配置 Greengrass 核心 IPC 端口号。默认端口号为 8000。

  [`config.json`](gg-core.md#config-json) 中包含一个新的 `systemComponentAuthTimeout` 属性，它可用于配置 Greengrass 核心 IPC 身份验证的超时时间。默认超时为 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 核心设备上安装 Core 软件，请下载适用于您的架构和操作系统 (OS) 的软件包，然后按照《[入门指南](gg-gs.md)》中的步骤进行操作。

**提示**  
<a name="ggc-install-options"></a>AWS IoT Greengrass 还提供了用于安装 C AWS IoT Greengrass ore 软件的其他选项。例如，您可以使用 [Greengrass 设备](quick-start.md)设置来配置您的环境并安装最新版本的 Core 软件。 AWS IoT Greengrass 或者，在支持的 Debian 平台上，你可以使用 [APT 软件包管理器](install-ggc.md#ggc-package-manager)来安装或升级 AWS IoT Greengrass Core 软件。有关更多信息，请参阅 [安装 AWS IoT Greengrass 核心软件](install-ggc.md)。


| 架构 | 操作系统 | Link | 
| --- | --- | --- | 
| 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)。
+ 一种新的物联网 SiteWise 连接器，可将工业设备数据从OPC-UA服务器发送到中的资产属性。 AWS IoT SiteWise有关更多信息，请参阅 [物联网 SiteWise 连接器](iot-sitewise-connector.md)。
+ 在未进行容器化的情况下运行的 Lambda 函数可以访问 Greengrass 组中的机器学习资源。有关更多信息，请参阅 [从 Lambda 函数访问机器学习资源](access-ml-resources.md)。
+ Support 支持 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 Core 软件开发工具包](lambda-functions.md#lambda-sdks-core)中包含新的 `queueFullPolicy` 选项，可用于通过 Lambda 函数可靠地发布消息。
+ 支持在核心上运行 Node.js 12.x Lambda 函数。
错误修复和改进：  
+ <a name="bug-fix-v1100-ota"></a>Over-the-air 可以使用 OpenSSL 1.1 配置具有硬件安全集成功能的 (OTA) 更新。
+ <a name="bug-fix-v1101-stream-mgr"></a>[流管理器](stream-manager.md)能够更灵活地应对文件数据损坏。
+ <a name="bug-fix-v1101-sysfs"></a>修复了导致使用 Linux 内核 5.1 及更高版本的设备上系统安装失败的问题。
+ <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) 中包含一个新的 `systemComponentAuthTimeout` 属性，它可用于配置 Greengrass 核心 IPC 身份验证的超时时间。默认超时为 5000 毫秒。
+ <a name="bug-fix-v1104-ota-mqtt-keep-alive"></a>修复了一个问题，该问题导致 OTA 更新代理忽略 [`config.json`](gg-core.md#config-json) 的 `keepAlive` 属性中指定的 MQTT `KeepAlive` 周期。
+ <a name="bug-fix-v1104-mqtt-max-work-item-count"></a>修复了一个问题，该问题导致 `maxWorkItemCount` 值设置为大于 `1024` 时无法正确发送 MQTT 消息。
+ <a name="bug-fix-v1104-mqtt-long-lived-delay"></a>修复了一个问题，该问题导致向长时间生存的 Lambda 函数传送 MQTT 消息时出现延迟。
+ <a name="bug-fix-v1104-snap-power-loss"></a>修复了导致在 Ubuntu 设备上快速运行的 C AWS IoT Greengrass ore 软件在设备突然断电后停止响应的问题。
+ 常规性能改进和错误修复。
要在 AWS IoT Greengrass 核心设备上安装 Core 软件，请下载适用于您的架构和操作系统 (OS) 的软件包，然后按照《[入门指南](gg-gs.md)》中的步骤进行操作。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/what-is-gg.html)

1.9.4  
版本 1.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 服务器的椭圆曲线 (EC) 密钥。除了 RSA 密钥之外，本地 MQTT 服务器还支持 EC 密钥。（无论密钥类型如何，MQTT 服务器证书都具有 SHA-256 RSA 签名。） 有关更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)。
+ <a name="what-new-v192-openwrt"></a>Support fo [OpenWrt](https://openwrt.org/)r. AWS IoT Greengrass 核心软件 v1.9.2 或更高版本可以安装在采用 Armv8 () AArch64 和 armv7L 架构的 OpenWrt 发行版上。目前， OpenWrt 不支持 ML 推理。
+ <a name="what-new-v193-armv6l"></a>支持 armv6L。 AWS IoT Greengrass 核心软件 v1.9.3 或更高版本可以安装在 armv6L 架构上的 Raspbian 发行版上（例如，在 Raspberry Pi Zero 设备上）。
+ <a name="what-new-v193-ota-alpn"></a>OTA 在端口 443 上使用 ALPN 进行更新。使用端口 443 进行 MQTT 流量的 Greengrass 内核现在支持 (OTA) 软件更新。 over-the-air AWS IoT Greengrass 使用应用层协议网络 (ALPN) TLS 扩展来启用这些连接。有关更多信息，请参阅[AWS IoT Greengrass 核心软件的 OTA 更新](core-ota-update.md)和[通过端口 443 或网络代理进行连接](gg-core.md#alpn-network-proxy)。
要在 AWS IoT Greengrass 核心设备上安装 Core 软件，请下载适用于您的架构和操作系统 (OS) 的软件包，然后按照《[入门指南](gg-gs.md)》中的步骤进行操作。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 支持，并允许所有 Greengrass 消息流量（包括 MQTT 和 HTTPS）使用端口 443。有关更多信息，请参阅 [通过端口 443 或网络代理进行连接](gg-core.md#alpn-network-proxy)。
  + 可以预见地命名为 IDs 用于 AWS IoT 连接的客户端。此更改将启用对于 AWS IoT Device Defender 和 [AWS IoT 生命周期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)的支持，因此，您可以针对连接、断开连接、订阅以及取消订阅事件接收通知。可预测的命名还可以更轻松地围绕连接创建逻辑 IDs （例如，根据证书属性创建[订阅策略](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)模板）。有关更多信息，请参阅 [IDs 用于 MQTT 连接的客户端 AWS IoT](gg-core.md#connection-client-id)。

  错误修复和改进：
  + 修复了影子同步和设备证书管理器重新连接的问题。
  + 常规性能改进和错误修复。
要在 AWS IoT Greengrass 核心设备上安装 Core 软件，请下载适用于您的架构和操作系统 (OS) 的软件包，然后按照《[入门指南](gg-gs.md)》中的步骤进行操作。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/what-is-gg.html)

------

 下载此软件即表示您同意[Greengrass Core 软件许可协议](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 快照软件
<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 快照适用于 AWS IoT Greengrass 酷睿软件 v1.11.x。 AWS IoT Greengrass 不为 v1.10.x 提供快照。不受支持的版本不会收到错误修复或更新。  
 AWS IoT Greengrass 快照不支持连接器和机器学习 (ML) 推理。

有关更多信息，请参阅 [快速运行 AWS IoT Greengrass](install-ggc.md#gg-snap-support)。

 

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

AWS 提供了 Dockerfile 和 Docker 镜像，让你可以更轻松地在 Docker 容器 AWS IoT Greengrass 中运行。

Dockerfile  
Dockerfiles 包含用于构建自定义 AWS IoT Greengrass 容器镜像的源代码。可对映像进行修改，以在不同的平台架构上运行或减少映像的大小。有关说明，请参阅自述文件。  
下载您的目标 AWS IoT Greengrass Core 软件版本。  
+  适用于 v1.11.6 的 [Dockerfile。 AWS IoT Greengrass](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.11.6/aws-greengrass-docker-1.11.6.tar.gz)  
v1.10  
 适用于 v1.10.5 的 [Dockerfile。 AWS IoT Greengrass](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.10.5/aws-greengrass-docker-1.10.5.tar.gz)  
v1.9  
 适用于 v1.9.4 的 [Dockerfile。 AWS IoT Greengrass](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.9.4/aws-greengrass-docker-1.9.4.tar.gz)  
v1.8  
 适用于 v1.8.1 的 [Dockerfile。 AWS IoT Greengrass](https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.8.1/aws-greengrass-docker-1.8.1.tar.gz)
 

Docker 映像  
Docker 镜像在亚马逊 Linux 2 (x86\$164) 和 Alpine Linux（x86\$164、armv7L 或）基础映像上安装了 AWS IoT Greengrass 核心软件和依赖项。 AArch64您可以使用预构建的映像开始尝试 AWS IoT Greengrass。  
<a name="docker-images-end-of-maintenance"></a>2022 年 6 月 30 日，我 AWS IoT Greengrass 结束了对发布到亚马逊弹性容器注册表 (Amazon ECR) 和 Docker Hub 的 AWS IoT Greengrass 核心软件 v1.x Docker 镜像的维护。您可以继续从 Amazon ECR 和 Docker Hub 下载这些 Docker 映像，直至 2023 年 6 月 30（即维护结束 1 年后）为止。但是，在 2022 年 6 月 30 日维护结束后， AWS IoT Greengrass 核心软件 v1.x Docker 镜像不再收到安全补丁或错误修复。如果您运行的生产工作负载依赖于这些 Docker 镜像，我们建议您使用提供的 Dockerfiles 构建自己的 Docker 镜像。 AWS IoT Greengrass 有关更多信息，请参阅 [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，使用*version*标签下载特定版本的 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 核心软件的 v1.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 核心软件 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 核心软件开发工具包
<a name="gg-core-sdk-download"></a>

Lambda 函数使用 AWS IoT Greengrass 核心软件开发工具包在本地与 AWS IoT Greengrass 核心进行交互。这允许已部署的 Lambda 函数执行：<a name="gg-core-sdk-functionality"></a>
+ 与交换 MQTT 消息。 AWS IoT Core
+ 与 Greengrass 组中的连接器、客户端设备及其他 Lambda 函数交换 MQTT 消息。
+ 与本地影子服务交互。
+ 调用其他的本地 Lambda 函数。
+ 访问[密钥资源](secrets.md)。
+ 与[流管理器](stream-manager.md)交互。

从中下载适用于您的语言或平台的 AWS IoT Greengrass Core SDK GitHub。<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 核心软件开发工具包](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 核心软件开发工具包](lambda-functions.md#lambda-sdks-core)。

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

### 支持的机器学习运行时和库
<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 Core 软件许可协议](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](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/dlr/dlr-py3-aarch64.tar.gz) Jetson 的 DLR 示例 TX2
+ 适用于 [Intel Atom](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/dlr/dlr-py3-x86_64.tar.gz) 的 DLR 示例

有关使用 DLR 示例的教程，请参阅[如何使用配置优化的机器学习推理 AWS 管理控制台](ml-dlc-console.md)。

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

下载适用于设备平台的示例：
+ MXNet [树莓派](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-armv7l.tar.gz)的样本
+ MXNet [英伟达 Jetson](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-aarch64.tar.gz) 的样本 TX2
+ MXNet [英特尔凌动](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/mxnet/mxnet-py3-x86_64.tar.gz)示例

有关使用该 MXNet 示例的教程，请参阅[如何使用配置机器学习推理 AWS 管理控制台](ml-console.md)。

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

下载适用于您设备平台的 [Tensorflow 示例](https://d1onfpft10uf5o.cloudfront.net/greengrass-ml-samples/tf/tf-py3.tar.gz)。此示例适用于 Raspberry Pi、NVIDIA Jetson TX2 和英特尔凌动。

------

 

### AWS IoT Greengrass 机器学习 SDK 软件
<a name="gg-ml-sdk-download"></a>

[AWS IoT Greengrass Machine Learning](lambda-functions.md#lambda-sdks-ml) 使您编写的 Lambda 函数能够使用本地机器学习模型，并将数据发送到 [ML 反馈](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> AWS IoT Greengrass Core 软件将 AWS 功能扩展到 AWS IoT Greengrass 核心设备，使本地设备能够根据其生成的数据进行本地操作。

AWS IoT Greengrass 提供了几个安装 AWS IoT Greengrass 核心软件的选项：
+ [下载并解压缩 tar.gz 文件](#download-and-extract-tarball)。
+ [运行 Greengrass 设备设置脚本](#run-device-setup-script)。
+ [从 APT 存储库安装](#ggc-package-manager)。

AWS IoT Greengrass 还提供了运行 C AWS IoT Greengrass ore 软件的容器化环境。
+ [AWS IoT Greengrass 在 Docker 容器中运行](#gg-docker-support)。
+ [快速运行 AWS IoT Greengrass](#gg-snap-support)。

 

## 下载并解压 AWS IoT Greengrass 核心软件包
<a name="download-and-extract-tarball"></a>

为您的平台选择 AWS IoT Greengrass 核心软件，将其作为 tar.gz 文件下载并提取到您的设备上。您可以下载软件的最新版本。有关更多信息，请参阅 [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 核心软件。在添加 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`。 安装用于对软件包存储库进行签名的 GnuPG (GPG) 密钥。 AWS IoT Greengrass 

  下载此软件即表示您同意[Greengrass Core 软件许可协议](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 核心软件（守护程序）生命周期的`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 核心软件。有关更多信息，请参阅 [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 将结束在snapcraft.io上发布的 AWS IoT Greengrass 核心软件版本1.11.x Snap的维护。](https://snapcraft.io/aws-iot-greengrass)当前运行 Snap 的设备将能够继续正常运转，直至另行通知。但是，维护结束后， AWS IoT Greengrass 核心 Snap 将不再收到安全补丁或错误修复。

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

下方提供了一些基本的 Snap 概念，可帮助您了解如何使用 AWS IoT Greengrass Snap：

**[Channel](https://snapcraft.io/docs/channels)**  
一个 Snap 组件，用于定义安装哪个版本的 snap 并跟踪其更新。Snap 会自动更新至当前频道的最新版本。

**[接口](https://snapcraft.io/docs/interface-management)**  
一个 Snap 组件，用于授予对网络和用户文件等资源的访问权限。  
要运行 AWS IoT Greengrass 快照，必须连接以下接口。请注意，必须首先连接 `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)**  
Snap 会自动更新。`snapd` 进程守护程序是 Snap 包管理器，默认为每天检查更新四次。每次更新检查称为一次刷新。当刷新发生时，进程守护程序会停止，接着 Snap 会更新，然后进程守护程序再重新启动。

有关更多信息，请参阅 [Snapcraft](https://snapcraft.io/) 网站。

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

以下内容介绍了 AWS IoT Greengrass Snap 版本 1.11.x 中的新增和更改的功能。
+ 此版本仅支持以 `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 运行时。

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

以下步骤可帮助您在设备上安装和配置 AWS IoT Greengrass snap。

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

要运行 AWS IoT Greengrass 快照，必须执行以下操作：
+ 在支持的 Linux 发行版上 AWS IoT Greengrass 快速运行，例如 Ubuntu、Linux Mint、Debian 和 Fedora。
+ 在您的设备安装 `snapd` 进程守护程序。`snapd` 进程守护程序包含 `snap` 工具，可用来管理您设备上的 Snap 环境。

有关支持的 Linux 发行版列表和安装说明，请参阅 *Snap 文档*中的[安装 snapd](https://snapcraft.io/docs/installing-snapd)。

#### 安装和配置 AWS IoT Greengrass 快照
<a name="gg-snap-install-config"></a>

以下教程向您展示了如何在设备上安装和配置 AWS IoT Greengrass snap。

**注意**  
尽管本教程使用的是亚马逊 EC2 实例（x86 t2.micro Ubuntu 20.04），但你可以使用物理硬件（例如 Raspberry Pi） AWS IoT Greengrass 快速运行。
`snapd` 进程守护程序已预先安装在 Ubuntu 上。

1. 通过在设备的终端中运行以下命令来安装 `core18` snap：

   ```
   sudo snap install core18
   ```

   `core18` Snap 是一种[基础 Snap](https://snapcraft.io/docs/base-snaps)，为运行时环境提供了常用的库。此 Snap 是基于 [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`命令以检查是否安装了 s AWS IoT Greengrass nap。

   以下示例响应显示 `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. 选择以下选项之一来安装 s AWS IoT Greengrass nap 1.11.x。
   + 要安装 s AWS IoT Greengrass nap，请运行以下命令：

     ```
     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 快照使用频道来管理次要版本。Snap 会自动更新至当前频道的最新可用版本。例如，如果您指定`--channel=1.11.x`，则您的 AWS IoT Greengrass 快照将更新到 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 函数所需的特定资源，您可以连接到其他接口。

   运行以下命令以获取 s AWS IoT Greengrass nap 支持的接口列表：

   ```
   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      -
   ```

   如果您在 Slot 列中看到连字符 (-)，则表示相应接口尚未连接。

1. 按照[安装 AWS IoT Greengrass 核心软件](module2.md)来创建 AWS IoT 事物、Greengrass 组、支持 AWS IoT与之进行安全通信的安全资源以及 AWS IoT Greengrass 核心软件配置文件。配置文件包含特定`config.json`于 Greengrass 核心的配置，例如证书文件的位置和设备数据端点。 AWS IoT 
**注意**  
如果您将文件下载到其他设备，请按照此[步骤](start-greengrass.md#transfer-files-to-device)将文件传输到 AWS IoT Greengrass 核心设备。

1. 对于 AWS IoT Greengrass 快照，请务必更新 c [onfig.json](gg-core.md#config-json) 文件，如下所示：
   + 将的*certificateId*每个实例替换为证书和密钥文件名称中的证书 ID。
   + 如果您下载的亚马逊根 CA 证书不同于 Amazon 根 CA 1 证书，请将的*AmazonRootCA1.pem*每个实例替换为亚马逊根 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>

本节介绍如何将客户托管的 Lambda 函数部署到 AWS IoT Greengrass Snap 上。

**重要**  
AWS IoT Greengrass snap v1.11 仅支持非容器化的 Lambda 函数。

1. 运行以下命令启动 AWS IoT Greengrass 守护程序：

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

   示例响应：

   ```
   Started.
   ```
**注意**  
如果看到错误，您可以使用 `snap run` 命令来获取详细的错误消息。有关问故障排除的更多信息，请参阅[错误：无法执行以下任务：-对 snap “” 的服务 ["greengrassd"] 运行服务命令 “start”（[start aws-iot-greengrass snap。 aws-iot-greengrass.greengrassd.service] 失败，退出状态 1：Job for snap。 aws-iot-greengrass.greengrassd.service 失败，因为控制进程退出时出现错误代码。 请参阅 “systemctl 状态快照”。 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 部分）： AWS IoT Greengrass上的 Lambda 函数](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/group 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
<a name="gg-snap-uninstall"></a>

要卸载 s AWS IoT Greengrass nap，请运行以下命令：

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

示例响应：

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

### 对 AWS IoT Greengrass 快照进行故障排除
<a name="gg-snap-troubleshoot"></a>

使用以下信息来帮助解决 AWS IoT Greengrass 快照问题。

#### 收到权限被拒绝错误
<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` 文件导致了权限错误。它还建议您在 `plugs` 中添加 `home`。但是，此建议并不适用。`home-for-greengrassd` 和 `home-for-hooks` plug 仅被授予只读访问权限。

有关更多信息，请参阅 *Snap 文档*中的 [snappy-debug Snap](https://snapcraft.io/docs/debug-snaps#heading--snappy-debug)。

#### 错误：无法执行以下任务：-对 snap “” 的服务 ["greengrassd"] 运行服务命令 “start”（[start aws-iot-greengrass snap。 aws-iot-greengrass.greengrassd.service] 失败，退出状态 1：Job for snap。 aws-iot-greengrass.greengrassd.service 失败，因为控制进程退出时出现错误代码。 请参阅 “systemctl 状态快照”。 aws-iot-greengrass.greengrassd.service” 和 “journalctl-xe” 了解详情。）
<a name="gg-snap-troubleshoot-snaprun"></a>

**解决方案**：当`snap start aws-iot-greengrass`命令无法启动 C AWS IoT Greengrass ore 软件时，您可能会看到此错误。

有关更多故障排除信息，请运行以下命令：

```
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 快照仅支持非容器化的 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 [安装和配置 AWS IoT Greengrass 快照](#gg-snap-install-config) 到 8 将 AWS IoT Greengrass 证书和配置文件添加到 AWS IoT Greengrass 快照中。

## 存档 AWS IoT Greengrass 核心软件安装
<a name="archive-ggc-version"></a>

升级到新版本的 AWS IoT Greengrass Core 软件时，可以存档当前安装的版本。这将保留您当前的安装环境，因此，您可以在同一硬件上测试新的软件版本。这还使您能够出于任何原因轻松回滚到您的存档版本。

**存档当前安装并安装新版本**

1. 下载您要升级到的 [AWS IoT Greengrass Core 软件](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 Core 软件，以使其可以管理 Greengrass 组的本地进程，如通信、影子同步和令牌交换。

 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>

 AWS IoT Greengrass 核心软件的配置文件是`config.json`。它位于 `/greengrass-root/config` 目录中。

**注意**  
*greengrass-root*表示 C AWS IoT Greengrass ore 软件在您的设备上的安装路径。通常，这是 `/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**


| Field | 描述 | 注意 | 
| --- | --- | --- | 
| <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 物体的亚马逊资源名称 (ARN)。 | 在 AWS IoT Greengrass 控制台的 “内核” 下或运行 CL [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)I 命令来查找您的核心的 ARN。 | 
| <a name="shared-config-iothost-v1.9"></a>iotHost | 您的 AWS IoT 终端节点。 |  在 AWS IoT 控制台的 **“设置”** 下或运行 [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 命令来查找终端节点。 此命令将返回 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 | 可选。允许 Greengrass 核心在与 AWS IoT Core的 MQTT 连接中完成发布、订阅或取消订阅操作的时间（以秒为单位）。 | 默认值为 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 core IPC 完成身份验证的时间（以毫秒为单位）。 |  此属性在 AWS IoT Greengrass v1.11.0 或更高版本中可用。 有效值在 500 到 5000 之间。默认值是 5000。  | 

**runtime**


| Field | 描述 | 注意 | 
| --- |--- |--- |
| maxWorkItemCount | 可选。Greengrass 守护程序一次可以处理的最大工作项数。超过此限制的请求将被忽略。 工作项队列由系统组件、用户定义的 Lambda 函数和连接器共享。 | 默认值是 1024。最大值受设备硬件限制。 增加此值会增加 AWS IoT Greengrass 使用的内存。如果您希望核心接收大量 MQTT 消息流量，则可以增加此值。  | 
| maxConcurrentLimit | 可选。Greengrass 守护程序可以拥有的并发未固定 Lambda 工作线程的最大数量。您可以指定一个不同的整数来覆盖此参数。 | 默认值为 25。最小值由 `lruSize` 定义。  | 
| lruSize | 可选。定义的最小值maxConcurrentLimit。 | 默认值为 25。 | 
| mountAllBlockDevices | 可选。 AWS IoT Greengrass 在设置 OverlayFS 后，允许使用绑定挂载将所有块设备装载到容器中。 |  此属性在 AWS IoT Greengrass v1.11.0 或更高版本中可用。 有效值为 `yes` 和 `no`。默认值为 `no`。 如果您的 `/usr` 目录不在 `/` 层次结构之下，请将此值设置为 `yes`。 | 
| postStartHealthCheckTimeout | 可选。Greengrass 守护程序在启动后等待运行状况检查完成的时间（以毫秒为单位）。 | 默认超时时间为 30 秒（30000 毫秒）。 | 
| `cgroup` | 
| --- |
| useSystemd | 指示您的设备是否使用 [https://en.wikipedia.org/wiki/Systemd](https://en.wikipedia.org/wiki/Systemd)。 | 有效值为 yes 或 no。运行check\$1ggc\$1dependencies模块 1[ 中的 ](module1.md) 脚本以查看您的设备是否使用 systemd。 | 

**crypto**

`crypto` 包含一些属性，这些属性通过 PKCS \$1 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)、[硬件安全性集成](hardware-security.md) 和 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。支持文件系统上 HSMs 或文件系统中的私钥存储配置。


| 字段 | 描述 | 注意 | 
| --- |--- |--- |
| caPath |   AWS IoT 根 CA 的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  确保您的[终端节点与证书类型对应](#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  可选。OpenSSL 引擎 `.so` 文件（用于在 OpenSSL 上启用 PKCS \$1 11 支持）的绝对路径。  |  必须是文件系统上的文件的路径。 如果您使用 Greengrass OTA 更新代理来实现硬件安全性，则此属性是必需的。有关更多信息，请参阅 [配置对 over-the-air更新的支持](hardware-security.md#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 实施的 libdl-loadable 库的绝对路径。  |  必须是文件系统上的文件的路径。  | 
| slotLabel |  用于标识硬件模块的槽标签。  |  必须符合 PKCS \$1 11 标签规范。  | 
| slotUserPin |  用于对模块的 Greengrass 核心进行身份验证的用户 PIN。  |  必须具有足够的权限才能使用配置的私有密钥执行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | 核心用于向 AWS IoT发出请求的证书和私有密钥。 | 
| IoTCertificate  .privateKeyPath  |  核心私有密钥的路径。  |  对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](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\$111](https://tools.ietf.org/html/rfc7512) 路径。 如果省略此属性，则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定，客户将负责对密钥进行轮换。  | 
| SecretsManager | 保护用于加密的数据密钥的私有密钥。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。 | 
| SecretsManager  .privateKeyPath |  本地 Secrets Manager 私有密钥的路径。  |  仅支持 RSA 密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。必须使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填充机制生成私有密钥。  | 

此外，还支持以下配置属性：


****  

| Field | 描述 | 注意 | 
| --- | --- | --- | 
| <a name="shared-config-mqttmaxconnectionretryinterval"></a> mqttMaxConnectionRetryInterval  |  可选。在 MQTT 连接断开时的最大连接重试间隔（以秒为单位）。  |  将该值指定为无符号整数。默认值为 `60`。  | 
| <a name="shared-config-managedrespawn"></a> managedRespawn  |  可选。指示 OTA 代理在更新之前需要运行自定义代码。  |  有效值为 `true` 或 `false`。有关更多信息，请参阅 [AWS IoT Greengrass 核心软件的 OTA 更新](core-ota-update.md)。  | 
| <a name="shared-config-writedirectory"></a> writeDirectory  |  可选。 AWS IoT Greengrass 创建所有 read/write 资源的写入目录。  |  有关更多信息，请参阅 [为配置写入目录 AWS IoT Greengrass](#write-directory)。  | 
| <a name="shared-config-piddirectory"></a>pidFileDirectory |  可选。 AWS IoT Greengrass 将其进程 ID (PID) 存储在此目录下。  |  默认值为 `/var/run`。  | 

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

以下版本的 AWS IoT Greengrass Core 软件处于[延长使用寿命阶段](maintenance-policy.md)。此信息仅供参考。

GGC v1.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_cn/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
**crypto**  
`crypto` 包含一些属性，这些属性通过 PKCS \$1 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)、[硬件安全性集成](hardware-security.md) 和 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。支持文件系统上 HSMs 或文件系统中的私钥存储配置。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
此外，还支持以下配置属性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)

GGC v1.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_cn/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
**crypto**  
在 v1.7.0 中新增了 `crypto` 对象。它引入了一些属性，这些属性通过 PKCS \$1 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)、[硬件安全性集成](hardware-security.md) 和 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。支持文件系统上 HSMs 或文件系统中的私钥存储配置。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
此外，还支持以下配置属性。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)

**GGC v1.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_cn/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
**crypto**  
在 v1.7.0 中新增了 `crypto` 对象。它引入了一些属性，这些属性通过 PKCS \$1 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)、[硬件安全性集成](hardware-security.md) 和 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。支持文件系统上 HSMs 或文件系统中的私钥存储配置。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
此外，还支持以下配置属性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
**crypto**  
`crypto` 对象（在版本 1.7.0 中添加）引入了一些属性，这些属性通过 PKCS \$1 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息，请参阅[硬件安全性集成](hardware-security.md)和[将机密部署到核 AWS IoT Greengrass 心](secrets.md)。支持文件系统上 HSMs 或文件系统中的私钥存储配置。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)
此外，还支持以下配置属性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/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_cn/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_cn/greengrass/v1/developerguide/gg-core.html)

**GGC v1.0**  
在 AWS IoT Greengrass 酷睿 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_cn/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 证书。否则，请确保使用相应的旧版端点。有关更多信息，请参阅《Amazon Web Services 一般参考》**中的[支持的旧版端点](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#greengrass-legacy-endpoints)。

### 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`端节点，其主机前缀替换为 *greengras* s。例如，ATS 签名的终端节点是 `greengrass-ats.iot.region.amazonaws.com`。这使用与您的 AWS IoT Core 终端节点相同的区域。

## 通过端口 443 或网络代理进行连接
<a name="alpn-network-proxy"></a>

此功能适用于 AWS IoT Greengrass 酷睿 v1.7 及更高版本。

Greengrass 内核使用 AWS IoT Core 带有 TLS 客户端身份验证的 MQTT 消息协议进行通信。按照惯例，基于 TLS 的 MQTT 使用端口 8883。但是，作为一项安全措施，限制性环境可能会将入站和出站流量限制到一个较小的 TCP 端口范围。例如，企业防火墙可能会为 HTTPS 流量打开端口 443，但关闭不常用协议使用的其他端口，例如用于 MQTT 流量的端口 8883。其他限制性环境可能要求所有流量经由 HTTP 代理连接到 Internet。

要在这些情况下启用通信，请 AWS IoT Greengrass 允许以下配置：
+ **在端口 443 上进行 MQTT 通信及 TLS 客户端身份验证**。如果网络允许连接到端口 443，则可以将核心配置为使用端口 443（而非默认端口 8883）进行 MQTT 通信。这可以是与端口 443 的直接连接，也可以是通过网络代理服务器的连接。

  AWS IoT Greengrass 使用[应用层协议网络](https://tools.ietf.org/html/rfc7301) (ALPN) TLS 扩展来启用此连接。与默认配置一样，端口 443 上的基于 TLS 的 MQTT 使用基于证书的客户端身份验证。

  当配置为使用与端口 443 的直接连接时，内核支持 [over-the-air (OTA) AWS IoT Greengrass 软件更新](core-ota-update.md)。此支持需要 AWS IoT Greengrass 酷睿 v1.9.3 或更高版本。
+ **通过端口 443 进行 HTTPS 通信**。 AWS IoT Greengrass 默认情况下，通过端口 8443 发送 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 酷睿 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 酷睿 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 酷睿 v1.7 或更高版本。

此过程 AWS IoT Greengrass 允许通过 HTTP 或 HTTPS 网络代理连接到互联网。

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` 对象指定有关网络代理的信息。此对象具有以下属性。


| 字段 | 说明 | 
| --- | --- | 
| noProxyAddresses |  可选。不使用代理的 IP 地址或主机名的逗号分隔列表。  | 
| proxy |  要连接的代理。代理具有以下属性。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-core.html)  | 

### 允许终端节点
<a name="allow-endpoints-proxy"></a>

Greengrass 设备 AWS IoT Core 和/或之间的通信必须经过身份验证。 AWS IoT Greengrass 此身份验证基于注册的 X.509 设备证书和加密密钥。要允许经身份验证的请求通过代理而无需其他加密，请允许以下终端节点。


| 端点 | 端口： | 说明 | 
| --- | --- | --- | 
| 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 上连接的客户端必须实现[应用层协议协商 (ALPN)](https://tools.ietf.org/html/rfc7301) TLS 扩展，并且必须在 `ProtocolNameList` 中作为 `ProtocolName` 传递 `x-amzn-http-ca`。更多信息，请参阅 *AWS IoT 开发人员指南*中的[协议](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)。   | 
| \$1.s3.amazonaws.com | 443 |  用于部署操作和 over-the-air更新。该格式包括 `*` 字符，因为终端节点前缀由内部控制，并且可能随时更改。  | 
| logs.region.amazonaws.com | 443 |  如果 Greengrass 组配置为写入日志，则为必填项。 CloudWatch  | 

## 为配置写入目录 AWS IoT Greengrass
<a name="write-directory"></a>

此功能适用于 AWS IoT Greengrass 酷睿 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 指定为 certs 和 system 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*目录设为只读的一种方法是将该目录挂载为只读。但是，要将 over-the-air (OTA) 更新应用于已装载目录中的 AWS IoT Greengrass 核心软件，必须先卸载该目录，然后在更新后重新挂载。您可以将这些 `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)
+ [IDs 用于 MQTT 连接的客户端 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 的支持，你可以使用物联网连接器。 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_cn/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>

发往 AWS 云 目标的 MQTT 消息将排队等待处理。排队的消息按照先进先出 (FIFO) 顺序进行处理。处理消息并将其发布到后 AWS IoT Core，该消息将从队列中删除。

默认情况下，Greengrass 核心将发送到 AWS 云 目标的未处理消息存储在内存中。您可以配置核心以改为在本地存储缓存中存储未处理的消息。与内存存储不同，本地存储缓存能够在核心重启后保持不变（例如，在群组部署或设备重启之后），因此 AWS IoT Greengrass 可以继续处理消息。您也可以配置存储大小。

**警告**  
Greengrass 核心在失去连接时可能会将重复的 MQTT 消息加入队列中，这是因为 Greengrass 核心会在 MQTT 客户机检测到其脱机之前重试一次发布操作。要避免云目标的 MQTT 消息重复，请将核心的 `keepAlive` 值配置为小于其 `mqttOperationTimeout` 值的一半。有关更多信息，请参阅 [AWS IoT Greengrass 核心配置文件](#config-json)。

AWS IoT Greengrass 使用后台处理程序系统组件（Lambd `GGCloudSpooler` a 函数）来管理消息队列。您可以使用以下 `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 酷睿 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 群 IDs 组和群组版本。此过程假定这是最新的组和组版本。以下查询将返回最近创建的组。

   ```
   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 显示在组的**设置**页面上。群组版本显示 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`对象中，复制除 ARNs 之外的所有其他组组件的`CoreDefinitionVersionArn`和`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`）。 ARNs 
   + 删除任何未使用的参数。例如，如果组版本不包含任何资源，请删除 `--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 酷睿 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 使用后台处理程序系统组件（Lamb `GGCloudSpooler` da 函数）创建以作为源的订阅。 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 不能保证一定交付给本地目标。
**注意**  
您可以使用 C [maxWorkItemount](#config-json-runtime) 配置属性来控制工作项队列的大小。例如，如果您的工作负载需要大量的 MQTT 流量，则可以增加队列大小。

    启用持久会话后，内核至少会打开一个额外的连接，用于与 MQTT 消息交换。 AWS IoT有关更多信息，请参阅 [IDs 用于 MQTT 连接的客户端 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 群 IDs 组和群组版本。此过程假定这是最新的组和组版本。以下查询将返回最近创建的组。

   ```
   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 显示在组的**设置**页面上。群组版本显示 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`对象中，复制除 ARNs 之外的所有其他组组件的`CoreDefinitionVersionArn`和`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`）。 ARNs 
   + 删除任何未使用的参数。例如，如果组版本不包含任何资源，请删除 `--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. （可选）增加核心配置文件中的 C [maxWorkItemount](#config-json-runtime) 属性。这可以帮助核心处理增加的 MQTT 流量以及与本地目标的通信。

 要使用这些配置更改更新内核，您可以使用 AWS IoT Greengrass API 创建新的函数定义版本，其中包含具有更新配置的`GGCloudSpooler`函数。接下来，将函数定义版本添加到新的组版本（以及其他组组件）中，然后部署该组版本。如果要还原默认配置，您可以创建不包含 `GGCloudSpooler` 函数的函数定义版本。

 控制台中不显示这个系统 Lambda 函数。不过，在将函数添加到最新组版本后，它将包含在从控制台指定的部署中（除非您使用 API 替换或删除该函数）。

### IDs 用于 MQTT 连接的客户端 AWS IoT
<a name="connection-client-id"></a>

此功能适用于 AWS IoT Greengrass 酷睿 v1.8 及更高版本。

Greengrass 内核为影子同步和证书管理等操作打开 MQTT 连接 AWS IoT Core 。对于这些连接，内核会 IDs 根据核心事物名称生成可预测的客户端。可预测的客户端 IDs 可以与监控、审计和定价功能一起使用，包括 AWS IoT Device Defender [AWS IoT 生命周期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)。您还可以围绕可预测的客户端 IDs （例如，基于证书属性的[订阅策略](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这些组件使用以下模式 IDs为连接生成客户端。


| 操作 | 客户端 ID 模式 | 
| --- | --- | 
| 部署 | `core-thing-name` 示例：`MyCoreThing` 将该客户端 ID 用于连接、断开连接、订阅和取消订阅生命周期事件通知。 | 
| 订阅 |  `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 连接。这些组件使用以下模式 IDs 为连接生成客户端。


| 操作 | 客户端 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` | 

------

**注意**  
同时连接中 IDs 使用的重复客户端可能会导致连接断开连接的无限循环。如果另一个设备硬编码为使用核心设备名称作为连接中的客户端 ID，则可能发生这种情况。有关更多信息，请参阅此[问题排查步骤](gg-troubleshooting.md#config-client-id)。

Greengrass 设备还与 AWS IoT Device Management的实例集索引服务完全集成。这样您便可以根据云中的设备属性、影子状态和连接状态对设备进行索引和搜索。例如，Greengrass 设备至少建立一个使用事物名称作为客户端 ID 的连接，因此，您可以使用设备连接索引来发现哪些 Greengrass 设备当前已与 AWS IoT Core连接或断开连接。有关更多信息，请参阅AWS IoT FleetWise 开发人员指南**中的[队列](https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html)。

### 为本地消息收发配置 MQTT 端口
<a name="config-local-mqtt-port"></a>

此功能需要 AWS IoT Greengrass 酷睿 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. 移除过时的端点，然后选择**更新**  
**更新核心的连接信息 (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 群 IDs 组和群组版本。此过程假定这是最新的组和组版本。以下查询将返回最近创建的组。

   ```
   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 显示在组的**设置**页面上。群组版本显示 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`对象中，复制除 ARNs 之外的所有其他组组件的`CoreDefinitionVersionArn`和`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`）。 ARNs 
   + 删除任何未使用的参数。例如，如果组版本不包含任何资源，请删除 `--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 脚本启用启动时启动。有关更多信息，请参阅 [使用 systemd 脚本管理 Greengrass 守护程序生命周期](install-ggc.md#ggc-package-manager-systemd)。

具有不同类型的初始化系统（如 initd、systemd 和 SystemV），并且它们使用类似的配置参数。以下示例是用于 systemd 的服务文件。`Type` 参数设置为 `forking`，因为 greengrassd（用于启动 Greengrass）为 Greengrass 守护程序进程创建分支，而 `Restart` 参数设置为 `on-failure` 以指示 systemd 在 Greengrass 进入故障状态时重新启动 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)