配置 AWS AWS IoT Greengrass 核心软件 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

配置 AWS AWS IoT Greengrass 核心软件

AWS AWS IoT Greengrass 核心软件提供了可用于配置软件的选项。您可以创建部署以在每个核心设备上配置 AWS AWS IoT Greengrass 核心软件。

部署 Greengrass 核心核心核心组件

AWS AWS IoT Greengrass 提供 AWS AWS IoT Greengrass 核心软件作为您可以部署到 Greengrass 核心设备的组件。您可以创建部署以将相同配置应用于多个 Greengrass 核心设备。有关更多信息,请参阅 Greengrass 核心更新 AWS IoT IoT Greengrass 核心软件 (OTA)

使用与根 CA 证书类型匹配的服务终端节点

您的 AWS IoT IoT Core 和 AWS AWS IoT Greengrass 终端节点必须与设备上的根 CA 证书的证书类型相对应。如果终端节点和证书类型不匹配,则设备与 AWS IoT IoT Core 或 AWS AWS IoT Greengrass 之间的身份验证尝试将失败。有关更多信息,请参阅AWS IoT IoT 开发人员指南》中的服务器身份验证

如果您的设备使用 Amazon Trust Services (ATS) 根 CA 证书(这是首选方法),它还必须使用 ATS 终端节点执行设备管理和发现数据层面操作。ATS 终端节点包括 ats 分段,如 AWS AWS IoT Core 终端节点的以下语法所示。

prefix.ats.iot.region.amazonaws.com.cn
注意

为了向后兼容 AWS IoT IoT Greengrass 当前在某些 AWS 区域中支持传统的 VeriSign 根 CA 证书和终端节点。如果您使用的是传统的 VeriSign 根 CA 证书,我们建议您创建 ATS 终端节点并改用 ATS 根 CA 证书。否则,请确保使用相应的传统终端节点。有关更多信息,请参阅《Amazon Web Services 一般参考》中的“支持的传统终端节点”。

注意

中国区域不支持传统终端节点。

使用 JVM 选项控制内存分配

如果您在内存有限的设备上运行 AWS AWS IoT Greengrass,则可以使用 Java 虚拟机 (JVM) 堆大小选项来控制 AWS IoT IoT Greengrass 核心软件使用的内存量。

要控制内存分配,请创建新的部署或修改包含 limbot 组件的现有部署,并在 jvmOptionslimbot 组件配置的 配置参数中指定堆大小选项。JVM 中的堆大小决定了在垃圾回收发生之前应用程序可在内存中创建的对象数。您可以指定初始 JVM 堆大小-Xms 参数)和最大 JVM 堆大小-Xmx 参数)。初始堆大小越大,垃圾收集发生之前可以创建的对象就越多,但这也意味着垃圾收集器将花更长的时间去压缩堆。最大堆大小指定了在占用大量内存的活动期间扩展堆时,JVM 可分配的最大内存量。我们建议您将jvmOptions值设置为至少 -Xmx64m

有关部署组件的信息,请参阅创建部署

配置运行组件的用户和组

AWS AWS IoT Greengrass 核心软件可以系统用户和组的身份运行组件进程,不同于运行该软件的进程。这将提高安全性,因为您可以将 AWS AWS IoT Greengrass 核心软件作为根运行,而无需向核心设备上运行的组件授予根权限。

当您配置用户和组时,按以下格式指定它们以冒号 (:) 分隔user:group:。组是可选的。如果未指定组 AWS IoT IoT Greengrass 核心软件默认为用户的主组。您可以使用名称或 ID 来标识用户和组。

您可以为每个组件和每个核心设备配置用户和组。

  • Configure per component (配置每个

    您可以将每个组件配置为使用特定于该组件的用户和组运行。在创建部署时,您可以为部署中的每个组件指定用户和组。如果指定组件 AWS IoT IoT Greengrass Core 软件将以该用户和组的身份运行这些组件。否则,它默认为以您为核心设备配置的默认用户和组的身份运行组件。有关更多信息,请参阅创建部署

    您还可以为组件配方中的每个组件指定默认用户和组。有关更多信息,请参阅AWS AWS IoT Greengrass 组件配方参考

  • 按核心设备配置

    您可以配置 AWS AWS IoT Greengrass 核心软件用于运行组件的默认系统用户和组。当 AWS AWS IoT Greengrass 核心软件运行组件时,它将使用您为该组件指定的用户和组。如果该组件未指定用户和组,则 AWS AWS IoT Greengrass 核心软件会将该组件作为您为核心设备配置的默认用户和组运行。有关更多信息,请参阅配置默认用户和组

注意

如果您未将用户配置为运行组件,并且您以根用户身份运行 AWS AWS IoT Greengrass 核心软件,则软件不会运行组件。如果您以根用户身份运行 ,则必须指定默认用户来运行组件。

如果您未将用户配置为运行组件,并且您以非根用户身份运行 AWS AWS IoT Greengrass 核心软件,则软件将以该用户的身份运行组件。

您还可以作为不存在的系统用户(也称为未知用户)运行组件以提高安全性。在 Linux 操作系统上,进程可以向同一用户发送由其运行的任何其他进程发送信号。未知用户不会运行其他进程,因此您可以作为未知用户运行组件,以防止组件向核心设备上的其他组件发送信号。要以未知用户身份运行组件,请指定核心设备上不存在的用户 ID。您还可以指定不存在的组 ID 以作为未知组运行。

您无法将 AWS AWS IoT Greengrass 核心软件配置为以根用户 (UID 0) 或组 (GID 0) 身份运行组件。

配置默认用户和组

您可以使用部署在核心设备上配置默认用户和组。在此部署中,您将更新 viot 组件配置。

注意

您还可以在运行 AWS AWS IoT Greengrass 核心软件时使用 --component-default-user 选项设置默认用户和组。有关更多信息,请参阅安装 AWS AWS IoT Greengrass 核心软件

要配置默认用户和组,请创建一个部署,为aws.greengrass.Nucleus组件指定以下配置更新。

{ "runWithDefault": { "posixUser": "ggc_user:ggc_group" } }

以下示例定义一个部署,该部署ggc_user将 配置为默认用户,将 ggc_group 配置为默认组。merge 配置更新需要序列化的 JSON 对象。

{ "components": { "aws.greengrass.Nucleus": { "version": "0.0.0", "configurationUpdate": { "merge": "{\"runWithDefault\":{\"posixUser\":\"ggc_user:ggc_group\"}}" } } } }

通过端口 443 或网络代理进行连接

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

注意

运行 Greengrass 核心组件 v2 及更早版本的 Greengrass 核心设备使用端口 8443 连接到 AWS AWS IoT Greengrass 数据层面终端节点。这些设备必须能够连接到端口 8443 上的此终端节点。有关更多信息,请参阅允许终端节点

为了在这些场景中实现通信 AWS IoT IoT Greengrass 提供了以下配置选项:

  • 通过端口 443 进行 MQTT 通信。如果您的网络允许连接到端口 443,则可以将 Greengrass 核心设备配置为使用端口 443 而不是默认端口 8883 进行 MQTT 流量。这可以是到端口 443 的直接连接,也可以是通过网络代理服务器的连接。与使用基于证书的客户端身份验证的默认配置不同,端口 443 上的 MQTT 使用设备服务角色进行身份验证。

    有关更多信息,请参阅通过端口 443 配置 MQTT

  • 通过端口 443 的 HTTPS 通信。默认情况下 AWS IoT IoT Greengrass 核心软件通过端口 8443 发送 HTTPS 流量,但您可以将其配置为使用端口 443。AWS AWS IoT Greengrass 使用应用层协议网络 (ALPN) TLS 扩展来启用此连接。与默认配置一样,端口 443 上的 HTTPS 使用基于证书的客户端身份验证。

    重要

    要使用 ALPN 并通过端口 443 启用 HTTPS 通信,您的核心设备必须运行 Java 8 更新 252 或更高版本。Java 版本 9 及更高版本的所有更新也支持 ALPN。

    有关更多信息,请参阅通过端口 443 配置 HTTPS

  • 通过网络代理连接。您可以将网络代理服务器配置为连接到 Greengrass 核心设备的中介。AWS AWS IoT Greengrass 仅支持基本身份验证和 HTTP 代理。AWS AWS IoT Greengrass 不支持 HTTPS 代理。

    AWS AWS IoT Greengrass 核心软件通过 ALL_PROXYHTTP_PROXYHTTPS_PROXYNO_PROXY 环境变量将代理配置传递给组件。组件必须使用这些设置通过代理进行连接。组件使用常见库 (如 boto3 和 python requests 程序包),这些库在默认情况下通常使用这些环境变量来建立连接。如果组件还指定了这些环境变量 AWS IoT IoT Greengrass 不会覆盖它们。

    有关更多信息,请参阅配置网络代理

通过端口 443 配置 MQTT

您可以使用部署在单个核心设备或一组核心设备上通过端口 443 配置 MQTT。在此部署中,您将更新 viot 组件配置。当您更新其mqtt配置时,limbot 将重新启动。

要在端口 443 上配置 MQTT,请创建一个部署,该部署aws.greengrass.Nucleus 组件指定以下配置更新。

{ "mqtt": { "port": 443 } }

以下示例定义通过端口 443 配置 MQTT 的部署。merge 配置更新需要序列化的 JSON 对象。

{ "components": { "aws.greengrass.Nucleus": { "version": "2.0.5", "configurationUpdate": { "merge": "{\"mqtt\":{\"port\":443}}" } } } }

通过端口 443 配置 HTTPS

此功能需要 Greengrass 核心 v2 或更高版本。

您可以使用部署在单个核心设备或一组核心设备上通过端口 443 配置 HTTPS。在此部署中,您将更新 viot 组件配置。

要在端口 443 上配置 HTTPS,请创建一个部署,为aws.greengrass.Nucleus组件指定以下配置更新。

{ "greengrassDataPlanePort": 443 }

以下示例定义通过端口 443 配置 HTTPS 的部署。merge 配置更新需要序列化的 JSON 对象。

{ "components": { "aws.greengrass.Nucleus": { "version": "2.0.5", "configurationUpdate": { "merge": "{\"greengrassDataPlanePort\":443}" } } } }

配置网络代理

按照本部分中的过程操作,将 Greengrass 核心设备配置为通过 HTTP 网络代理连接到 Internet。

重要

您设备的角色必须允许以下权限才能使用网络代理:

  • iot:Connect

  • iot:Publish

  • iot:Receive

  • iot:Subscribe

这是必需的,因为设备使用来自令牌交换服务的 AWS 凭证对与 AWS AWS IoT 的 MQTT 连接进行身份验证。设备使用 MQTT 从 AWS 云接收和安装部署,因此,除非您在其角色上定义这些权限,否则设备将无法工作。设备通常使用 X.509 证书对 MQTT 连接进行身份验证,但设备在使用代理时无法执行此操作以进行身份验证。

有关如何配置设备角色的更多信息,请参阅授权核心设备与 AWS 服务交互

您可以使用部署在单个核心设备或一组核心设备上配置网络代理。在此部署中,您将更新 viot 组件配置。当您更新其networkProxy配置时,limbot 将重新启动。

要配置网络代理,请为合并以下配置更新的 组件创建部署aws.greengrass.Nucleus。此配置更新包含 networkProxy 对象

{ "networkProxy": { "noProxyAddresses": "http://192.168.0.1,www.example.com", "proxy": { "url": "https://my-proxy-server:1100", "username": "Mary_Major", "password": "pass@word1357" } } }

以下示例定义配置网络代理的部署。merge 配置更新需要序列化的 JSON 对象。

{ "components": { "aws.greengrass.Nucleus": { "version": "2.0.5", "configurationUpdate": { "merge": "{\"networkProxy\":{\"noProxyAddresses\":\"http://192.168.0.1,www.example.com\",\"proxy\":{\"url\":\"https://my-proxy-server:1100\",\"username\":\"Mary_Major\",\"password\":\"pass@word1357\"}}}" } } } }

networkProxy 对象

使用 networkProxy 对象指定有关网络代理的信息。此对象包含以下信息:

noProxyAddresses

(可选)不受代理约束的 IP 地址或主机名的逗号分隔列表。

proxy

要连接到的代理。此对象包含以下信息:

url

代理服务器的 URL,格式为 scheme://userinfo@host:port

  • scheme – 方案,必须为 httphttps

  • userinfo – (可选) 用户名和密码信息。如果您在 中指定此项url,则 Greengrass 核心设备将忽略 usernamepassword 字段。

  • host – 代理服务器的主机名或 IP 地址。

  • port – (可选)端口号。如果未指定端口,则 Greengrass 核心设备使用以下默认值:

    • http – 80

    • https – 443

username

(可选)用于对代理服务器进行身份验证的用户名。

password

(可选)用于对代理服务器进行身份验证的密码。

允许终端节点

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

Endpoint 端口 描述

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 证书,或者是同时使用两者。

greengrass-ats.iot.region.amazonaws.com

或者

greengrass.iot.region.amazonaws.com

8443 或 443

用于数据层面操作。

允许使用一个或两个终端节点,具体取决于您的核心和连接的设备是否使用 Amazon Trust Services(首选)根 CA 证书和/或旧根 CA 证书。

注意

在端口 443 上进行连接的客户端必须实施应用层协议协商 (ALPN) TLS 扩展,并在 x-amzn-http-caProtocolName作为 传递ProtocolNameList。有关更多信息,请参阅AWS IoT IoT 开发人员指南》中的协议。

*.s3.amazonaws.com

443

用于 部署。此格式包括 * 字符,因为终端节点前缀在内部控制,可能随时更改。

logs.region.amazonaws.com

443

如果 Greengrass 核心设备配置为将日志写入 CloudWatch则是必需的。

配置 MQTT 超时和缓存设置

在 AWS AWS IoT Greengrass 环境中,组件可以使用 MQTT 与 AWS IoT IoT Core 进行通信。AWS AWS IoT Greengrass 核心软件管理组件的 MQTT 消息。当核心设备与 AWS 云的连接丢失时,软件会缓存 MQTT 消息以在连接恢复后重试。您可以配置设置,例如消息超时和缓存大小。有关更多信息,请参阅 mqttGreengrass 核心组件的 mqtt.spooler 配置参数。

将 AWS AWS IoT Greengrass 配置为系统服务

您可以将 AWS AWS IoT Greengrass 核心软件配置为设备初始化系统中的系统服务。这使您能够执行以下操作:

  • 在设备启动时启动 AWS AWS IoT Greengrass 核心软件。如果您管理大量设备,这是一种很好的做法。

  • 将无线 (OTA) 更新应用于核心设备的 AWS AWS IoT Greengrass 核心软件。有关更多信息,请参阅更新 AWS IoT IoT Greengrass 核心软件 (OTA)

  • 允许组件在部署将组件更新到新版本或更新某些配置参数时重新启动 AWS AWS IoT Greengrass 核心软件或核心设备。有关更多信息,请参阅引导生命周期步骤

具有不同的初始化系统,例如 initd、systemd 和 SystemV。要在具有 systemd 的设备上将 AWS AWS IoT Greengrass 核心软件配置为系统服务,请运行带有 --setup-system-service true 参数的 核心。此参数将核心作为系统服务启动,并将其配置为在设备启动时启动。

然后,您可以使用以下命令配置在启动时启动设备以及启动或停止 AWS AWS IoT Greengrass 核心软件。

检查服务的状态 (systemd)

  • 运行以下命令以检查系统服务的状态。

    sudo systemctl status greengrass.service

在设备启动时启用服务启动 (systemd)

  • 运行以下命令以允许在设备启动时启动核心。

    sudo systemctl enable greengrass.service

在设备启动时禁用服务启动 (systemd)

  • 运行以下命令以在设备启动时停止启动 limbot。

    sudo systemctl disable greengrass.service

作为系统服务启动核心 (systemd)

  • 运行以下命令以启动 AWS AWS IoT Greengrass 核心软件。

    sudo systemctl start greengrass.service

作为系统服务停止核心 (systemd)

  • 运行以下命令以停止 AWS AWS IoT Greengrass 核心软件。

    sudo systemctl stop greengrass.service