

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 更新 Amazon IoT Greengrass Core 软件（OTA）
<a name="update-greengrass-core-v2"></a>

Amazon IoT Greengrass Core 软件包括 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)和其它可选组件，您可以将这些组件部署到设备上，以执行软件的空中下载（OTA）更新。此功能内置在 Amazon IoT Greengrass Core 软件中。

OTA 更新可以更高效地执行以下操作：
+ 修复安全漏洞。
+ 解决软件稳定性问题。
+ 部署新的或改进的功能。

**Topics**
+ [要求](#ota-update-requirements)
+ [核心设备注意事项](#ota-update-considerations)
+ [Greengrass Nucleus 更新行为](#ota-update-behavior-nucleus)
+ [执行 OTA 更新](#create-ota-update)

## 要求
<a name="ota-update-requirements"></a>

以下要求适用于部署 Amazon IoT Greengrass Core 软件的 OTA 更新：
+ Greengrass 核心设备必须连接到 Amazon Web Services 云 才能接收部署。
+ 必须使用证书和密钥正确配置和预置 Greengrass 核心设备，以便对 Amazon IoT Core 和 Amazon IoT Greengrass 进行身份验证。
+ Amazon IoT Greengrass Core 软件必须作为系统服务进行设置和运行。如果您通过 JAR 文件 `Greengrass.jar` 运行 Nucleus，OTA 更新将不起作用。有关更多信息，请参阅 [将 Greengrass Nucleus 配置为系统服务](configure-greengrass-core-v2.md#configure-system-service)。

## 核心设备注意事项
<a name="ota-update-considerations"></a>

在执行 OTA 更新之前，请注意对您更新的核心设备及其连接的客户端设备的影响：
+ Greengrass Nucleus 会关闭。
+ 在核心设备上运行的所有组件也会关闭。如果这些组件写入本地资源，除非正常关闭，否则它们可能会导致这些资源的状态不正确。组件可以使用[进程间通信](interprocess-communication.md)来让 Nucleus 组件推迟更新，直到它们清理所使用的资源。
+ 当 Nucleus 组件关闭时，核心设备会失去与 Amazon Web Services 云和本地设备的连接。核心设备关闭后不会路由来自客户端设备的消息。
+ 作为组件运行且长时间存在的 Lambda 函数会丢失其动态状态信息，并丢弃所有待处理的工作。

## Greengrass Nucleus 更新行为
<a name="ota-update-behavior-nucleus"></a>

<a name="component-patch-update"></a>部署组件时，Amazon IoT Greengrass 会安装该组件所有依赖关系的最新受支持版本。因此，如果您向事物组添加新设备或更新针对这些设备的部署，则 Amazon 提供的公有组件的新补丁版本可能会自动部署到您的核心设备上。某些自动更新（例如 Nucleus 更新）可能会导致您的设备意外重启。

当 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)的版本发生更改时，Amazon IoT Greengrass Core 软件（包括 Nucleus 和设备上的所有其它组件）会重启以应用更改。由于更新 Nucleus 组件时会[对核心设备产生影响](#ota-update-considerations)，因此您可能需要控制何时将新 Nucleus 补丁版本部署到您的设备。为此，您必须直接将 Greengrass Nucleus 组件包括在部署中。直接包含组件意味着您在部署配置中包含该组件的特定版本，而不依赖组件依赖关系将该组件部署到您的设备上。有关在组件配方中定义依赖关系的更多信息，请参阅[配方格式](component-recipe-reference.md#recipe-format)。

根据您的操作和部署配置，查看下表，了解 Greengrass Nucleus 组件的更新行为。


| 操作 | 部署配置 | Nucleus 更新行为 | 
| --- | --- | --- | 
| 在现有部署的目标事物组中添加新设备，而无需修改部署。 | 该部署不直接包括 Greengrass Nucleus。该部署直接包括至少一个由 Amazon 提供的组件，或者包括依赖于 Amazon 提供的组件或 Greengrass Nucleus 的自定义组件。 | 在新设备上，安装符合所有组件依赖关系要求的最新补丁版本的 Nucleus。在现有设备上，不会更新已安装的 Nucleus 版本。 | 
| 在现有部署的目标事物组中添加新设备，而无需修改部署。 |  该部署直接包括特定版本的 Greengrass Nucleus。  | 在新设备上，安装指定的 Nucleus 版本。在现有设备上，不会更新已安装的 Nucleus 版本。 | 
| 创建新部署或修改现有部署。 | 该部署不直接包括 Greengrass Nucleus。该部署直接包括至少一个由 Amazon 提供的组件，或者包括依赖于 Amazon 提供的组件或 Greengrass Nucleus 的自定义组件。 | 在所有目标设备（包括您添加至目标事物组的任何新设备）上，安装符合所有组件依赖关系要求的最新补丁版本的 Nucleus。 | 
| 创建新部署或修改现有部署。 | 该部署直接包括特定版本的 Greengrass Nucleus。 | 在所有目标设备（包括您添加至目标事物组的任何新设备）上，安装指定的 Nucleus 版本。 | 

## 执行 OTA 更新
<a name="create-ota-update"></a>

要执行 OTA 更新，请[创建一个部署](create-deployments.md)，其中包括 [Nucleus 组件](greengrass-nucleus-component.md)和要安装的版本。