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

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

配置Amazon IoT GreengrassCore 软件

这些区域有:Amazon IoT Greengrass核心软件提供了可用于配置软件的选项。您可以创建部署来配置Amazon IoT Greengrass每台核心设备上的核心软件。

部署 Greengrass 核心核心组件

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

配置Amazon IoT Greengrass作为系统服务

您必须配置Amazon IoT Greengrass核心软件作为系统服务在设备的初始化系统中执行以下操作:

  • 启动Amazon IoT Greengrass设备启动时的核心软件。如果您管理大型设备队列,则这是一种很好的做法。

  • 安装并运行插件组件。几Amazon-提供的组件是插件组件,这使它们能够直接与 Greengrass 核心接口。有关组件类型的详细信息,请参阅组件类型.

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

  • 使组件能够重新启动Amazon IoT Greengrass当部署将组件更新为新版本或更新某些配置参数时,核心软件或核心设备。有关更多信息,请参阅 。引导生命周期步骤.

具有不同的初始化系统(如 initd、systemd 和 SystemV)。Amazon IoT Greengrass提供了一个内置选项来配置Amazon IoT Greengrass核心软件作为系统服务在带有 systemd 的设备上。使用--setup-system-service true参数安装Amazon IoT Greengrass核心软件,将核心作为系统服务启动,并将其配置为在设备启动时启动。

您还可以手动配置核心以作为系统服务运行。以下示例是用于 systemd 的服务文件。

[Unit] Description=Greengrass Core [Service] Type=simple PIDFile=/greengrass/v2/alts/loader.pid RemainAfterExit=no Restart=on-failure RestartSec=10 ExecStart=/bin/sh /greengrass/v2/alts/current/distro/bin/loader [Install] WantedBy=multi-user.target

有关如何在 Raspberry Pi 上为 systemd 创建和启用服务文件的信息,请参阅 Raspberry Pi 文档中的 SYSTEMD

配置系统服务后,可以使用以下命令配置启动设备以及启动或停止Amazon IoT GreengrassCore 软件。

检查服务的状态 (systemd)

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

    sudo systemctl status greengrass.service

启用设备引导时服务启动 (systemd)

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

    sudo systemctl enable greengrass.service

禁用设备引导时的服务启动 (systemd)

  • 运行以下命令以停止设备启动时核心。

    sudo systemctl disable greengrass.service

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

  • 运行以下命令以启动 Amazon IoT Greengrass Core 软件。

    sudo systemctl start greengrass.service

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

  • 运行以下命令以停止Amazon IoT GreengrassCore 软件。

    sudo systemctl stop greengrass.service

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

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

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

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

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

注意

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

使用 JVM 选项控制内存分配

如果您正在运行Amazon IoT Greengrass,您可以使用 Java 虚拟机 (JVM) 选项来控制最大堆大小、垃圾回收模式和编译器选项,这些选项控制Amazon IoT GreengrassCore 软件使用。JVM 中的堆大小决定了应用程序之前可以使用多少内存垃圾回收发生,或者在应用程序内存不足之前。最大堆大小指定了在占用大量内存的活动期间扩展堆时,JVM 可分配的最大内存量。

要控制内存分配,请创建新部署或修改包含核心组件的现有部署,并在jvmOptions配置参数Core 组件配置.

根据要求,您可以运行Amazon IoT Greengrass内存分配减少或内存分配最小的核心软件。

内存分配

运行Amazon IoT Greengrass具有减少内存分配的核心软件,我们建议您使用以下示例配置合并更新来设置核心配置中的 JVM 选项:

{ jvmOptions: "-Xmx64m -XX:+UseSerialGC -XX:TieredStopAtLevel=1" }

内存分配

运行Amazon IoT Greengrass具有最小内存分配的核心软件,我们建议您使用以下示例配置合并更新来设置核心配置中的 JVM 选项:

{ jvmOptions: "-Xmx32m -XX:+UseSerialGC -Xint" }

这些示例配置合并更新使用以下 JVM 选项:

-XmxNNm

设置最大 JVM 堆大小。

为了减少内存分配,请使用-Xmx64m作为起始值,以将堆大小限制为 64 MB。对于最小内存分配,请使用-Xmx32m作为起始值,以将堆大小限制为 32 MB。

您可以增加或减少-Xmx值取决于您的实际需求;但是,我们强烈建议您不要将最大堆大小设置为 16 MB 以下。如果最大堆大小对于您的环境来说太低,则Amazon IoT Greengrass由于内存不足,核心软件可能会遇到意外错误。

-XX:+UseSerialGC

指定为 JVM 堆空间使用串行垃圾回收。串行垃圾回收器速度较慢,但比其他 JVM 垃圾回收实现使用的内存更少。

-XX:TieredStopAtLevel=1

指示 JVM 使用 Java 准时 (JIT) 编译器一次。由于 JIT 编译的代码占用了设备内存中的空间,因此使用 JIT 编译器多次消耗比单个编译更多的内存。

-Xint

指示 JVM 不使用适时 (JIT) 编译器。相反,JVM 在仅解释模式下运行。此模式比运行 JIT 编译代码慢;但是,编译后的代码不会使用内存中的任何空间。

有关创建配置合并更新的信息,请参阅更新组件配置.

配置运行组件的用户和组

这些区域有:Amazon IoT Greengrass核心软件可以作为不同于运行软件的系统用户和组来运行组件进程。这增加了安全性,因为您可以运行Amazon IoT Greengrass核心软件作为 root 用户,而无需授予在核心设备上运行的组件的 root 权限。

下表指示了哪些组件类型Amazon IoT Greengrass核心软件可以作为指定的系统用户和组运行。有关更多信息,请参阅组件类型

组件类型 配置系统用户/组

插件

通用

Lambda(非集装箱)

Lambda (集装箱化)

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

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

  • 为组件配置

    您可以将每个组件配置为与特定于该组件的用户和组一起运行。创建部署时,可以为部署中的每个组件指定用户和组。这些区域有:Amazon IoT Greengrass核心软件以此用户和组的身份运行组件(如果您指定它们)。否则,默认情况下将组件作为您为核心设备配置的默认用户和组运行。有关更多信息,请参阅创建部署

  • 配置核心设备的默认值

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

注意

如果没有将用户配置为运行组件,并且运行Amazon IoT Greengrass核心软件作为 root 用户,则软件将不会运行组件。如果以 root 用户身份运行,则必须指定默认用户才能运行组件。

如果没有将用户配置为运行组件,并且运行Amazon IoT Greengrass核心软件作为非 root 用户,然后软件以该用户身份运行组件。

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

您不能配置Amazon IoT Greengrass以根用户 (UID 0) 或组 (GID 0) 身份运行组件的核心软件。

配置默认用户和组

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

注意

您还可以设置默认用户和组,当您运行Amazon IoT GreengrassCore 软件与--component-default-user选项。有关更多信息,请参阅安装 Amazon IoT Greengrass Core 软件

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

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

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

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

配置组件的系统资源限制

此功能适用于 v2.4.0 及更高版本的Greengrass.

您可以配置每个组件的进程在核心设备上可以使用的最大 CPU 和 RAM 使用量。

下表显示了支持系统资源限制的组件类型。有关更多信息,请参阅组件类型

组件类型 配置系统资源限制

插件

通用

Lambda(非集装箱)

Lambda (集装箱化)

您可以为每个组件和每个核心设备配置系统资源限制。

  • 为组件配置

    您可以使用特定于该组件的系统资源限制来配置每个组件。创建部署时,您可以为部署中的每个组件指定系统资源限制。如果组件支持系统资源限制,Amazon IoT Greengrass核心软件将限制应用于组件的流程。如果不为组件指定系统资源限制,则Amazon IoT Greengrass核心软件使用您为核心设备配置的任何默认值。有关更多信息,请参阅创建部署

  • 配置核心设备的默认值

    您可以将默认系统资源限制配置为Amazon IoT Greengrass核心软件适用于支持这些限制的组件。当Amazon IoT Greengrass核心软件运行一个组件,它会应用您为该组件指定的系统资源限制。如果该组件未指定系统资源限制,Amazon IoT Greengrass核心软件将应用您为核心设备配置的默认系统资源限制。如果不指定默认系统资源限制,则Amazon IoT Greengrass默认情况下,核心软件不应用任何系统资源限制。有关更多信息,请参阅配置默认系统资源限制

配置默认系统资源限制

您可以部署Greengrass配置核心设备的默认系统资源限制。要配置默认系统资源限制,创建部署,它指定了以下配置更新aws.greengrass.Nucleus组件。

{ "runWithDefault": { "systemResourceLimits": { "cpu": cpuTimeLimit, "memory": memoryLimitInKb } } }

以下示例定义了一个部署,该部署将 CPU 时间限制配置为2,相当于具有 4 个 CPU 内核的设备使用率的 50%。此示例还将内存使用量配置为 100 MB。

{ "components": { "aws.greengrass.Nucleus": { "version": "2.4.0", "configurationUpdate": { "merge": "{\"runWithDefault\":{\"cpu\":2,\"memory\":102400}}" } } } }

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

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

注意

Greengrass 核心设备运行Greengrassv2.0.3 及更早版本使用端口 8443 连接到Amazon IoT Greengrass数据平面端点。这些设备必须能够在端口 8443 上连接到此终端节点。有关更多信息,请参阅允许终端节点

为了在这些情况下实现通信,Amazon IoT Greengrass提供以下配置选项:

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

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

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

    重要

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

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

  • 通过网络代理连接。您可以配置一个网络代理服务器来充当连接到 Greengrass 核心设备的媒介。Amazon IoT Greengrass仅支持基本身份验证和 HTTP 代理。Amazon IoT Greengrass不支持 HTTPS 代理。

    这些区域有:Amazon IoT Greengrass核心软件将代理配置通过ALL_PROXYHTTP_PROXYHTTPS_PROXY, 和NO_PROXY环境变量。组件必须使用这些设置才能通过代理进行连接。组件使用公共库(如 boto3,cURL 和 pythonrequests软件包),默认情况下通常使用这些环境变量来建立连接。如果组件还指定了这些环境变量,Amazon IoT Greengrass不会覆盖它们。

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

通过端口 443 配置 MQTT

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

通过端口 4443 配置 MQTT,创建部署,它指定了以下配置更新aws.greengrass.Nucleus组件。

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

以下示例定义了通过端口 443 配置 MQTT 的部署。这些区域有:merge配置更新需要一个序列化的 JSON 对象。

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

通过端口 443 配置 HTTPS

此功能需要使用Greengrass 核心v2.0.4 或更高版本。

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

要通过端口 443 配置 HTTPS,创建部署,它指定了以下配置更新aws.greengrass.Nucleus组件。

{ "greengrassDataPlanePort": 443 }

以下示例定义了通过端口 443 配置 HTTPS 的部署。这些区域有:merge配置更新需要一个序列化的 JSON 对象。

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

配置网络代理

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

重要

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

  • iot:Connect

  • iot:Publish

  • iot:Receive

  • iot:Subscribe

这是必要的,因为设备使用Amazon凭据来验证 MQTT 连接到Amazon IoT. 设备使用 MQTT 接收和安装来自Amazon Web Services 云,因此除非您对其角色定义这些权限,否则您的设备将无法正常工作。设备通常使用 X.509 证书来验证 MQTT 连接,但设备在使用代理时无法执行此操作来进行身份验证。

有关如何配置设备角色的详细信息,请参阅授权核心设备与Amazon服务.

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

配置网络代理创建部署(对于 )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.4.0", "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— 该计划,这必须http或者https.

  • userinfo—(可选)用户名和密码信息。如果您在url,Greengrass 核心设备将忽略usernamepassword字段之间没有不同。

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

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

    • http—80

    • https—443

username

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

password

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

允许终端节点

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

Endpoint 端口 描述

greengrass-ats.iot.region.amazonaws.com

greengrass.iot.region.amazonaws.com

8443 或 443

用于数据平面操作,例如安装部署或使用客户端设备。

您必须允许仅使用其中一个终端节点或同时使用这两个终端节点,具体取决于您的核心设备和客户端设备是使用这两个终端节点,还是同时使用两者。有关更多信息,请参阅使用与 CA 证书类型匹配的服务终端节点

注意

端口 443 上连接的客户端必须实现应用程序层协议协商 (ALPN)TLS 扩展和传递x-amzn-http-ca作为ProtocolName中的ProtocolNameList. 有关更多信息,请参阅 。协议中的Amazon IoT开发人员指南.

prefix-ats.iot.region.amazonaws.com

prefix.iot.region.amazonaws.com

MQTT:8883 或 443

HTTPS:8443 或 443

用于设备管理的数据平面操作,例如 MQTT 通信和与Amazon IoT Core.

您必须允许仅使用其中一个终端节点或同时使用这两个终端节点,具体取决于您的核心设备和客户端设备是使用这两个终端节点,还是同时使用两者。有关更多信息,请参阅使用与 CA 证书类型匹配的服务终端节点

prefix.credentials.iot.region.amazonaws.com

443

用于获取Amazon凭据,核心设备用于从 Amazon S3 下载组件工件并执行其他操作。有关更多信息,请参阅授权核心设备与Amazon服务

*.s3.amazonaws.com

443

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

logs.region.amazonaws.com

443

如果 Greengrass 核心设备配置为将日志写入 CloudWatch,则需要此选项。

data.iot.region.amazonaws.com

443

如果核心设备配置为使用网络代理,则必需。核心设备使用此端点进行 MQTT 通信Amazon IoT Core当代理后面。有关更多信息,请参阅配置网络代理

配置 MQTT 超时和缓存设置

在Amazon IoT Greengrass环境中,组件可以使用 MQTT 与Amazon IoT Core. 这些区域有:Amazon IoT Greengrass核心软件管理组件的 MQTT 消息。当核心设备失去与Amazon Web Services 云,软件会缓存 MQTT 消息,以便稍后在连接恢复时重试。您可以配置消息超时和缓存大小等设置。有关更多信息,请参阅 。mqttmqtt.spooler配置参数Greengrass.

Amazon IoT Core对其 MQTT 消息代理强制执行服务配额。这些配额可能适用于您在核心设备和Amazon IoT Core. 有关更多信息,请参阅 。Amazon IoT Core消息代理服务配额中的Amazon一般参考.