安装 AWS IoT Greengrass Core 软件 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

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

安装 AWS IoT Greengrass Core 软件

AWS IoT Greengrass Core 软件将 AWS 功能扩展到 AWS IoT Greengrass 核心设备,使本地设备可以在本地操作它们生成的数据。

AWS IoT Greengrass 提供了多种选项用于安装 AWS IoT Greengrass Core 软件:

AWS IoT Greengrass 还提供了运行 AWS IoT Greengrass Core 软件的容器化环境。

 

下载并解压缩 AWS IoT Greengrass Core 软件包

选择适用于您的平台的 AWS IoT Greengrass Core 软件,下载 tar.gz 格式的文件并在设备上解压缩。您可以下载软件的最新版本。有关更多信息,请参阅 AWS IoT Greengrass Core 软件

 

运行 Greengrass 设备设置脚本

运行 Greengrass 设备设置以配置您的设备,安装最新的 AWS IoT Greengrass Core 软件版本,然后部署 Hello World Lambda 函数,几分钟就可以完成。有关更多信息,请参阅 快速入门:Greengrass 设备安装程序

 

从 APT 存储库安装 AWS IoT Greengrass Core 软件

重要

自 2022 年 2 月 11 日起,您无法再从 APT 存储库安装或更新 AWS IoT Greengrass Core 软件。如果设备上已添添加 AWS IoT Greengrass 存储库,您必须从来源列表中移除存储库。从 APT 存储库运行该软件的设备将继续正常运转。我们建议您使用 tar 文件来更新 AWS IoT Greengrass Core 软件。

由 AWS IoT Greengrass 提供的 APT 存储库包括以下软件包:

  • aws-iot-greengrass-core. 安装 AWS IoT Greengrass Core 软件。

  • aws-iot-greengrass-keyring. 安装用于对 AWS IoT Greengrass 软件包存储库签名的 GnuPG (GPG) 密钥。

    下载此软件即表示您同意Greengrass Core 软件许可协议

使用 systemd 脚本管理 Greengrass 守护程序生命周期

aws-iot-greengrass-core 软件包还会安装可用于管理 AWS IoT Greengrass Core 软件(守护程序)生命周期的 systemd 脚本。

  • 要在引导过程中启动 Greengrass 守护程序,请执行以下操作:

    systemctl enable greengrass.service
  • 要启动 Greengrass 守护程序,请执行以下操作:

    systemctl start greengrass.service
  • 要停止 Greengrass 守护程序,请执行以下操作。

    systemctl stop greengrass.service
  • 要检查 Greengrass 守护程序的状态,请执行以下操作:

    systemctl status greengrass.service

使用 APT 存储库卸载 AWS IoT Greengrass Core 软件

在卸载 AWS IoT Greengrass Core 软件时,您可以选择是要保留还是删除 AWS IoT Greengrass Core 软件的配置信息,例如设备证书、组信息和日志文件。

卸载 AWS IoT Greengrass Core 软件并保留配置信息
  • 运行以下命令,以删除 AWS IoT Greengrass Core 软件包并将配置信息保留在 /greengrass 文件夹中。

    sudo apt remove aws-iot-greengrass-core aws-iot-greengrass-keyring
卸载 AWS IoT Greengrass Core 软件并删除配置信息
  1. 运行以下命令,以删除 AWS IoT Greengrass Core 软件包并从 /greengrass folder 中删除配置信息。

    sudo apt purge aws-iot-greengrass-core aws-iot-greengrass-keyring
  2. 从来源列表中删除 AWS IoT Greengrass Core 软件存储库。有关更多信息,请参阅 删除 AWS IoT Greengrass Core 软件存储库来源

删除 AWS IoT Greengrass Core 软件存储库来源

不再需要从 APT 存储库安装或更新 AWS IoT Greengrass Core 软件时,您可以删除 AWS IoT Greengrass Core 软件存储库来源。2022 年 2 月 11 日之后,您必须将存储库从来源列表中移除,以免在运行 apt update 时出错。

从来源列表中删除 APT 存储库
  • 运行以下命令,以从来源列表中删除 AWS IoT Greengrass Core 软件存储库。

    sudo rm /etc/apt/sources.list.d/greengrass.list sudo apt update

在 Docker 容器中运行 AWS IoT Greengrass

AWS IoT Greengrass 提供 Dockerfile 和 Docker 映像,使您能够更轻松地在 Docker 容器中运行 AWS IoT Greengrass Core 软件。有关更多信息,请参阅 AWS IoT Greengrass Docker 软件

注意

还可以在 Greengrass 核心设备上运行 Docker 应用程序。为此,应使用 Greengrass Docker 应用程序部署连接器

 

在 Snap 中运行 AWS IoT Greengrass

AWS IoT Greengrass Snap 1.11.x 使您能够在容器化环境中通过便捷的软件包以及所有必要的依赖项运行有限版本的 AWS IoT Greengrass。

AWS IoT Greengrass 将于 2023 年 12 月 31 日结束对 AWS IoT Greengrass Core 软件版本 1.11.x Snap 的维护,这一消息已经发布在 snapcraft.io 上。当前运行 Snap 的设备将能够继续正常运转,直至另行通知。但在维护结束后,AWS IoT Greengrass Core Snap 将不会再收到安全补丁或错误修复。

Snap 概念

下方提供了一些基本的 Snap 概念,可帮助您了解如何使用 AWS IoT Greengrass Snap:

Channel

一个 Snap 组件,用于定义安装哪个版本的 snap 并跟踪其更新。Snap 会自动更新至当前频道的最新版本。

接口

一个 Snap 组件,用于授予对网络和用户文件等资源的访问权限。

要运行 AWS IoT Greengrass Spap,必须连接以下接口。请注意,必须首先连接 greengrass-support-no-container,并确保其始终保持连接。

- greengrass-support-no-container - hardware-observe - home-for-hooks - hugepages-control - log-observe - mount-observe - network - network-bind - network-control - process-control - system-observe

其他接口是可选的。如果您的 Lambda 函数需要访问特定的资源,则可能需要连接到相应接口。

刷新

Snap 会自动更新。snapd 进程守护程序是 Snap 包管理器,默认为每天检查更新四次。每次更新检查称为一次刷新。当刷新发生时,进程守护程序会停止,接着 Snap 会更新,然后进程守护程序再重新启动。

有关更多信息,请参阅 Snapcraft 网站。

AWS IoT Greengrass Snap v1.11.x 新增功能

以下内容介绍了 AWS IoT Greengrass Snap 版本 1.11.x 中的新增和更改的功能。

  • 此版本仅支持以 snap_daemon 用户,其呈现为用户 ID (UID) 和组 (GID) 584788 的形式。

  • 此版本仅支持非容器化的 Lambda 函数。

    重要

    由于非容器化的 Lambda 函数必须共享同一个用户 (snap_daemon),因此 Lambda 函数彼此之间没有隔离。有关更多信息,请参阅使用组特定的配置控制 Greengrass Lambda 函数的执行

  • 此版本支持 C、C++、Java 8、Node.js 12.x、Python 2.7、Python 3.7 和 Python 3.8 运行时。

    注意

    为了避免 Python 运行时冗余,Python 3.7 Lambda 函数实际上运行的是 Python 3.8 运行时。

AWS IoT Greengrass Snap 入门

以下过程可帮助您在设备上安装和配置 AWS IoT Greengrass Snap。

要求

要运行 AWS IoT Greengrass snap,您必须执行以下操作:

  • 在支持的 Linux 发行版上运行 AWS IoT Greengrass Snap,例如 Ubuntu、Linux Mint、Debian 和 Fedora 等。

  • 在您的设备安装 snapd 进程守护程序。snapd 进程守护程序包含 snap 工具,可用来管理您设备上的 Snap 环境。

有关支持的 Linux 发行版列表和安装说明,请参阅 Snap 文档中的安装 snapd

安装和配置 AWS IoT Greengrass snap

以下教程介绍了如何在您的设备上安装和配置 AWS IoT Greengrass Snap。

注意
  • 尽管本教程使用的是 Amazon EC2 实例(x86 t2.micro Ubuntu 20.04),但您可以使用 Raspberry Pi 等物理硬件运行 AWS IoT Greengrass snap。

  • snapd 进程守护程序已预先安装在 Ubuntu 上。

  1. 通过在设备的终端中运行以下命令来安装 core18 snap:

    sudo snap install core18

    core18 Snap 是一种基础 Snap,为运行时环境提供了常用的库。此 Snap 是基于 Ubuntu 18. 04 LTS 构建的。

  2. 通过运行以下命令来升级 snapd

    sudo snap install --channel=edge snapd; sudo snap refresh --channel=edge snapd
  3. 运行 snap list 命令,以检查是否安装了 AWS IoT Greengrass Snap。

    以下示例响应显示 snapd 已经安装,但 aws-iot-greengrass 尚未安装。

    Name Version Rev Tracking Publisher Notes amazon-ssm-agent 3.0.161.0 2996 latest/stable/… aws✓ classic core 16-2.48 10444 latest/stable canonical✓ core core18 20200929 1932 latest/stable canonical✓ base lxd 4.0.4 18150 4.0/stable/… canonical✓ - snapd 2.48+git548.g929ccfb 10526 latest/edge canonical✓ snapd
  4. 选择以下选项之一,以安装 AWS IoT Greengrass Snap 1.11.x。

    • 要安装 AWS IoT Greengrass snap,请运行下面的命令:

      sudo snap install aws-iot-greengrass

      响应示例:

      aws-iot-greengrass 1.11.5 from Amazon Web Services (aws) installed
    • 要从早期版本迁移到 v1.11.x 或更新为最新的可用补丁版本,请运行以下命令:

      sudo snap refresh --channel=1.11.x aws-iot-greengrass

    与其他 Snap 一样,AWS IoT Greengrass Snap 使用频道来管理次要版本。Snap 会自动更新至当前频道的最新可用版本。例如,如果您指定 --channel=1.11.x,则 AWS IoT Greengrass Snap 会更新到 v1.11.5。

    您可以运行 snap info aws-iot-greengrass 命令来获取可供 AWS IoT Greengrass 使用的频道列表。

    响应示例:

    name: aws-iot-greengrass summary: AWS supported software that extends cloud capabilities to local devices. publisher: Amazon Web Services (aws✓) store-url: https://snapcraft.io/aws-iot-greengrass contact: https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass license: Proprietary description: | AWS IoT Greengrass seamlessly extends AWS onto edge devices so they can act locally on the data they generate, while still using the cloud for management, analytics, and durable storage. AWS IoT Greenrgrass snap v1.11.0 enables you to run a limited version of AWS IoT Greengrass with all necessary dependencies in a containerized environment. The AWS IoT Greengrass snap doesn't support connectors and machine learning (ML) inference. By downloading this software you agree to the Greengrass Core Software License Agreement (https://s3-us-west-2.amazonaws.com/greengrass-release-license/greengrass-license-v1.pdf). For more information, see Run AWS IoT Greengrass in a snap (https://docs.aws.amazon.com/greengrass/latest/developerguide/install-ggc.html#gg-snap-support) in the AWS IoT Greengrass Developer. If you need help, try the AWS IoT Greengrass tag on AWS re:Post (https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass) or connect with an AWS IQ expert (https://iq.aws.amazon.com/services/aws/greengrass). snap-id: SRDuhPJGj4XPxFNNZQKOTvURAp0wxKnd channels: latest/stable: 1.11.3 2021-06-15 (59) 111MB - latest/candidate: 1.11.3 2021-06-14 (59) 111MB - latest/beta: 1.11.3 2021-06-14 (59) 111MB - latest/edge: 1.11.3 2021-06-14 (59) 111MB - 1.11.x/stable: 1.11.3 2021-06-15 (59) 111MB - 1.11.x/candidate: 1.11.3 2021-06-15 (59) 111MB - 1.11.x/beta: 1.11.3 2021-06-15 (59) 111MB - 1.11.x/edge: 1.11.3 2021-06-15 (59) 111MB -
  5. 要访问 Lambda 函数所需的特定资源,您可以连接到其他接口。

    运行以下命令,以获取 AWS IoT Greengrass Snap 支持的接口列表:

    snap connections aws-iot-greengrass

    响应示例:

    Interface Plug Slot Notes camera aws-iot-greengrass:camera - - dvb aws-iot-greengrass:dvb - - gpio aws-iot-greengrass:gpio - - gpio-memory-control aws-iot-greengrass:gpio-memory-control - - greengrass-support aws-iot-greengrass:greengrass-support-no-container :greengrass-support - hardware-observe aws-iot-greengrass:hardware-observe :hardware-observe manual hardware-random-control aws-iot-greengrass:hardware-random-control - - home aws-iot-greengrass:home-for-greengrassd - - home aws-iot-greengrass:home-for-hooks :home manual hugepages-control aws-iot-greengrass:hugepages-control :hugepages-control manual i2c aws-iot-greengrass:i2c - - iio aws-iot-greengrass:iio - - joystick aws-iot-greengrass:joystick - - log-observe aws-iot-greengrass:log-observe :log-observe manual mount-observe aws-iot-greengrass:mount-observe :mount-observe manual network aws-iot-greengrass:network :network - network-bind aws-iot-greengrass:network-bind :network-bind - network-control aws-iot-greengrass:network-control :network-control - opengl aws-iot-greengrass:opengl :opengl - optical-drive aws-iot-greengrass:optical-drive :optical-drive - process-control aws-iot-greengrass:process-control :process-control - raw-usb aws-iot-greengrass:raw-usb - - removable-media aws-iot-greengrass:removable-media - - serial-port aws-iot-greengrass:serial-port - - spi aws-iot-greengrass:spi - - system-observe aws-iot-greengrass:system-observe :system-observe -

    如果您在 Slot 列中看到连字符 (-),则表示相应接口尚未连接。

  6. 按照安装 AWS IoT Greengrass Core 软件的步骤操作,以创建 AWS IoT 事物、Greengrass 组、支持与 AWS IoT 进行安全通信的安全资源,以及 AWS IoT Greengrass Core 软件配置文件。配置文件 config.json 包含特定于 Greengrass 核心的配置,例如证书文件的位置和 AWS IoT 设备数据端点。

    注意

    如果您将该文件下载到其他设备,请按照此步骤操作,将文件传输到 AWS IoT Greengrass 核心设备。

  7. 对于 AWS IoT Greengrass Snap,请务必更新 config.json 文件,如下所示:

    • certificateId 的每个实例替换为证书和密钥文件名称中的证书 ID。

    • 如果您下载的亚马逊根 CA 证书与亚马逊根 CA 1 的证书不同,请将 ca1.pem 的每个 AmazonRootca1.pem 实例替换为亚马逊根 CA 文件的名称。

    { ... "crypto" : { "principals" : { "SecretsManager" : { "privateKeyPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-private.pem.keyy" }, "IoTCertificate" : { "privateKeyPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-private.pem.key", "certificatePath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/certificateId-certificate.pem.crt" } }, "caPath" : "file:///snap/aws-iot-greengrass/current/greengrass/certs/AmazonRootCA1.pem" }, "writeDirectory": "/var/snap/aws-iot-greengrass/current/ggc-write-directory", "pidFileDirectory": "/var/snap/aws-iot-greengrass/current/pidFileDirectory" }
  8. 运行以下命令以添加您的 AWS IoT Greengrass 证书和配置文件:

    sudo snap set aws-iot-greengrass gg-certs=/home/ubuntu/my-certs

部署 Lambda 函数

本节介绍如何将客户托管的 Lambda 函数部署到 AWS IoT Greengrass Snap 上。

重要

AWS IoT Greengrass Snap v1.11 仅支持非容器化的 Lambda 函数。

  1. 运行以下命令,以启动 AWS IoT Greengrass 进程守护程序。

    sudo snap start aws-iot-greengrass

    响应示例:

    Started.
  2. 运行以下命令,以确认进程守护程序正在运行:

    snap services aws-iot-greengrass.greengrassd

    响应示例:

    Service Startup Current Notes aws-iot-greengrass.greengrassd disabled active -
  3. 按照模块 3(第 1 部分):AWS IoT Greengrass 上的 Lambda 函数中所述,开始创建和部署 Hello World Lambda 函数。但在部署 Lambda 函数之前,请先完成下面这一步。

  4. 确保您的 Lambda 函数以 snap_daemon 用户身份在无容器模式下运行。要更新 Greengrass 组设置,请在 AWS IoT Greengrass 控制台中执行以下操作:

    1. 登录 AWS IoT Greengrass 控制台。

    2. 在 AWS IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)

    3. Greengrass 组下,选择目标组。

    4. 在组配置页面上的导航窗格中,选择 Lambda 函数选项卡。

    5. 默认 Lambda 函数运行时环境下,选择编辑,然后执行以下操作:

      1. 默认系统用户和组中,选择其他用户 ID/组 ID,然后在系统用户 ID(数字)系统组 ID(数字)中都输入 584788

      2. 对于默认 Lambda 函数容器化,请选择无容器

      3. 选择保存

停止 AWS IoT Greengrass 进程守护程序

您可以使用 snap stop 命令来停止服务。

要停止 AWS IoT Greengrass 进程守护程序,请运行以下命令:

sudo snap stop aws-iot-greengrass

命令应返回 Stopped.

要检查是否成功停止了 Snap,请运行以下命令:

snap services aws-iot-greengrass.greengrassd

响应示例:

Service Startup Current Notes aws-iot-greengrass.greengrassd disabled inactive -

卸载 AWS IoT Greengrass Snap

要卸载 AWS IoT Greengrass snap,请运行下面的命令:

sudo snap remove aws-iot-greengrass

响应示例:

aws-iot-greengrass removed

AWS IoT Greengrass Snap 故障排除

以下信息可帮助您解决与 AWS IoT Greengrass snap 相关的问题。

收到权限被拒绝错误

解决方案:权限被拒绝错误的原因通常是缺少接口。如需缺失接口的列表和详细的故障排除信息,您可以使用 snappy-debug 工具。

运行以下命令来安装该工具。

sudo snap install snappy-debug

响应示例:

snappy-debug 0.36-snapd2.45.1 from Canonical✓ installed

在独立的终端会话中运行 sudo snappy-debug 命令。该操作将一直持续到出现权限被拒绝错误为止。

例如,如果 Lambda 函数尝试读取 $HOME 目录中的文件,您可能会得到以下响应:

INFO: Following '/var/log/syslog'. If have dropped messages, use: INFO: $ sudo journalctl --output=short --follow --all | sudo snappy-debug kernel.printk_ratelimit = 0 = AppArmor = Time: Dec 6 04:48:26 Log: apparmor="DENIED" operation="mknod" profile="snap.aws-iot-greengrass.greengrassd" name="/home/ubuntu/my-file.txt" pid=12345 comm="touch" requested_mask="c" denied_mask="c" fsuid=0 ouid=0 File: /home/ubuntu/my-file.txt (write) Suggestion: * add 'home' to 'plugs'

此示例显示创建 /home/ubuntu/my-file.txt 文件导致了权限错误。它还建议您在 plugs 中添加 home。但是,此建议并不适用。home-for-greengrassdhome-for-hooks plug 仅被授予只读访问权限。

有关更多信息,请参阅 Snap 文档中的 snappy-debug Snap

错误:无法执行以下任务:-对 snap “” 的服务 ["greengrassd"] 运行服务命令 “start”([start aws-iot-greengrass snap。 aws-iot-greengrass.greengrassd.service] 失败,退出状态 1:Job for snap。 aws-iot-greengrass.greengrassd.service 失败,因为控制进程退出时出现错误代码。 请参阅 “systemctl 状态快照”。 aws-iot-greengrass.greengrassd.service” 和 “journalctl-xe” 了解详情。)

解决方案:snap start aws-iot-greengrass 命令无法启动 AWS IoT Greengrass 核心软件时,您可能会看到此错误。

有关更多故障排除信息,请运行以下命令:

sudo snap run aws-iot-greengrass.greengrassd

响应示例:

Couldn't find /snap/aws-iot-greengrass/44/greengrass/config/config.json.

此示例显示 AWS IoT Greengrass 无法找到 config.json 文件。您可以检查配置和证书文件。

/var/snap//aws-iot-greengrasscurrent//ggc-write-directorypackages/1.11.5/rootfs/merged 不是绝对路径或者是符号链接。

解决方案:AWS IoT Greengrass Snap 仅支持非容器化的 Lambda 函数。确保您的 Lambda 函数在无容器模式下运行。有关更多信息,请参阅《AWS IoT Greengrass Version 1 开发人员指南》中的选择 Lambda 函数容器化时的注意事项

在您运行 sudo snap refresh snapd 命令后,snapd 进程守护程序无法重新启动。

解决方案:按照 安装和配置 AWS IoT Greengrass snap 中的第 6 到 8 步操作,将 AWS IoT Greengrass 证书和配置文件添加到 AWS IoT Greengrass Snap 中。

将 AWS IoT Greengrass Core 软件安装存档

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

存档当前安装并安装新版本
  1. 下载您要升级到的 AWS IoT Greengrass Core 软件安装程序包。

  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. 启动进程守护程序。