AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置 AWS IoT Greengrass 核心

AWS IoT Greengrass Core 是一个 AWS IoT 事物(设备)。与其他 AWS IoT 设备一样,核心位于注册表中,具有设备影子,并使用设备证书在 AWS IoT 中进行身份验证。核心设备运行 AWS IoT Greengrass Core软件,以使其可以管理 Greengrass 组的本地进程,如通信、影子同步和令牌交换。

AWS IoT Greengrass 核心软件提供了以下功能:

  • 连接器和 Lambda 函数的部署与本地执行。

  • 使用托管订阅通过本地网络在设备、连接器和 Lambda 函数之间进行的 MQTT 消息传递。

  • 使用托管订阅在 AWS IoT 与设备、连接器和 Lambda 函数之间进行的 MQTT 消息传递。

  • 使用设备身份验证和授权确保设备和云之间的安全连接。

  • 设备的本地影子同步。影子可配置为与云同步。

  • 对本地设备和卷资源的受控访问。

  • 用于运行本地推理的云训练机器学习模型的部署。

  • 使设备能够发现 Greengrass 核心设备的自动 IP 地址检测。

  • 全新的或更新的组配置的集中部署。下载配置数据后,核心设备将自动重启。

  • 用户定义的 Lambda 函数的安全、无线软件更新。

AWS IoT Greengrass 核心配置文件

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

注意

greengrass-root 表示在您的设备上安装 AWS IoT Greengrass 核心软件的路径。如果您已按照入门教程中的步骤安装此软件,则安装位置为 /greengrass 目录。

如果您使用 AWS IoT Greengrass 控制台 中的 Easy group creation (简单组创建) 选项,则 config.json 文件将部署到处于工作状态的核心设备中。

您可以运行以下命令以查看该文件的内容:

cat /greengrass-root/config/config.json

下面是一个 config.json 示例文件。这是您从 AWS IoT Greengrass 控制台 中创建核心时生成的版本。

GGC v1.9GGC v1.8GGC v1.7GGC v1.6GGC v1.5.0GGC v1.3GGC v1.1GGC v1.0
GGC v1.9
{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:partition:iot:区域:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.区域.amazonaws.com", "ggHost" : "greengrass-ats.iot.区域.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

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。

注意

确保您的终端节点与证书类型对应

certPath

核心设备证书相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
keyPath 核心私有密钥的相对于 /greengrass-root/certs 目录的路径。 与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
thingArn 表示 AWS IoT Greengrass Core设备的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 核心的该属性可在 AWS IoT Greengrass 控制台 中的 Cores (核心) 下方找到,通过运行 aws greengrass get-core-definition-version CLI 命令也可找到。
iotHost 您的 AWS IoT 终端节点。

该属性可在 AWS IoT 控制台 中的 Settings (设置) 下方找到,通过运行 aws iot describe-endpoint --endpoint-type iot:Data-ATS CLI 命令也可找到。

此命令将返回 Amazon Trust Services (ATS) 终端节点。有关更多信息,请参阅 AWS IoT 核心中的服务器身份验证文档。

注意

确保您的终端节点与证书类型对应

确保您的终端节点与区域对应 例如,在 中国(北京)区域 中, iotHost 的终端节点使用格式 prefix.ats.iot.cn-north-1.amazonaws.com.cn。对于该区域,在主机区段中,-ats 更改为 .ats

ggHost 您的 AWS IoT Greengrass 终端节点。

这是您的 iotHost 终端节点,其主机前缀将替换为 greengrass(例如,greengrass-ats.iot.region.amazonaws.com)。使用与 iotHost 相同的 AWS 区域。

注意

确保您的终端节点与证书类型对应

确保您的终端节点与区域对应例如,在 中国(北京)区域 中,ggHost 的终端节点为 greengrass.ats.iot.cn-north-1.amazonaws.com.cn。对于该区域,在主机区段中,-ats 更改为 .ats

iotMqttPort 可选。MQTT 与 AWS IoT 进行通信时所使用的端口号。 有效值为 8883443。默认值为 8883。有关更多信息,请参阅通过端口 443 或网络代理进行连接
iotHttpPort 可选。用于创建到 AWS IoT 的 HTTPS 连接的端口号。 有效值为 8443443。默认值为 8443。有关更多信息,请参阅通过端口 443 或网络代理进行连接
ggHttpPort 可选。用于创建到 AWS IoT Greengrass 服务的 HTTPS 连接的端口号。 有效值为 8443443。默认值为 8443。有关更多信息,请参阅通过端口 443 或网络代理进行连接
keepAlive 可选。MQTT KeepAlive 周期 (以秒为单位)。 有效范围在 30 到 1200 秒之间。默认值为 600
networkProxy 可选。一个对象,它定义要连接到的代理服务器。 可以是 HTTP 或 HTTPS 代理。有关更多信息,请参阅通过端口 443 或网络代理进行连接

runtime

字段 描述 备注
postStartHealthCheckTimeout 可选。Greengrass 守护程序在启动后等待运行状况检查完成的时间(以毫秒为单位)。 默认超时时间为 30 秒(30000 毫秒)。
cgroup
useSystemd 指示您的设备是否使用 systemd 有效值为 yesno。运行模块 1 中的 check_ggc_dependencies 脚本以查看您的设备是否使用 systemd

crypto

在 v1.7.0 中新增了 crypto 对象。它引入了一些属性,这些属性通过 PKCS # 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息,请参阅AWS IoT Greengrass 核心安全委托人硬件安全性集成将密钥部署到 AWS IoT Greengrass 核心。支持 HSM 上或文件系统中的私有密钥存储的配置。

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

注意

确保您的终端节点与证书类型对应

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅无线更新的配置支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT 发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果忽略此属性,AWS IoT Greengrass 会根据轮换设置对密钥进行轮换。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅将密钥部署到 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

此外,还支持以下配置属性:

字段 描述 备注

mqttMaxConnectionRetryInterval

可选。在 MQTT 连接断开时的最大连接重试间隔(以秒为单位)。

将该值指定为无符号整数。默认为 60

managedRespawn

可选。指示 OTA 代理在更新之前需要运行自定义代码。

有效值为 truefalse。有关更多信息,请参阅AWS IoT Greengrass 核心软件的 OTA 更新

writeDirectory

可选。AWS IoT Greengrass 在其中创建所有读写资源的写入目录。

有关更多信息,请参阅 为 AWS IoT Greengrass 配置写入目录

GGC v1.8
{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:aws:iot:区域:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.区域.amazonaws.com", "ggHost" : "greengrass-ats.iot.区域.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

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。

注意

确保您的终端节点与证书类型对应

certPath

核心设备证书相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
keyPath 核心私有密钥的相对于 /greengrass-root/certs 目录的路径。 与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
thingArn 表示 AWS IoT Greengrass Core设备的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 核心的该属性可在 AWS IoT Greengrass 控制台 中的 Cores (核心) 下方找到,通过运行 aws greengrass get-core-definition-version CLI 命令也可找到。
iotHost 您的 AWS IoT 终端节点。

该属性可在 AWS IoT 控制台 中的 Settings (设置) 下方找到,通过运行 aws iot describe-endpoint --endpoint-type iot:Data-ATS CLI 命令也可找到。

此命令将返回 Amazon Trust Services (ATS) 终端节点。有关更多信息,请参阅 AWS IoT 核心中的服务器身份验证文档。

ggHost 您的 AWS IoT Greengrass 终端节点。

这是您的 iotHost 终端节点,其主机前缀将替换为 greengrass(例如,greengrass-ats.iot.region.amazonaws.com)。使用与 iotHost 相同的 AWS 区域。

iotMqttPort 可选。MQTT 与 AWS IoT 进行通信时所使用的端口号。 有效值为 8883443。默认值为 8883。有关更多信息,请参阅通过端口 443 或网络代理进行连接
iotHttpPort 可选。用于创建到 AWS IoT 的 HTTPS 连接的端口号。 有效值为 8443443。默认值为 8443。有关更多信息,请参阅通过端口 443 或网络代理进行连接
ggHttpPort 可选。用于创建到 AWS IoT Greengrass 服务的 HTTPS 连接的端口号。 有效值为 8443443。默认值为 8443。有关更多信息,请参阅通过端口 443 或网络代理进行连接
keepAlive 可选。MQTT KeepAlive 周期 (以秒为单位)。 有效范围在 30 到 1200 秒之间。默认值为 600
networkProxy 可选。一个对象,它定义要连接到的代理服务器。 可以是 HTTP 或 HTTPS 代理。有关更多信息,请参阅通过端口 443 或网络代理进行连接

runtime

字段 描述 备注
cgroup
useSystemd 指示您的设备是否使用 systemd 有效值为 yesno。运行模块 1 中的 check_ggc_dependencies 脚本以查看您的设备是否使用 systemd

crypto

在 v1.7.0 中新增了 crypto 对象。它引入了一些属性,这些属性通过 PKCS # 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息,请参阅AWS IoT Greengrass 核心安全委托人硬件安全性集成将密钥部署到 AWS IoT Greengrass 核心。支持 HSM 上或文件系统中的私有密钥存储的配置。

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

注意

确保您的终端节点与证书类型对应

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅无线更新的配置支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT 发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果忽略此属性,AWS IoT Greengrass 会根据轮换设置对密钥进行轮换。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅将密钥部署到 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

此外,还支持以下配置属性:

字段 描述 备注

mqttMaxConnectionRetryInterval

可选。在 MQTT 连接断开时的最大连接重试间隔(以秒为单位)。

将该值指定为无符号整数。默认为 60

managedRespawn

可选。指示 OTA 代理在更新之前需要运行自定义代码。

有效值为 truefalse。有关更多信息,请参阅AWS IoT Greengrass 核心软件的 OTA 更新

writeDirectory

可选。AWS IoT Greengrass 在其中创建所有读写资源的写入目录。

有关更多信息,请参阅 为 AWS IoT Greengrass 配置写入目录

GGC v1.7
{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:aws-cn:iot:区域:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.区域.amazonaws.com", "ggHost" : "greengrass-ats.iot.区域.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

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。

注意

确保您的终端节点与证书类型对应

certPath

核心设备证书相对于 /greengrass-root/certs 目录的路径。

与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
keyPath 核心私有密钥的相对于 /greengrass-root/certs 目录的路径。 与 1.7.0 之前的版本的向后兼容性。此属性在 crypto 对象存在时被忽略。
thingArn 表示 AWS IoT Greengrass Core设备的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 核心的该属性可在 AWS IoT Greengrass 控制台 中的 Cores (核心) 下方找到,通过运行 aws greengrass get-core-definition-version CLI 命令也可找到。
iotHost 您的 AWS IoT 终端节点。

该属性可在 AWS IoT 控制台 中的 Settings (设置) 下方找到,通过运行 aws iot describe-endpoint --endpoint-type iot:Data-ATS CLI 命令也可找到。

此命令将返回 Amazon Trust Services (ATS) 终端节点。有关更多信息,请参阅 AWS IoT 核心中的服务器身份验证文档。

ggHost 您的 AWS IoT Greengrass 终端节点。

这是您的 iotHost 终端节点,其主机前缀将替换为 greengrass(例如,greengrass-ats.iot.region.amazonaws.com)。使用与 iotHost 相同的 AWS 区域。

iotMqttPort 可选。MQTT 与 AWS IoT 进行通信时所使用的端口号。 有效值为 8883443。默认值为 8883。有关更多信息,请参阅通过端口 443 或网络代理进行连接
keepAlive 可选。MQTT KeepAlive 周期 (以秒为单位)。 有效范围在 30 到 1200 秒之间。默认值为 600
networkProxy 可选。一个对象,它定义要连接到的代理服务器。 可以是 HTTP 或 HTTPS 代理。有关更多信息,请参阅通过端口 443 或网络代理进行连接

runtime

字段 描述 备注
cgroup
useSystemd 指示您的设备是否使用 systemd 有效值为 yesno。运行模块 1 中的 check_ggc_dependencies 脚本以查看您的设备是否使用 systemd

crypto

crypto 对象(在版本 1.7.0 中添加)引入了一些属性,这些属性通过 PKCS # 11 和本地密钥存储支持硬件安全模块 (HSM) 上的私有密钥存储。有关更多信息,请参阅 硬件安全性集成将密钥部署到 AWS IoT Greengrass 核心。支持 HSM 上或文件系统中的私有密钥存储的配置。

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

注意

确保您的终端节点与证书类型对应

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅无线更新的配置支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT 发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果忽略此属性,AWS IoT Greengrass 会根据轮换设置对密钥进行轮换。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅将密钥部署到 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

此外,还支持以下配置属性:

字段 描述 备注

mqttMaxConnectionRetryInterval

可选。在 MQTT 连接断开时的最大连接重试间隔(以秒为单位)。

将该值指定为无符号整数。默认为 60

managedRespawn

可选。指示 OTA 代理在更新之前需要运行自定义代码。

有效值为 truefalse。有关更多信息,请参阅AWS IoT Greengrass 核心软件的 OTA 更新

writeDirectory

可选。AWS IoT Greengrass 在其中创建所有读写资源的写入目录。

有关更多信息,请参阅 为 AWS IoT Greengrass 配置写入目录

GGC v1.6
{ "coreThing": { "caPath": "root-ca-pem", "certPath": "cloud-pem-crt", "keyPath": "cloud-pem-key", "thingArn": "arn:aws-cn:iot:区域:account-id:thing/core-thing-name", "iotHost": "host-prefix.iot.区域.amazonaws.com", "ggHost": "greengrass.iot.区域.amazonaws.com", "keepAlive": 600, "mqttMaxConnectionRetryInterval": 60 }, "runtime": { "cgroup": { "useSystemd": "yes|no" } }, "managedRespawn": true, "writeDirectory": "/write-directory" }

注意

如果使用 AWS IoT Greengrass 控制台中的 Easy group creation (简单组创建) 选项,则将 config.json 文件部署到处于工作状态的核心设备中,该文件指定了默认配置。

config.json 文件支持以下属性:

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 目录的路径。

将该文件保存在 /greengrass-root/certs 中。

certPath

AWS IoT Greengrass Core 证书相对于 /greengrass-root/certs 目录的路径。

将该文件保存在 /greengrass-root/certs 中。
keyPath AWS IoT Greengrass Core 私有密钥的相对于 /greengrass-root/certs 目录的路径。 将该文件保存在 /greengrass-root/certs 中。
thingArn 表示 AWS IoT Greengrass Core设备的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 核心的该属性可在 AWS IoT Greengrass 控制台 中的 Cores (核心) 下方找到,通过运行 aws greengrass get-core-definition-version CLI 命令也可找到。
iotHost 您的 AWS IoT 终端节点。 该属性可在 AWS IoT 控制台中的 Settings (设置) 下方找到,通过运行 aws iot describe-endpoint CLI 命令也可找到。
ggHost 您的 AWS IoT Greengrass 终端节点。 该值使用 greengrass.iot.region.amazonaws.com 格式。使用与 iotHost 相同的区域。
keepAlive MQTT KeepAlive 周期 (以秒为单位)。 这是可选值。默认为 600

mqttMaxConnectionRetryInterval

在 MQTT 连接断开时的最大连接重试间隔(以秒为单位)。

将该值指定为无符号整数。这是可选值。默认为 60

useSystemd 指示您的设备是否使用 systemd 有效值为 yesno。运行模块 1 中的 check_ggc_dependencies 脚本以查看您的设备是否使用 systemd

managedRespawn

一个可选的无线 (OTA) 更新功能,这指示 OTA 代理在更新之前需要运行自定义代码。

有效值为 truefalse。有关更多信息,请参阅AWS IoT Greengrass 核心软件的 OTA 更新

writeDirectory

AWS IoT Greengrass 在其中创建所有读写资源的写入目录。

这是可选值。有关更多信息,请参阅 为 AWS IoT Greengrass 配置写入目录

GGC v1.5.0
{ "coreThing": { "caPath": "root-ca-pem", "certPath": "cloud-pem-crt", "keyPath": "cloud-pem-key", "thingArn": "arn:aws-cn:iot:区域:account-id:thing/core-thing-name", "iotHost": "host-prefix.iot.区域.amazonaws.com", "ggHost": "greengrass.iot.区域.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes|no" } }, "managedRespawn": true }

config.json 文件位于 /greengrass-root/config 中并包含以下参数:

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。

certPath

AWS IoT Greengrass Core 证书相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。
keyPath AWS IoT Greengrass Core 私有密钥相对于 /greengrass-root/certs 文件夹的路径。 将此文件保存在 /greengrass-root/certs 文件夹下。
thingArn 表示 AWS IoT Greengrass Core设备的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 核心的该属性可在 AWS IoT Greengrass 控制台 中的 Cores (核心) 下方找到,通过运行 aws greengrass get-core-definition-version CLI 命令也可找到。
iotHost 您的 AWS IoT 终端节点。 该属性可在 AWS IoT 控制台中的 Settings (设置) 下方找到,通过运行 aws iot describe-endpoint 命令也可找到。
ggHost 您的 AWS IoT Greengrass 终端节点。 该值使用 greengrass.iot.region.amazonaws.com 格式。使用与 iotHost 相同的区域。
keepAlive MQTT KeepAlive 周期 (以秒为单位)。 这是可选值。默认值为 600 秒。
useSystemd 指示您的设备是否使用 systemd 有效值为 yesno。运行模块 1 中的 check_ggc_dependencies 脚本以查看您的设备是否使用 systemd

managedRespawn

一个可选的无线 (OTA) 更新功能,这指示 OTA 代理在更新之前需要运行自定义代码。

有关更多信息,请参阅 AWS IoT Greengrass 核心软件的 OTA 更新

GGC v1.3
{ "coreThing": { "caPath": "root-ca-pem", "certPath": "cloud-pem-crt", "keyPath": "cloud-pem-key", "thingArn": "arn:aws-cn:iot:区域:account-id:thing/core-thing-name", "iotHost": "host-prefix.iot.区域.amazonaws.com", "ggHost": "greengrass.iot.区域.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes|no" } }, "managedRespawn": true }

config.json 文件位于 /greengrass-root/config 中并包含以下参数:

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。

certPath

AWS IoT Greengrass Core 证书相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。
keyPath AWS IoT Greengrass Core 私有密钥相对于 /greengrass-root/certs 文件夹的路径。 将此文件保存在 /greengrass-root/certs 文件夹下。
thingArn 表示 AWS IoT Greengrass Core的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 您可以在 AWS IoT Greengrass 控制台 中您的 AWS IoT 事物的定义下方找到该值。
iotHost 您的 AWS IoT 终端节点。 您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值。
ggHost 您的 AWS IoT Greengrass 终端节点。 您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值,并且前面附加有 greengrass.
keepAlive MQTT KeepAlive 周期 (以秒为单位)。 这是可选值。默认值为 600 秒。
useSystemd 二进制标志 (如果您的设备使用了 systemd)。 值为 yesno。使用模块 1 中的依赖项脚本中可以查看您的设备是否使用了 systemd

managedRespawn

一个可选的无线 (OTA) 更新功能,这指示 OTA 代理在更新之前需要运行自定义代码。

有关更多信息,请参阅 AWS IoT Greengrass 核心软件的 OTA 更新

GGC v1.1
{ "coreThing": { "caPath": "root-ca-pem", "certPath": "cloud-pem-crt", "keyPath": "cloud-pem-key", "thingArn": "arn:aws-cn:iot:区域:account-id:thing/core-thing-name", "iotHost": "host-prefix.iot.区域.amazonaws.com", "ggHost": "greengrass.iot.区域.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes|no" } } }

config.json 文件位于 /greengrass-root/config 中并包含以下参数:

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。

certPath

AWS IoT Greengrass Core 证书相对于 /greengrass-root/certs 文件夹的路径。

将此文件保存在 /greengrass-root/certs 文件夹下。
keyPath AWS IoT Greengrass Core 私有密钥相对于 /greengrass-root/certs 文件夹的路径。 将此文件保存在 /greengrass-root/certs 文件夹下。
thingArn 表示 AWS IoT Greengrass Core的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 您可以在 AWS IoT Greengrass 控制台 中您的 AWS IoT 事物的定义下方找到该值。
iotHost 您的 AWS IoT 终端节点。 您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值。
ggHost 您的 AWS IoT Greengrass 终端节点。 您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值,并且前面附加有 greengrass.
keepAlive MQTT KeepAlive 周期 (以秒为单位)。 这是可选值。默认值为 600 秒。
useSystemd 二进制标志 (如果您的设备使用了 systemd)。 值为 yesno。使用模块 1 中的依赖项脚本中可以查看您的设备是否使用了 systemd
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-cn:iot:区域:account-id:thing/core-thing-name", "iotHost": "host-prefix.iot.区域.amazonaws.com", "ggHost": "greengrass.iot.区域.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes|no" } } }

config.json 文件位于 /greengrass-root/configuration 中并包含以下参数:

字段 描述 备注
caPath

AWS IoT 根 CA 的相对于 /greengrass-root/configuration/certs 文件夹的路径。

将此文件保存在 /greengrass-root/configuration/certs 文件夹下。

certPath

AWS IoT Greengrass Core 证书相对于 /greengrass-root/configuration/certs 文件夹的路径。

将此文件保存在 /greengrass-root/configuration/certs 文件夹下。
keyPath AWS IoT Greengrass Core 私有密钥相对于 /greengrass-root/configuration/certs 文件夹的路径。 将此文件保存在 /greengrass-root/configuration/certs 文件夹下。
thingArn 表示 AWS IoT Greengrass Core的 AWS IoT 事物的 Amazon 资源名称 (ARN)。 您可以在 AWS IoT Greengrass 控制台 中您的 AWS IoT 事物的定义下方找到该值。
iotHost 您的 AWS IoT 终端节点。 您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值。
ggHost 您的 AWS IoT Greengrass 终端节点。

您可以在 AWS IoT 控制台中的 Settings (设置) 下方找到该值,并且前面附加有 greengrass.

keepAlive MQTT KeepAlive 周期 (以秒为单位)。 这是可选值。默认值为 600 秒。
useSystemd 二进制标志 (如果您的设备使用了 systemd)。 值为 yesno。使用模块 1 中的依赖项脚本中可以查看您的设备是否使用了 systemd

终端节点必须与证书类型匹配

AWS IoT 和 AWS IoT Greengrass 终端节点必须与设备上的根 CA 证书的证书类型相对应。

如果您使用的是 Amazon Trust Services (ATS) 根 CA 证书(首选),则必须使用 ATS 终端节点。ATS 终端节点包括 ats 分段,如 AWS IoT 终端节点的以下语法所示。

prefix.ats.iot.区域.amazonaws.com.cn

在某些 AWS 区域中,AWS IoT Greengrass 目前还支持旧式 Verisign 终端节点和根 CA 证书,以实现向后兼容性。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 AWS IoT Greengrass

如果您使用的是旧版 Verisign 根 CA 证书,我们建议您创建 ATS 终端节点并改用 ATS 根 CA 证书。有关更多信息,请参阅 AWS IoT 开发人员指南 中的服务器身份验证。否则,请确保使用相应的旧终端节点。例如,以下语法用于旧 AWS IoT 终端节点:

prefix.iot.区域.amazonaws.com

注意

中国 区域不支持旧的终端节点。

如果终端节点和证书类型不匹配,则 AWS IoT 和 AWS IoT Greengrass 之间的身份验证尝试将失败。

config.json 中的终端节点

在 AWS IoT Greengrass Core 设备上的 config.json 文件中,在 coreThing 对象中指定 AWS IoT 和 AWS IoT Greengrass 终端节点。iotHost 属性表示 AWS IoT 终端节点。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 终端节点

可以通过适当的 --endpoint-type 参数运行 aws iot describe-endpoint CLI 命令来获取您的 AWS IoT 终端节点。

  • 要返回 ATS 签名的终端节点,请运行:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  • 要返回旧版 Verisign 签名的终端节点,请运行:

    aws iot describe-endpoint --endpoint-type iot:Data
AWS IoT Greengrass 终端节点

您的 AWS IoT Greengrass 终端节点是您的 iotHost 终端节点,其主机前缀将替换为 greengrass。例如,ATS 签名的终端节点是 greengrass-ats.iot.区域.amazonaws.com。这使用与 AWS IoT 终端节点相同的区域。

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

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

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

为了在此类情况下实现通信,AWS IoT Greengrass 允许以下配置:

  • 通过端口 443 进行 MQTT 通信及 TLS 客户端身份验证。如果网络允许连接到端口 443,则可以将核心配置为使用端口 443(而非默认端口 8883)进行 MQTT 通信。这可以是到端口 443 的直接连接,也可以是通过网络代理服务器的连接。

    AWS IoT Greengrass 使用应用层协议网络 (ALPN) TLS 扩展来启用该连接。与默认配置一样,端口 443 上的基于 TLS 的 MQTT 使用基于证书的客户端身份验证。

  • 通过端口 443 的 HTTPS 通信。AWS IoT Greengrass 默认情况下通过端口 8443 发送 HTTPS 通信,但您可以将其配置为使用端口 443。

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

    代理配置通过 http_proxyhttps_proxyno_proxy 环境变量传递给用户定义的 Lambda 函数。用户定义的 Lambda 函数必须使用这些传入的设置来通过代理进行连接。Lambda 函数用于建立连接的公用库(例如 boto3 或 cURL 和 python requests 程序包)通常默认使用这些环境变量。如果 Lambda 函数还指定了这些相同的环境变量,则 AWS IoT Greengrass 不会覆盖它们。

    重要

    配置为使用网络代理的 Greengrass 核心不支持 无线更新

通过端口 443 配置 MQTT

该功能需要使用 AWS IoT Greengrass 版本 1.7 or later。

该过程允许核心使用端口 443 进行 MQTT 消息收发。

  1. 运行以下命令以停止 AWS IoT Greengrass 守护程序:

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
  2. 打开 greengrass-root/config/config.json 以作为 su 用户进行编辑。

  3. 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 }, ... }
  4. 启动守护程序。

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

 

通过端口 443 配置 HTTPS

该功能需要使用 AWS IoT Greengrass 版本 1.8 or later。

该过程将核心配置为使用 443 进行 HTTPS 通信。

  1. 运行以下命令以停止 AWS IoT Greengrass 守护程序:

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
  2. 打开 greengrass-root/config/config.json 以作为 su 用户进行编辑。

  3. coreThing 对象中,添加 iotHttpPortggHttpPort 属性,如以下示例所示。

    { "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 }, ... }
  4. 启动守护程序。

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

 

配置网络代理

该功能需要使用 AWS IoT Greengrass 版本 1.7 or later。

该过程允许 AWS IoT Greengrass 通过 HTTP 或 HTTPS 网络代理连接到 Internet。

  1. 运行以下命令以停止 AWS IoT Greengrass 守护程序:

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
  2. 打开 greengrass-root/config/config.json 以作为 su 用户进行编辑。

  3. coreThing 对象中,添加 networkProxy 对象,如以下示例所示。

    { "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" } } }, ... }
  4. 启动守护程序。

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

networkProxy 对象

使用 networkProxy 对象指定有关网络代理的信息。此对象具有以下属性。

字段 描述
noProxyAddresses

可选。不使用代理的 IP 地址或主机名的逗号分隔列表。

proxy

要连接的代理。代理具有以下属性。

  • url。代理服务器的 URL,采用 scheme://userinfo@host:port 格式。

    • scheme。方案。必须为 httphttps

    • userinfo。可选。用户名和密码信息。如果指定,则忽略 usernamepassword 字段。

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

    • port。可选。端口号。如果未指定,将使用以下默认值:

      • http:80

      • https:443

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

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

将终端节点列入白名单

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

Endpoint 端口 描述
greengrass.区域.amazonaws.com 443

用于进行组管理的控制层面操作。

prefix-ats.iot.区域.amazonaws.com

prefix.iot.区域.amazonaws.com

MQTT:8883 或 443

HTTPS:8443 或 443

用于进行设备管理的数据层面操作,如影子同步。

将其中一个或这两个终端节点列入白名单,具体取决于您的核心和连接的设备是使用 Amazon Trust Services(首选)根 CA 证书,还是使用旧式根 CA 证书,或者是同时使用两者。有关更多信息,请参阅终端节点必须与证书类型匹配

greengrass-ats.iot.区域.amazonaws.com

greengrass.iot.区域.amazonaws.com

8443 或 443

用于设备发现操作。

将其中一个或这两个终端节点列入白名单,具体取决于您的核心和连接的设备是使用 Amazon Trust Services(首选)根 CA 证书,还是使用旧式根 CA 证书,或者是同时使用两者。有关更多信息,请参阅终端节点必须与证书类型匹配

注意

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

*.s3.amazonaws.com.cn 443

用于部署操作和无线更新。此格式包含 * 字符,因为终端节点前缀在内部控制,可能随时发生变化。

logs.区域.amazonaws.com 443

如果 Greengrass 组已配置为将日志写入 CloudWatch,则为必需。

为 AWS IoT Greengrass 配置写入目录

此功能适用于 AWS IoT Greengrass Core v1.6 及更高版本。

默认情况下,AWS IoT Greengrass 核心软件部署在单个根目录中,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.7/ | |-- 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
  2. 打开 greengrass-root/config/config.json 以作为 su 用户进行编辑。

  3. 添加 writeDirectory 以作为参数并指定目标目录路径,如以下示例所示。

    { "coreThing": { "caPath": "root-CA.pem", "certPath": "hash.pem.crt", ... }, ... "writeDirectory" : "/write-directory" }

    注意

    您可以按照所需的频率更新 writeDirectory 设置。在更新该设置后,AWS IoT Greengrass 在下次启动时使用新指定的写入目录,但不会从以前的写入目录中迁移内容。

  4. 现已配置您的写入目录,您可以选择将 greengrass-root 目录指定为只读目录。有关说明,请参阅将 Greengrass 根目录指定为只读目录

    否则,启动 AWS IoT Greengrass 守护程序:

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

 

将 Greengrass 根目录指定为只读目录

仅在要将 Greengrass 根目录指定为只读目录时执行这些步骤。在开始之前,必须配置写入目录。

  1. 授予对所需目录的访问权限:

    1. config.json 所有者授予读写权限。

      sudo chmod 0600 /greengrass-root/config/config.json
    2. 将 ggc_user 指定为 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.9.3/lambda/

      注意

      默认情况下,ggc_user 和 ggc_group 账户用于运行系统 Lambda 函数。如果您已配置组级别的默认访问身份来使用不同的账户,则应改为向该用户 (UID) 和组 (GID) 授予权限。

  2. 使用所需的方法将 greengrass-root 目录指定为只读目录。

    注意

    要将 greengrass-root 目录指定为只读目录,一种方法是以只读方式挂载该目录。不过,要将无线 (OTA) 更新应用于挂载的目录中的 AWS IoT Greengrass 核心软件,必须先卸载该目录,然后在更新后重新安装该目录。您可以将这些 umountmount 操作添加到 ota_pre_updateota_post_update 脚本中。有关 OTA 更新的更多信息,请参阅Greengrass OTA 更新代理使用托管的 Respawn 执行 AWS IoT Greengrass 核心更新

  3. 启动守护程序。

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

    如果未正确设置步骤 1 中的权限,则不会启动守护程序。

消息服务质量

在 AWS IoT Greengrass 环境中,本地设备、Lambda 函数、连接器和系统组件既可彼此通信,也可与云通信。所有通信都经过核心。发送到本地目标的消息使用的服务质量 (QoS) 级别与发送到云的消息不同。

  • 具有本地目标的消息使用 QoS 0. 核心会尝试向其目标发送消息一次。它不存储消息或确认交付。消息可置于组件之间的任何位置。

    注意

    虽然 Lambda 函数之间的直接通信不使用 MQTT 消息收发,但行为是相同的。

  • 具有云目标的消息使用 QoS 1。 核心将这些消息发送到后台处理程序系统组件,后者使用 QoS 1 将这些消息发送到云。这将允许后台处理程序管理 MQTT 消息队列。如果 AWS IoT 未确认消息传输,则稍后会尝试在后台处理消息(除非队列已满)。有关更多信息,请参阅MQTT 消息队列

    注意

    虽然 QoS 1 在内部用于管理队列,但消息发布者只能使用 QoS 0 发送 MQTT 消息。

MQTT 消息队列

发送到云目标的 MQTT 消息将排入队列以等待处理。排队的消息按照先进先出 (FIFO) 顺序进行处理。在处理消息并发布到云后,将从队列中删除消息。AWS IoT Greengrass 使用系统 GGCloudSpooler Lambda 函数管理队列。

配置 MQTT 消息队列

此功能适用于 AWS IoT Greengrass Core v1.6 及更高版本。

您可以配置 AWS IoT Greengrass 以在内存或本地存储缓存中存储未处理的消息。与内存中存储不同,本地存储缓存可以在核心重新启动时永久保存消息(例如,在组部署或设备重启后),因此,AWS IoT Greengrass 可以继续处理这些消息。您也可以配置存储大小。

注意

1.5.0 和更低版本使用内存中存储,并且队列大小为 2.5 MB。您无法为早期版本配置存储设置。

GGCloudSpooler Lambda 函数的以下环境变量用于定义存储设置。

  • GG_CONFIG_STORAGE_TYPE。消息队列位置。有效值有:

    • FileSystem。在本地存储缓存中存储未处理的消息。在核心重新启动时,将保留排队的消息以进行处理。在处理后,将删除消息。

    • Memory (默认值).在内存中存储未处理的消息。在核心重新启动时,排队的消息将丢失。

      该选项是针对具有受限硬件功能的设备优化的。在使用该配置时,我们建议您部署组或在服务中断最少的情况下重新启动设备。

  • GG_CONFIG_MAX_SIZE_BYTES。存储大小(以字节为单位)。该值可以是任何大于或等于 262144 (256 KB) 的非负整数;较小的大小将导致 AWS IoT Greengrass 核心软件无法启动。默认大小为 2.5 MB。在达到大小限制时,最早的排队消息将替换为新消息。

在本地存储中缓存消息

要配置 AWS IoT Greengrass 以将消息缓存到文件系统中,以便在核心重新启动时永久保存这些消息,您可以创建一个函数定义版本,GGCloudSpooler 函数在其中指定 FileSystem 存储类型。您必须使用 AWS IoT Greengrass API 配置本地存储缓存。您无法在控制台中执行该操作。

以下过程使用 create-function-definition-version CLI 命令配置后台处理程序,以便将排队的消息保存到文件系统中。它还配置 2.6 MB 队列大小。

注意

该过程假定您要更新现有组的最新组版本的配置。

  1. 获取目标 Greengrass 组和组版本的 ID。

    aws greengrass list-groups

    注意

    list-groups 命令一次只返回 50 个组。如果您有超过 50 个组,请指定 max-results 选项以及所需的结果数(例如 100)来查找您的组:

    aws greengrass list-groups --max-results 100

    注意

    在 AWS IoT 控制台 中,您还可以在组的设置页面上找到组 ID,并在部署页面上找到组版本 ID。

  2. 从输出中复制目标组的 IdLatestVersion 属性。

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • latest-group-version-id 替换为复制的 LatestVersion

    aws greengrass get-group-version \ --group-id group-id \ --group-version-id latest-group-version-id
  4. 从输出中的 Definition 对象复制 CoreDefinitionVersionArn 以及所有其他组组件(FunctionDefinitionVersionArn 除外)的 ARN。在创建新的组版本时,将使用这些值。

  5. 在输出的 FunctionDefinitionVersionArn 中,复制函数定义的 ID。该 ID 是 ARN 中的 functions 段后面的 GUID。

    注意

    您可以选择运行 create-function-definition 命令以创建一个函数定义,然后从输出中复制该 ID。

  6. 在函数定义中添加一个函数定义版本。

    • 使用为函数定义复制的 Id 替换 function-definition-id

    • arbitrary-function-id 替换为函数名称,如 spooler-function

    • 将要在该版本中包含的任何 Lambda 函数添加到 functions 数组中。您可以使用 get-function-definition-version 命令从现有的函数定义版本中获取 Greengrass Lambda 函数。

    警告

    确保为 GG_CONFIG_MAX_SIZE_BYTES 指定大于或等于 262144 的值。较小的大小将导致 AWS IoT Greengrass 核心软件无法启动。

    aws greengrass create-function-definition-version \ --function-definition-id function-definition-id \ --functions '[{"FunctionArn": "arn:aws-cn: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"}]'
  7. 从输出中复制函数定义版本的 Arn

  8. 创建一个包含系统 Lambda 函数的组版本。

    • group-id 替换为组的 Id

    • core-definition-version-arn 替换为从最新组版本中复制的 CoreDefinitionVersionArn

    • 使用为新函数定义版本复制的 Arn 替换 function-definition-version-arn

    • 替换从最新组版本中复制的其他组组件(例如 SubscriptionDefinitionVersionArnDeviceDefinitionVersionArn)的 ARN。

    • 删除任何未使用的参数。例如,如果组版本不包含任何资源,请删除 --resource-definition-version-arn

    aws greengrass create-group-version \ --group-id group-id \ --core-definition-version-arn core-definition-version-arn \ --function-definition-version-arn function-definition-version-arn \ --device-definition-version-arn device-definition-version-arn \ --logger-definition-version-arn logger-definition-version-arn \ --resource-definition-version-arn resource-definition-version-arn \ --subscription-definition-version-arn subscription-definition-version-arn
  9. 从输出中复制 Version。这是新组版本的 ID。

  10. 部署组。

    • 使用为组复制的 Id 替换 group-id

    • 使用为新组版本复制的 Version 替换 group-version-id

    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 替换或删除该函数)。

与 AWS IoT 的 MQTT 连接的客户端 ID

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

AWS IoT Greengrass Core 与 AWS IoT 建立 MQTT 连接,以便执行影子同步和证书管理等此类操作。对于这些连接,核心基于核心事物名称生成可预测的客户端 ID。可预测客户端 ID 可用于监控、审计和定价功能,包括 AWS IoT Device Defender 和 AWS IoT 生命周期事件。您还可以围绕可预测的客户端 ID 创建逻辑(例如,基于证书属性的订阅策略模板)。

GGC v1.9GGC v1.8
GGC v1.9

两个 Greengrass 系统组件可以与 AWS IoT 建立 MQTT 连接。这些组件使用以下模式来生成连接的客户端 ID。

操作 客户端 ID 模式
部署

core-thing-name

示例:MyCoreThing

将此客户端 ID 用于连接、断开连接、订阅和取消订阅生命周期事件通知。

MQTT 与 AWS IoT 的消息交换

core-thing-name-cnn

示例:MyCoreThing-c01

nn 是一个从 00 开始的整数,随每个新连接递增,最大为 05。连接的数量由组中与 AWS IoT 同步其影子状态的设备的数量(每组最大数量为 200)以及组中使用 cloud 作为其源的订阅的数量(每组最大数量为 50)来决定。

后台处理程序系统组件与 AWS IoT 建立连接以便云源或目标交换订阅消息。后台处理程序还充当在 AWS IoT 与本地影子服务和设备证书管理器之间交换消息的代理。

GGC v1.8

几个 Greengrass 系统组件可以与 AWS IoT 建立 MQTT 连接。这些组件使用以下模式来生成连接的客户端 ID。

操作 客户端 ID 模式
部署

core-thing-name

示例:MyCoreThing

将此客户端 ID 用于连接、断开连接、订阅和取消订阅生命周期事件通知。

MQTT 与 AWS IoT 的消息交换

core-thing-name-spr

示例:MyCoreThing-spr

影子同步

core-thing-name-snn

示例:MyCoreThing-s01

nn 是一个从 00 开始的整数,随每个新连接递增,最大为 03。连接数由与 AWS IoT 同步影子状态的设备数量(每个组最多 200 个设备)确定(每个连接最大 50 个订阅)。

设备证书管理

core-thing-name-dcm

示例:MyCoreThing-dcm

注意

同时连接中的重复客户端 ID 可能会导致无限的连接-断开循环。如果另一个设备硬编码为使用核心设备名称作为连接中的客户端 ID,则可能发生这种情况。有关更多信息,请参阅此问题排查步骤

Greengrass 设备也与 AWS IoT 设备管理 的队列索引服务完全集成。这允许您根据云中的设备属性、阴影状态和连接状态来为设备建立索引和搜索设备。例如,Greengrass 设备至少建立一个使用事物名称作为客户端 ID 的连接,因此,您可以使用设备连接索引来发现哪些 Greengrass 设备当前已与 AWS IoT 连接或断开连接。有关更多信息,请参阅 AWS IoT 开发人员指南 中的队列索引服务

激活自动 IP 检测

您可以将 AWS IoT Greengrass 配置为使用 IPDetector 系统 Lambda 函数启用 AWS IoT Greengrass Core 的自动发现。此功能也可以在首次从控制台中部署组时,或者随时从控制台中的组设置页面上通过选择 Automatic detection 启用。

以下过程使用 create-function-definition-version CLI 命令配置 Greengrass 核心的自动发现。

注意

该过程假定您要更新现有组的最新组版本的配置。

  1. 获取目标 Greengrass 组和组版本的 ID。

    aws greengrass list-groups

    注意

    list-groups 命令一次只返回 50 个组。如果您有超过 50 个组,请指定 max-results 选项以及所需的结果数(例如 100)来查找您的组:

    aws greengrass list-groups --max-results 100

    注意

    在 AWS IoT 控制台 中,您还可以在组的设置页面上找到组 ID,并在部署页面上找到组版本 ID。

  2. 从输出中复制目标组的 IdLatestVersion 属性。

  3. 获取最新的组版本。

    • group-id 替换为复制的 Id

    • latest-group-version-id 替换为复制的 LatestVersion

    aws greengrass get-group-version \ --group-id group-id \ --group-version-id latest-group-version-id
  4. 从输出中的 Definition 对象复制 CoreDefinitionVersionArn 以及所有其他组组件(FunctionDefinitionVersionArn 除外)的 ARN。在创建新的组版本时,将使用这些值。

  5. 从输出中的 FunctionDefinitionVersionArn,复制函数定义的 ID 和函数定义版本:

    arn:aws-cn:greengrass:region:account-id:/greengrass/groups/function-definition-id/versions/function-definition-version-id

    注意

    您可以选择运行 create-function-definition 命令以创建一个函数定义,然后从输出中复制该 ID。

  6. 使用 get-function-definition-version 命令可获取当前定义状态。使用您为函数定义复制的 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

    记下列出的函数配置。您需要在创建新的函数定义版本时包含这些内容,以防止丢失当前的定义设置。

  7. 在函数定义中添加一个函数定义版本。

    • 使用为函数定义复制的 Id 替换 function-definition-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
  8. 从输出中复制函数定义版本的 Arn

  9. 创建一个包含系统 Lambda 函数的组版本。

    • group-id 替换为组的 Id

    • core-definition-version-arn 替换为从最新组版本中复制的 CoreDefinitionVersionArn

    • 使用为新函数定义版本复制的 Arn 替换 function-definition-version-arn

    • 替换从最新组版本中复制的其他组组件(例如 SubscriptionDefinitionVersionArnDeviceDefinitionVersionArn)的 ARN。

    • 删除任何未使用的参数。例如,如果组版本不包含任何资源,请删除 --resource-definition-version-arn

    aws greengrass create-group-version \ --group-id group-id \ --core-definition-version-arn core-definition-version-arn \ --function-definition-version-arn function-definition-version-arn \ --device-definition-version-arn device-definition-version-arn \ --logger-definition-version-arn logger-definition-version-arn \ --resource-definition-version-arn resource-definition-version-arn \ --subscription-definition-version-arn subscription-definition-version-arn
  10. 从输出中复制 Version。这是新组版本的 ID。

  11. 部署组。

    • 使用为组复制的 Id 替换 group-id

    • 使用为新组版本复制的 Version 替换 group-version-id

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

如果要手动输入 AWS IoT Greengrass Core 的 IP 地址,可以使用另外的不包含 IPDetector 函数的函数定义来完成本教程。这将阻止检测函数定位并自动输入您的 AWS IoT Greengrass Core IP 地址。

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

配置初始化系统以启动 Greengrass 守护程序

最佳做法是,将初始化系统设置为在引导期间启动 Greengrass 守护程序,尤其是在管理大量设备时。

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

注意

要查看您的设备是否使用 systemd,请按照模块 1 中所述运行 check_ggc_dependencies 脚本。然后,要使用 systemd,请确保将 config.json 中的 useSystemd 参数设置为 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

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

将 AWS IoT Greengrass 核心软件安装存档

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

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

  1. 下载您要升级到的 AWS IoT Greengrass 核心软件安装程序包。

  2. 将此程序包复制到目标核心设备。有关描述如何传输文件的说明,请参阅此步骤

    注意

    稍后,您将当前的证书、密钥和配置文件复制到新的安装。

    在核心设备终端中,在以下步骤中运行命令。

  3. 确保 Greengrass 守护进程在您的核心设备上停止。

    1. 要检查守护程序是否正在运行,请执行以下操作:

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

      如果输出包含 root/greengrass/ggc/packages/ggc-version/bin/daemon 条目,则表示守护程序正在运行。

      注意

      编写此过程的前提是 AWS IoT Greengrass 核心软件已安装在 /greengrass 目录中。

    2. 停止守护程序:

      cd /greengrass/ggc/core/ sudo ./greengrassd stop
  4. 将当前 Greengrass 根目录移至其他目录。

    sudo mv /greengrass /greengrass_backup
  5. 将新的软件解压缩到核心设备上。替换命令中的 os-architectureversion 占位符。

    sudo tar –zxvf greengrass-os-architecture-version.tar.gz –C /
  6. 将存档的证书、密钥和配置文件复制到新的安装。

    sudo cp /greengrass_backup/certs/* /greengrass/certs sudo cp /greengrass_backup/config/* /greengrass/config
  7. 启动守护程序:

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

现在,您可以进行一个组部署来测试新的安装。如果出现故障,您可以还原已存档的安装。

还原已存档的安装

  1. 停止守护程序。

  2. 删除新的 /greengrass 目录。

  3. /greengrass_backup 目录移回 /greengrass

  4. 启动守护程序。

另请参阅