通过 AWS IoT 实例集预置安装 AWS IoT Greengrass Core 软件
此功能适用于 Greengrass Nucleus 组件的 v2.4.0 及更高版本。
借助 AWS IoT 实例集预置,您可以配置 AWS IoT,以便在设备首次连接到 AWS IoT 时生成 X.509 设备证书和私钥,并将它们安全地交付到设备。AWS IoT 提供由 Amazon 根证书颁发机构(CA)签发的客户端证书。您还可以配置 AWS IoT,为您使用实例集预置进行预置的 Greengrass 核心设备指定事物组、事物类型和权限。您可以定义预置模板,以定义 AWS IoT 如何预置每台设备。预置模板指定在预置时要为设备创建的事物、策略和证书资源。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置模板。
AWS IoT Greengrass 提供 AWS IoT 实例集预置插件,借此您可以使用由 AWS IoT 实例集预置创建的 AWS 资源来安装 AWS IoT Greengrass Core 软件。实例集预置插件使用通过声明进行预置。设备使用预置声明证书和私钥来获取可用于常规操作的唯一 X.509 设备证书和私钥。在制造过程中,您可以将声明证书和私钥嵌入每台设备,这样您的客户便可以在每台设备联机后激活设备。您可以为多台设备使用相同的声明证书和私钥。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的通过声明进行预置。
注意
实例集预置插件目前不支持在硬件安全模块(HSM)中存储私钥和证书文件。要使用 HSM,请使用手动预置来安装 AWS IoT Greengrass Core 软件。
要使用 AWS IoT 实例集预置安装 AWS IoT Greengrass Core 软件,您必须在 AWS IoT 用于预置 Greengrass 核心设备的 AWS 账户中设置资源。这些资源包括预置模板、声明证书和令牌交换 IAM 角色。创建这些资源后,您可以重复使用资源来预置实例集中的多个核心设备。有关更多信息,请参阅 为 Greengrass 核心设备设置 AWS IoT 实例集预置。
重要
在下载 AWS IoT Greengrass Core 软件之前,请检查您的核心设备是否满足安装和运行 AWS IoT Greengrass Core 软件 v2.0 的要求。
主题
先决条件
要使用 AWS IoT 实例集预置安装 AWS IoT Greengrass Core 软件,您必须先为 Greengrass 核心设备设置 AWS IoT 实例集预置。完成这些步骤后,您可以使用实例集预置在任意数量的设备上安装 AWS IoT Greengrass Core 软件。
检索 AWS IoT 端点
获取您的 AWS 账户的 AWS IoT 端点,然后将其保存以备后用。您的设备使用这些端点来连接 AWS IoT。执行以下操作:
-
获取您的 AWS 账户的 AWS IoT 数据端点。
aws iot describe-endpoint --endpoint-type iot:Data-ATS
如果请求成功,响应类似如下示例。
{ "endpointAddress": "
device-data-prefix
-ats.iot.us-west-2.amazonaws.com" } -
获取您的 AWS 账户的 AWS IoT 凭证端点。
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
如果请求成功,响应类似如下示例。
{ "endpointAddress": "
device-credentials-prefix
.credentials.iot.us-west-2.amazonaws.com" }
将证书下载到设备
设备使用声明证书和私钥来对其请求进行身份验证,以预置 AWS 资源并获取 X.509 设备证书。您可以在制造过程中将声明证书和私钥嵌入设备中,也可以在安装过程中将证书和密钥复制到设备。在本节中,您需将声明证书和私有密钥复制到设备。您还需将 Amazon 根证书颁发机构(CA)证书下载到设备。
重要
预置声明私钥应始终得到保护,包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控滥用迹象,例如未经授权就使用声明证书来预置设备。如果您检测到滥用,请禁用预置声明证书,以使其不能用于设备预置。有关更多信息,请参阅 AWS IoT Core 开发人员指南 中的 监控AWS IoT。
为帮助您更好地管理设备数量以及 AWS 账户中自行注册的设备,您可以在创建实例集预置模板时指定预置前钩子。预置前钩子是一种 AWS Lambda 函数,用于验证设备在注册期间提供的模板参数。例如,您可以创建一个预置前钩子,根据数据库检查设备 ID,以验证设备是否有权进行预置。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的预置前钩子。
将声明证书下载到设备
-
将声明证书和私钥复制到设备。如果在开发计算机和设备上启用了 SSH 和 SCP,则可以在开发计算机上使用
scp
命令传输声明证书和私钥。以下示例命令会将开发计算机上名为claim-certs
的文件夹中的这些文件传输到设备。将device-ip-address
替换为您设备的 IP 地址。scp -r claim-certs/
device-ip-address
:~ -
在设备上创建 Greengrass 根文件夹。稍后,您需将 AWS IoT Greengrass Core 软件安装到此文件夹。
注意
Windows 的路径长度限制为 260 个字符。如果您使用的是 Windows,请使用
C:\greengrass\v2
或D:\greengrass\v2
等根文件夹,将 Greengrass 组件的路径保持在 260 个字符的限制以下。 -
(仅限 Linux)设置 Greengrass 根文件夹的父文件夹的权限。
-
将
/greengrass
替换为根文件夹的父文件夹。
sudo chmod 755
/greengrass
-
-
将声明证书移动到 Greengrass 根文件夹。
-
将
或/greengrass/v2
C:\greengrass\v2
替换为 Greengrass 根文件夹。
-
-
下载 Amazon 根证书颁发机构(CA)证书。默认情况下,AWS IoT 证书与 Amazon 的根 CA 证书关联。
设置设备环境
按照本节中的步骤,将 Linux 或 Windows 设备设置为您的 AWS IoT Greengrass 核心设备。
设置 Linux 设备
设置适用于 AWS IoT Greengrass V2 的 Linux 设备
-
安装 AWS IoT Greengrass Core 软件运行所需的 Java 运行时。我们建议您使用 Amazon Corretto
或 OpenJDK 长期支持版本。需要版本 8 或更高版本。以下命令向您展示如何在您的设备上安装 OpenJDK。 -
对于基于 Debian 或基于 Ubuntua 的发行版:
sudo apt install default-jdk
-
对于基于 Red Hat 的发行版:
sudo yum install java-11-openjdk-devel
-
对于 Amazon Linux 2:
sudo amazon-linux-extras install java-openjdk11
-
对于 Amazon Linux 2023:
sudo dnf install java-11-amazon-corretto -y
安装完成后,运行以下命令以验证 Java 是否在您的 Linux 设备上运行。
java -version
此命令会打印设备上运行的 Java 版本。例如,在基于 Debian 的发行版上,输出可能与以下示例类似。
openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
-
-
(可选)创建在设备上运行组件的默认系统用户和组。您也可以选择让 AWS IoT Greengrass Core 软件安装程序在安装过程中使用
--component-default-user
安装程序参数创建此用户和组。有关更多信息,请参阅 安装程序参数。sudo useradd --system --create-home ggc_user sudo groupadd --system ggc_group
-
验证运行 AWS IoT Greengrass Core 软件的用户(通常是
root
)是否有权与任何用户和任何组一起运行sudo
。-
运行以下命令以打开
/etc/sudoers
文件。sudo visudo
-
验证用户的权限是否如以下示例所示。
root ALL=(ALL:ALL) ALL
-
-
(可选)要运行容器化 Lambda 函数,必须启用 cgroups
v1,且必须启用并装载内存和设备 cgroups。如果您不打算运行容器化 Lambda 函数,则可跳过此步骤。 要启用这些 cgroups 选项,请使用以下 Linux 内核参数启动设备。
cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
有关查看和设置设备内核参数的信息,请参阅适用于您操作系统和启动加载程序的文档。按照说明永久设置内核参数。
-
按照 设备要求 中的要求列表所示,在您的设备上安装所有其他必需的依赖关系。
设置 Windows 设备
注意
此功能适用于 Greengrass Nucleus 组件 v2.5.0 及更高版本。
设置适用于 AWS IoT Greengrass V2 的 Windows 设备
-
安装 AWS IoT Greengrass Core 软件运行所需的 Java 运行时。我们建议您使用 Amazon Corretto
或 OpenJDK 长期支持版本。需要版本 8 或更高版本。 -
检查在 PATH
系统变量上是否有 Java 可用,如果没有,请进行添加。LocalSystem 账户运行 AWS IoT Greengrass Core 软件,因此必须将 Java 添加到 PATH 系统变量中,而不是用户的 PATH 用户变量。执行以下操作: -
按下 Windows 键打开开始菜单。
-
键入
environment variables
以从开始菜单中搜索系统选项。 -
在开始菜单搜索结果中,选择编辑系统环境变量,以打开系统属性窗口。
-
选择环境变量...,打开环境变量窗口。
-
在系统变量下,选择路径,然后选择编辑。在编辑环境变量窗口中,您可以分行查看每个路径。
-
检查 Java 安装的
bin
文件夹的路径是否存在。路径可能与以下示例类似。C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
-
如果路径中缺少 Java 安装的
bin
文件夹,请选择新建,添加该文件夹,然后选择确定。
-
-
以管理员身份打开 Windows 命令提示符 (
cmd.exe
)。 -
在 Windows 设备上的 LocalSystem 账户中创建默认用户。然后,将
password
替换为安全密码。net user /add ggc_user
password
提示
根据您的 Windows 配置,用户密码可能会设置为在将来某个日期过期。为确保您的 Greengrass 应用程序继续运行,请跟踪密码过期时间,并在密码过期之前对其进行更新。您还可以将用户的密码设置为永不过期。
-
要检查用户及其密码的过期时间,请运行以下命令。
net user
ggc_user
| findstr /C:expires -
要将用户密码设置为永不过期,请运行以下命令。
wmic UserAccount where "Name='
ggc_user
'" set PasswordExpires=False -
如果您使用的是已弃用
wmic
命令的 Windows 10 或更高版本,请运行以下 PowerShell 命令。 Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = '
ggc_user
'" | Set-CimInstance -Property @{PasswordExpires="False"}
-
-
在设备上下载并安装 Microsoft 的 PsExec 实用程序
。 -
使用 PsExec 实用程序将默认用户的用户名和密码存储在 LocalSystem 账户的 Credential Manager 实例中。将
password
替换为您之前设置的用户密码。psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:
password
如果系统打开 PsExec License Agreement,请选择 Accept 以同意许可并运行命令。
注意
在 Windows 设备上,LocalSystem 账户运行 Greengrass Nucleus,而您必须使用 PsExec 实用程序将默认用户信息存储在 LocalSystem 账户中。使用 Credential Manager 应用程序将此信息存储在当前登录用户的 Windows 账户中,而不是 LocalSystem 账户中。
下载 AWS IoT Greengrass Core 软件
您可以从以下位置下载最新版 AWS IoT Greengrass Core 软件:
注意
您可以从以下位置下载特定版本的 AWS IoT Greengrass Core 软件。将 version
替换为要下载的版本。
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-
version
.zip
下载 AWS IoT Greengrass Core 软件
-
在您的核心设备上,将 AWS IoT Greengrass Core 软件下载到名为
greengrass-nucleus-latest.zip
的文件中。下载此软件即表示您同意Greengrass Core 软件许可协议
。 -
(可选)验证 Greengrass Nucleus 软件签名
注意
此功能适用于 Greengrass Nucleus 版本 2.9.5 及更高版本。
-
使用以下命令验证您 Greengrass Nucleus 构件的签名:
-
jarsigner
调用会生成输出,指示验证结果。-
如果 Greengrass Nucleus ZIP 文件已签署,则输出将包含以下语句:
jar verified.
-
如果 Greengrass Nucleus ZIP 文件未签署,则输出将包含以下语句:
jar is unsigned.
-
-
如果您提供了 Jarsigner
-certs
选项以及-verify
和-verbose
选项,则输出还将包含详细的签名者证书信息。
-
-
将 AWS IoT Greengrass Core 软件解压缩到设备上的某个文件夹中。将
GreengrassInstaller
替换为您要使用的文件夹。 -
(可选)运行以下命令以查看 AWS IoT Greengrass Core 软件的版本。
java -jar ./
GreengrassInstaller
/lib/Greengrass.jar --version
重要
如果您安装的 Greengrass Nucleus 版本低于 v2.4.0,则在安装 AWS IoT Greengrass Core 软件后请勿删除此文件夹。AWS IoT Greengrass Core 软件需要使用此文件夹中的文件来运行。
如果您下载的是最新版本的软件,则需要安装 v2.4.0 或更高版本,并且可以在安装 AWS IoT Greengrass Core 软件后移除此文件夹。
下载 AWS IoT 实例集预置插件
您可以从以下位置下载最新版本的 AWS IoT 实例集预置插件:
注意
您可以从以下位置下载特定版本的 AWS IoT 实例集预置插件。将 version
替换为要下载的版本。有关各版本实例集预置插件的更多信息,请参阅 AWS IoT 实例集预置插件更改日志。
https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-
version
.jar
实例集预置插件是开源插件。要查看其源代码,请参阅 GitHub 上的 AWS IoT 实例集预置插件
下载 AWS IoT 实例集预置插件
-
在设备上,将 AWS IoT 实例集预置插件下载到名为
aws.greengrass.FleetProvisioningByClaim.jar
的文件中。将GreengrassInstaller
替换为您要使用的文件夹。下载此软件即表示您同意Greengrass Core 软件许可协议
。
安装 AWS IoT Greengrass Core 软件
使用可指定以下操作的参数运行安装程序:
-
从部分配置文件进行安装,该文件指定使用实例集预置插件来预置 AWS 资源。AWS IoT Greengrass Core 软件使用一个配置文件,该文件指定设备上每个 Greengrass 组件的配置。安装程序会根据您提供的部分配置文件,以及实例集预置插件创建的 AWS 资源来创建完整的配置文件。
-
指定使用
ggc_user
系统用户在核心设备上运行软件组件。在 Linux 设备上,此命令还指定使用ggc_group
系统组,安装程序会为您创建系统用户和组。 -
将 AWS IoT Greengrass Core 软件设置为启动时运行的系统服务。在 Linux 设备上,这需要 Systemd
初始化系统。 重要
在 Windows 核心设备上,必须将 AWS IoT Greengrass Core 软件设置为系统服务。
有关您可以指定的参数的更多信息,请参阅安装程序参数。
注意
如果您在内存有限的设备上运行 AWS IoT Greengrass,则可以控制 AWS IoT Greengrass Core 软件使用的内存量。要控制内存分配,您可以在 Nucleus 组件的 jvmOptions
配置参数中设置 JVM 堆大小选项。有关更多信息,请参阅 使用 JVM 选项控制内存分配。
安装 AWS IoT Greengrass Core 软件
-
检查 AWS IoT Greengrass Core 软件的版本。
-
将
GreengrassInstaller
替换为包含该软件的文件夹的路径。
java -jar ./
GreengrassInstaller
/lib/Greengrass.jar --version -
-
使用文本编辑器创建名为
config.yaml
的配置文件,以提供给安装程序。例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建该文件。
nano
GreengrassInstaller
/config.yaml将以下 YAML 内容复制到该文件中。此部分配置文件会指定实例集预置插件的参数。有关可以指定的选项的更多信息,请参阅配置 AWS IoT 实例集预置插件。
然后执行以下操作:
-
将
2.13.0
替换为 AWS IoT Greengrass Core 软件版本。 -
将每个
或/greengrass/v2
C:\greengrass\v2
实例替换为 Greengrass 根文件夹。注意
在 Windows 设备上,您必须将路径分隔符指定为双反斜杠 (
\\
),例如C:\\greengrass\\v2
。 -
将
us-west-2
替换为您在其中创建预置模板和其他资源的 AWS 区域。 -
将
iotDataEndpoint
替换为您的 AWS IoT 数据端点。 -
将
iotCredentialEndpoint
替换为您的 AWS IoT 凭证端点。 -
将
GreengrassCoreTokenExchangeRoleAlias
替换为令牌交换角色别名的名称。 -
将
GreengrassFleetProvisioningTemplate
替换为实例集预置模板的名称。 -
将
claimCertificatePath
替换为设备上声明证书的路径。 -
将
claimCertificatePrivateKeyPath
替换为设备上声明证书私钥的路径。 -
将模板参数(
templateParameters
)替换为用于预置设备的值。此示例参考用于定义ThingName
和ThingGroupName
参数的示例模板。
注意
在此配置文件中,您可以自定义其他配置选项(例如要使用的端口和网络代理),如以下示例所示。有关更多信息,请参阅 Greengrass Nucleus 配置。
要使用 HTTPS 代理,您必须使用 1.1.0 版本或更高版本的实例集预置插件。您还必须在
system
下指定rootCaPath
,如以下示例所示。 -
-
运行安装程序。指定
--trusted-plugin
来提供实例集预置插件,并指定--init-config
来提供配置文件。-
将
替换为 Greengrass 根文件夹。/greengrass/v2
-
将每个
GreengrassInstaller
实例替换为安装程序解压到的文件夹。
重要
在 Windows 核心设备上,您必须指定
--setup-system-service true
将 AWS IoT Greengrass Core 软件设置为系统服务。如果指定
--setup-system-service true
,则安装程序会在将软件设置为系统服务并运行后打印Successfully set up Nucleus as a system service
。否则,如果安装程序成功安装软件,则不会输出任何消息。注意
在没有
deploy-dev-tools
参数的情况下运行安装程序时,您不能使用--provision true
参数来部署本地开发工具。有关直接在您的设备上部署 Greengrass CLI 的信息,请参阅 Greengrass 命令行界面。 -
-
通过查看根文件夹中的文件来验证安装情况。
如果安装成功,则根文件夹中包含多个文件夹,例如
config
、packages
和logs
。
如果您将 AWS IoT Greengrass Core 软件作为系统服务安装,则安装程序会为您运行该软件。否则,您必须手动运行该软件。有关更多信息,请参阅 运行 AWS IoT Greengrass Core 软件。
有关如何配置及使用软件和 AWS IoT Greengrass 的更多信息,请参阅以下内容: