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

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

教程:Amazon IoT Greengrass V2 入门

你可以完成这个入门教程来了解以下的基本功能Amazon IoT Greengrass V2. 在本教程中,您将执行以下操作:

  1. 安装和配置Amazon IoT GreengrassLinux 设备(例如 Raspberry Pi 或 Windows 设备)上的核心软件。该设备是 Greengrass 的核心设备。

  2. 在 Greengrass 核心设备上开发一个 Hello World 组件。组件是在 Greengrass 核心设备上运行的软件模块。

  3. 将该组件上传到Amazon IoT Greengrass V2在里面Amazon Web Services 云.

  4. 从中部署该组件Amazon Web Services 云到你的 Greengrass 核心设备。

注意

本教程介绍如何设置开发环境和探索开发环境的功能Amazon IoT Greengrass. 有关如何设置和配置生产设备的更多信息,请参阅以下文档:

您预计需要花费 20 到 30 分钟来完成本教程。

先决条件

要完成本入门教程,您需要以下条件:

  • 一个 Amazon Web Services 账户。如果没有,请参阅第 1 步:设置了 Amazon 账户

  • 使用Amazon Web Services 区域支持Amazon IoT Greengrass V2. 有关受支持的区域的列表,请参阅Amazon IoT Greengrass V2终端节点和配额在里面Amazon一般参考.

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon Identity and Access Management(IAM) 具有管理员权限的 (IAM) 用户。

  • 具有互联网连接的 Windows、macOS 或 Unix 类开发计算机。

  • 设置为 Greengrass 核心设备的设备,例如 Raspberry PiRaspberry Pi OS(以前称为 Raspbian)或 Windows 10 设备。您必须拥有此设备的管理员权限,或者能够获得管理员权限,例如通过sudo. 此设备必须有互联网连接。

    您还可以选择使用符合要求的其他设备安装和运行Amazon IoT Greengrass核心软件。有关更多信息,请参阅 支持的平台和要求

    如果您的开发计算机满足这些要求,则可以在本教程中将其设置为 Greengrass 核心设备。

  • Python为设备上的所有用户安装了 3.5 或更高版本并已添加到PATH环境变量。在 Windows 上,你还必须为所有用户安装适用于 Windows 的 Python Launcher。

    重要

    在 Windows 中,默认情况下,Python 并不是为所有用户安装的。安装 Python 时,必须自定义安装以将其配置为Amazon IoT Greengrass运行 Python 脚本的核心软件。例如,如果您使用图形化 Python 安装程序,请执行以下操作:

    1. Select为所有用户安装启动器(推荐).

    2. 选择 Customize installation

    3. 选择 Next

    4. Select Install for all users.

    5. Select Add Python to environment variables.

    6. 选择安装

    有关更多信息,请参阅在 Windows 上使用 Python在里面Python 3 文档.

  • Amazon Command Line Interface(Amazon CLI) 在开发计算机和设备上安装并配置了证书。确保你使用相同的Amazon Web Services 区域配置Amazon CLI在你的开发计算机和你的设备上。要使用Amazon IoT Greengrass V2用Amazon CLI,您必须拥有以下版本之一或更高版本:

    • 最最最Amazon CLIV1 版本:v1.18.197

    • 最最最Amazon CLIV2 版本:v2.1.11

    提示

    您可以运行以下命令以检查版本的Amazon CLI您拥有的。

    aws --version

    有关更多信息,请参阅安装、更新和卸载Amazon CLI配置Amazon CLI在里面Amazon Command Line Interface用户指南.

    注意

    如果您使用 32 位 ARM 设备,例如带有 32 位操作系统的 Raspberry Pi,请安装Amazon CLIV1。Amazon CLIV2 不适用于 32 位 ARM 设备。有关更多信息,请参阅安装、更新和卸载Amazon CLI版本 1.

第 1 步:设置了 Amazon 账户

如果您还没有 Amazon Web Services 账户,请完成以下步骤来创建一个。

注册 Amazon Web Services 账户

  1. 打开 https://portal.aws.amazon.com/billing/signup

  2. 按照屏幕上的说明进行操作。

    在注册时,您将接到一通电话,要求您使用电话键盘输入一个验证码。

    当您注册时Amazon Web Services 账户,一个Amazon Web Services 账户根用户已创建。root 用户有权访问所有Amazon Web Services和账户中的资源。作为安全最佳实践为管理用户分配管理访问权限,并且只使用 root 用户执行需要根用户访问权限的任务.

自行创建管理员用户并将该用户添加到管理员组(控制台)

  1. 选择 Root user(根用户)并输入您的 Amazon Web Services 账户 电子邮件地址,以账户拥有者身份登录 IAM 控制台。在下一页上,输入您的密码。

    注意

    强烈建议您遵守以下使用 Administrator IAM 用户的最佳实践,妥善保存根用户凭证。只在执行少数账户和服务管理任务时才作为根用户登录。

  2. 在导航窗格中,选择 Users(用户),然后选择 Add users(添加用户)。

  3. 对于 User name(用户名),输入 Administrator

  4. 选中 Amazon Web Services Management Console access (Amazon Web Services Management Console 管理控制台访问)旁边的复选框。然后选择自定义密码,并在文本框中输入新密码。

  5. (可选)默认情况下,Amazon要求新用户在首次登录时创建新密码。您可以清除 User must create a new password at next sign-in(用户必须在下次登录时创建新密码)旁边的复选框以允许新用户在登录后重置其密码。

  6. 选择 Next:。Permissions (下一步:权限)

  7. 设置权限下,选择将用户添加到组

  8. 选择创建组

  9. Create group(创建组)对话框中,对于 Group name(组名称),输入 Administrators

  10. 选择 Filter policies(筛选策略),然后选择 Amazon managed - job function(Amazon 托管 – 工作职能)以筛选表内容。

  11. 在策略列表中,选中AdministratorAccess. 然后选择 Create group(创建组)。

    注意

    您必须先激活 IAM 用户和角色对账单的访问权限,然后才能使用 AdministratorAccess 权限访问 Amazon Billing and Cost Management 控制台。为此,请按照“向账单控制台委派访问权限”教程第 1 步中的说明进行操作。

  12. 返回到组列表中,选中您的新组所对应的复选框。如有必要,选择 Refresh(刷新)以在列表中查看该组。

  13. 选择 Next:。标签

  14. (可选) 通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 IAM 用户指南中的标记 IAM 实体

  15. 选择 Next:。审核查看要添加到新用户的组成员资格的列表。如果您已准备好继续,请选择 Create user(创建用户)。

您可使用这一相同的流程创建更多组和用户,并允许您的用户访问 Amazon Web Services 账户 资源。要了解有关使用策略限制用户对特定 Amazon 资源的权限的信息,请参阅访问管理示例策略

第 2 步:设置环境

按照本部分描述的步骤设置 Linux 或 Windows 设备以用作您的 Linux 或 Windows 设备Amazon IoT Greengrass核心设备。

这些步骤假设你使用的是带树莓派操作系统的树莓派。如果您使用其他设备或操作系统,请查阅您的设备的相关文档。

要设置 RaspberrPi 用于Amazon IoT Greengrass V2

  1. 在 Raspberry Pi 上启用 SSH 以远程连接到它。有关更多信息,请参阅SSH(安全外壳)在里面Raspberry.

  2. 找到你的 Raspberry Pi 的 IP 地址,使用 SSH 连接到它。为此,可以在树莓派上运行以下命令。

    hostname -I
  3. 使用 SSH Connect 你的 Raspberry Pi。

    在开发计算机上,运行以下命令。Replace(替换)用户名将替换为要登录的用户名并替换为要登录的用户名pi-ip-address使用您在之前的步骤中找到的 IP 地址。

    ssh username@pi-ip-address

    默认的 Raspberry Pi 用户名和密码是piraspberry,分别地。

    重要

    如果您的开发计算机使用的是较早版本的 Windows,则可能没有ssh命令,或者你可能有ssh但无法连接到您的 Raspberry Pi。要连接到你的 Raspberry Pi,你可以安装和配置PuTTY,这是一款免费开源 SSH 客户端。请查阅PuTTY 文档连接到您的RaspberrPi。

  4. 安装 Java 运行时,Amazon IoT Greengrass核心软件需要运行。在你的 Raspberry Pi 上,使用以下命令安装 Java 11。

    sudo apt install default-jdk

    安装完成后,运行以下命令来验证 Java 是否在你的 Raspberry Pi 上运行。

    java -version

    该命令会打印设备上运行的 Java 版本。该输出值可能类似于以下示例中。

    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)

为设置 Linux 设备Amazon IoT Greengrass V2

  1. 安装 Java 运行时,Amazon IoT Greengrass核心软件需要运行。建议使用Amazon Corretto 11要么OpenJDK 11. 以下命令向您展示如何在您的设备上安装 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

    安装完成后,运行以下命令以验证 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)
  2. (可选)创建在设备上运行组件的默认系统用户和组。您也可以选择Amazon IoT Greengrass核心软件安装程序在安装期间使用--component-default-user安装程序参数。有关更多信息,请参阅 安装程序参数

    sudo useradd --system --create-home ggc_user sudo groupadd --system ggc_group
  3. 验证运行的用户是否Amazon IoT Greengrass核心软件(通常root),有运行权限sudo与任何用户和任何群组共享。

    1. 运行以下命令以打开/etc/sudoersfile。

      sudo visudo
    2. 验证用户的权限是否类似于以下示例。

      root ALL=(ALL:ALL) ALL
  4. (可选)至运行容器化的 Lambda 函数,则必须启用c组v1,并且必须启用并装载记忆设备cgroups。如果您不打算运行容器化 Lambda 函数,则可跳过此步骤。

    要启用这些 cgroups 选项,请使用以下 Linux 内核参数启动设备。

    cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0

    有关查看和设置设备内核参数的信息,请参阅您的操作系统和启动加载程序的文档。按照说明永久设置内核参数。

    提示:在 Raspberry Pi 上设置内核参数

    如果您的设备是 Raspberry Pi,则可以完成以下步骤来查看和更新其 Linux 内核参数:

    1. 打开 /boot/cmdline.txt 文件。此文件指定了树莓派启动时要应用的 Linux 内核参数。

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 打开文件。

      sudo nano /boot/cmdline.txt
    2. 验证/boot/cmdline.txt该文件包含以下内核参数。这些区域有:systemd.unified_cgroup_hierarchy=0参数指定使用 cgroups v1 而不是 cgroups v2。

      cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0

      如果/boot/cmdline.txt文件不包含这些参数,或者它包含具有不同值的这些参数,请更新文件以包含这些参数和值。

    3. 如果你更新了/boot/cmdline.txt文件,重启树莓派以应用更改。

      sudo reboot
  5. 按照中的要求列表在设备上安装所有其他必需的依赖项设备要求.

为设置 Windows 设备Amazon IoT Greengrass V2

  1. 安装 Java 运行时,Amazon IoT Greengrass核心软件需要运行。建议使用Amazon Corretto 11要么OpenJDK 11.

  2. 检查 Java 是否在上可用路径系统变量,如果不是,则将其添加。这些区域有: LocalSystem 账户运行Amazon IoT Greengrass核心软件,因此必须将 Java 添加到 PATH 系统变量中,而不是为用户添加 PATH 用户变量。执行以下操作:

    1. 按下 Windows 键打开开始菜单。

    2. 类型environment variables从 “开始” 菜单中搜索系统选项。

    3. 在开始菜单搜索结果中,选择编辑系统环境变量打开系统属性窗口。

    4. 选择环境变量...打开环境变量窗口。

    5. 下面系统变量,SeltPath (路径),然后选择编辑. 在里面编辑环境变量窗口,你可以在单独的行上查看每条路径。

    6. 检查 Java 安装路径是否为bin文件夹存在。该路径可能类似于以下示例中。

      C:\Program Files\Amazon Corretto\jdk11.0.13_8\bin
    7. 如果 Java 安装是bin中缺少文件夹Path (路径),选择new将其添加,然后选择好吧.

  3. 打开 Windows 命令提示符 (cmd.exe) 以管理员身份运行。

  4. 在中创建默认用户 LocalSystem Windows 设备上的帐户。Replace(替换)密码使用安全密码。

    net user /add ggc_user password
    提示

    根据您的 Windows 配置,用户的密码可能会设置为在future 某个日期到期。为确保您的 Greengrass 应用程序继续运行,请跟踪密码何时到期,并在密码到期前进行更新。您也可以将用户的密码设置为永不过期。

    • 要检查用户及其密码何时过期,请运行以下命令。

      net user ggc_user | findstr /C:expires
    • 要将用户的密码设置为永不过期,请运行以下命令。

      wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
  5. 下载并安装PsExec实用程序来自设备上的微软。

  6. 使用 PsExec 实用程序将默认用户的用户名和密码存储在凭证管理器实例中 LocalSystem 账户。Replace(替换)密码使用您之前设置的用户密码。

    psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password

    如果PsExec License Agreement打开,选择Accept同意许可证并运行命令。

    注意

    在 Windows 设备上, LocalSystem 账户运行 Greengrass 核心,你必须使用 PsExec 实用程序,用于将默认用户信息存储在 LocalSystem 账户。使用凭据管理器应用程序将此信息存储在当前登录用户的 Windows 帐户中,而不是 LocalSystem 账户。

第 3 步:安装 Amazon IoT Greengrass Core 软件

按照本节中的步骤将你的 Raspberry Pi 设置为Amazon IoT Greengrass可用于本地开发的核心设备。在本节中,您将下载并运行一个安装程序,该安装程序执行以下操作来配置Amazon IoT Greengrass适用于您设备的核心软件:

  • 安装 Greengrass 核心组件。nucleus 是必需组件,也是运行Amazon IoT Greengrass设备上的核心软件。有关更多信息,请参阅Greengrass 核组件.

  • 将您的设备注册为Amazon IoT下载允许您的设备连接的数字证书Amazon. 有关更多信息,请参阅 Amazon IoT Greengrass 的设备身份验证和授权

  • 添加设备的Amazon IoT事物到事物组,也就是一群人或舰队Amazon IoT事物。事物组使您能够管理 Greengrass 核心设备队列。将软件组件部署到设备时,可以选择部署到单个设备或设备组。有关更多信息,请参阅使用管理设备Amazon IoT在里面Amazon IoT Core开发人员指南.

  • 创建允许您的 Greengrass 核心设备与之交互的 IAM 角色Amazon服务。默认情况下,此角色允许您的设备与Amazon IoT并将日志发送到 Amazon CloudWatch 日志。有关更多信息,请参阅 授权核心设备与Amazon服务

  • 安装Amazon IoT Greengrass命令行界面 (greengrass-cli),您可以使用它来测试您在核心设备上开发的自定义组件。有关更多信息,请参阅 Greengrass Command Line Interface

  1. 登录到 Amazon IoT Greengrass 控制台

  2. 下面Greengrass s 入门,选择设置一台核心设备.

  3. 下面步骤 1: 注册 Greengrass 核心设备,对于核心设备名称,输入Amazon IoT适合你的 Greengrass 核心设备的东西。如果该东西不存在,安装程序将创建它。

  4. 下面步骤 2: 添加到事物组以应用持续部署,对于事物组,请选择Amazon IoT您要向其添加核心设备的事物组。

    • 如果你选择输入新的组名,然后进入事物组名称,输入要创建的新组的名称。安装程序会为您创建新组。

    • 如果你选择选择现有群组,然后进入事物组名称,选择要使用的现有组。

    • 如果你选择无组,则安装程序不会将核心设备添加到事物组中。

  5. 下面步骤 3: 安装 Greengrass 核心软件

    1. 选择您的核心设备的操作系统:Linux的要么Windows.

    2. 提供你的Amazon设备凭证,以便安装程序可以配置Amazon IoT以及您的核心设备的 IAM 资源。为了提高安全性,我们建议您获取 IAM 角色的临时证书,该证书仅允许预置所需的最低权限。有关更多信息,请参阅 安装程序配置资源的最低 IAM 策略

      注意

      安装程序不会保存或存储您的证书。

      在您的设备上,执行以下任一操作来检索凭据并将其提供给Amazon IoT Greengrass核心软件安装程序:

      • 使用 IAM 用户提供的长期证书:

        1. 为您的 IAM 用户提供访问密钥 ID 和秘密访问密钥。有关如何检索长期凭证的更多信息,请参阅管理 IAM 用户的访问密钥在里面IAM 用户指南.

        2. 运行以下命令为提供证书Amazon IoT Greengrass核心软件。

          Linux or Unix
          export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
          Windows Command Prompt (CMD)
          set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
          PowerShell
          $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
      • (推荐)使用来自 IAM 角色的临时安全证书:

        1. 提供您代入的 IAM 角色提供的访问密钥 ID、秘密访问密钥和会话令牌。有关如何检索这些凭证的更多信息,请参阅请求临时安全凭证在里面IAM 用户指南.

        2. 运行以下命令为提供证书Amazon IoT Greengrass核心软件。

          Linux or Unix
          export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
          Windows Command Prompt (CMD)
          set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
          PowerShell
          $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
    3. 下面运行安装程序

      1. 下面下载安装程序,选择复制然后在你的核心设备上运行复制的命令。此命令下载最新版本的Amazon IoT Greengrass核心软件并在您的设备上解压缩。

      2. 下面运行安装程序,选择复制,然后在你的核心设备上运行复制的命令。此命令使用Amazon IoT您之前为运行而指定的事物和事物组名称Amazon IoT Greengrass核心软件安装和设置Amazon您的核心设备的资源。

        此命令还执行以下操作:

        • 设置Amazon IoT Greengrass核心软件即系统服务,在启动时运行。在 Linux 设备上,这需要Systemdinit 系统。

          重要

          在 Windows 核心设备上,您必须设置Amazon IoT Greengrass核心软件即系统服务。

        • 部署Amazon IoT GreengrassCLI 组件,这是一个命令行工具,可让您在核心设备上开发自定义 Greengrass 组件。

        • 指定以使用ggc_user系统用户在核心设备上运行软件组件。在 Linux 设备上,此命令还指定使用ggc_group系统组,安装程序会为您创建系统用户和组。

        运行此命令时,您应该会看到以下消息,表明安装程序已成功。

        Successfully configured Nucleus with provisioned resource details! Configured Nucleus to deploy aws.greengrass.Cli component Successfully set up Nucleus as a system service
        注意

        如果你有 Linux 设备但没有systemd,安装程序不会将软件设置为系统服务,也不会看到将 nucleus 设置为系统服务的成功消息。

安装和配置Amazon IoT Greengrass核心软件

  1. 在 Greengrass 核心设备上,运行以下命令切换到主目录。

    Linux or Unix
    cd ~
    Windows Command Prompt (CMD)
    cd %USERPROFILE%
    PowerShell
    cd ~
  2. 在您的核心设备上,下载Amazon IoT Greengrass核心软件转换为一个名为的文件greengrass-nucleus-latest.zip.

    Linux or Unix
    curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
    Windows Command Prompt (CMD)
    curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
    PowerShell
    iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip

    下载此软件,即表示您同意Greengrass 核心软件许可协议.

  3. 解压缩的Amazon IoT Greengrass将核心软件保存到设备上的某个文件夹。Replace(替换)GreengrassInstaller使用您要使用的文件夹。

    Linux or Unix
    unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
    Windows Command Prompt (CMD)
    mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
    PowerShell
    Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\GreengrassInstaller rm greengrass-nucleus-latest.zip
  4. 运行以下命令以启动Amazon IoT Greengrass核心软件安装程序。此命令执行以下操作:

    • 创建Amazon核心设备运行所需的资源。

    • 设置Amazon IoT Greengrass核心软件即系统服务,在启动时运行。在 Linux 设备上,这需要Systemdinit 系统。

      重要

      在 Windows 核心设备上,您必须设置Amazon IoT Greengrass核心软件即系统服务。

    • 部署Amazon IoT GreengrassCLI 组件,这是一个命令行工具,可让您在核心设备上开发自定义 Greengrass 组件。

    • 指定以使用ggc_user系统用户在核心设备上运行软件组件。在 Linux 设备上,此命令还指定使用ggc_group系统组,安装程序会为您创建系统用户和组。

    按如下方式替换命令中的参数值。

    1. /greengrass/v2要么C:\greengrass\v2:用于安装的根文件夹的路径Amazon IoT Greengrass核心软件。

    2. GreengrassInstaller. 解压后的文件夹的路径Amazon IoT Greengrass核心软件安装程序。

    3. 领域. 这些区域有:Amazon Web Services 区域在其中寻找或创建资源。

    4. MyGreengrassCore. 的名称Amazon IoT适合你的 Greengrass 核心设备的东西。如果该东西不存在,安装程序将创建它。安装程序下载证书以进行身份验证Amazon IoT事物。有关更多信息,请参阅 Amazon IoT Greengrass 的设备身份验证和授权

      注意

      事物名中不得含有冒号 (:) 字符。

    5. MyGreengrassCoreGroup. 的NAMEAmazon IoT你的 Greengrass 核心设备的事物组。如果事物组不存在,则安装程序会创建它并将事物添加到其中。如果事物组存在且部署处于活动状态,则核心设备将下载并运行部署指定的软件。

      注意

      事物组名中不得含有冒号 (:) 字符。

    6. Greengrassv2IoThingPolicy. 的名称Amazon IoT允许 Greengrass 核心设备与之通信的策略Amazon IoT和Amazon IoT Greengrass. 如果Amazon IoT策略不存在,安装程序创建了一个许可的Amazon IoT使用此名称的策略。您可以根据自己的用例限制此策略的权限。有关更多信息,请参阅 最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

    7. GreengrassV2TokenExchangeRole. 允许 Greengrass 核心设备临时使用的 IAM 角色的名称Amazon凭证。如果该角色不存在,安装程序将创建角色并创建并附加一个名为的策略GreengrassV2TokenExchangeRoleAccess. 有关更多信息,请参阅 授权核心设备与Amazon服务

    8. GreengrassCoreTokenExchangeRoleAlias. IAM 角色的别名,允许 Greengrass 核心设备稍后获得临时证书。如果角色别名不存在,安装程序会创建它并将其指向您指定的 IAM 角色。有关更多信息,请参阅 授权核心设备与Amazon服务

    Linux or Unix
    sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassInstaller/lib/Greengrass.jar \ --aws-region region \ --thing-name MyGreengrassCore \ --thing-group-name MyGreengrassCoreGroup \ --thing-policy-name GreengrassV2IoTThingPolicy \ --tes-role-name GreengrassV2TokenExchangeRole \ --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \ --component-default-user ggc_user:ggc_group \ --provision true \ --setup-system-service true \ --deploy-dev-tools true
    Windows Command Prompt (CMD)
    java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^ -jar ./GreengrassInstaller/lib/Greengrass.jar ^ --aws-region region ^ --thing-name MyGreengrassCore ^ --thing-group-name MyGreengrassCoreGroup ^ --thing-policy-name GreengrassV2IoTThingPolicy ^ --tes-role-name GreengrassV2TokenExchangeRole ^ --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ^ --component-default-user ggc_user ^ --provision true ^ --setup-system-service true ^ --deploy-dev-tools true
    PowerShell
    java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ` -jar ./GreengrassInstaller/lib/Greengrass.jar ` --aws-region region ` --thing-name MyGreengrassCore ` --thing-group-name MyGreengrassCoreGroup ` --thing-policy-name GreengrassV2IoTThingPolicy ` --tes-role-name GreengrassV2TokenExchangeRole ` --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ` --component-default-user ggc_user ` --provision true ` --setup-system-service true ` --deploy-dev-tools true
    注意

    如果你正在跑步Amazon IoT Greengrass在内存有限的设备上,你可以控制内存量Amazon IoT Greengrass核心软件用途。要控制内存分配,可以在中设置 JVM 堆大小选项jvmOptions你的核心组件中的配置参数。有关更多信息,请参阅 使用 JVM 选项控制内存分配

    运行此命令时,您应该会看到以下消息,表明安装程序已成功。

    Successfully configured Nucleus with provisioned resource details! Configured Nucleus to deploy aws.greengrass.Cli component Successfully set up Nucleus as a system service
    注意

    如果你有 Linux 设备但没有systemd,安装程序不会将软件设置为系统服务,也不会看到将 nucleus 设置为系统服务的成功消息。

(可选)运行 Greengrass 软件 (Linux)

如果您将软件作为系统服务安装,则安装程序会为您运行该软件。否则,您必须运行该软件。要查看安装程序是否将软件设置为系统服务,请在安装程序输出中查找以下行。

Successfully set up Nucleus as a system service

如果您没有看到此消息,请执行以下操作来运行该软件:

  1. 运行以下命令运行该软件。

    sudo /greengrass/v2/alts/current/distro/bin/loader

    如果软件成功启动,则会打印以下消息。

    Launched Nucleus successfully.
  2. 必须保持当前命令 shell 处于打开状态才能保持Amazon IoT Greengrass核心软件正在运行。如果您使用 SSH 连接到核心设备,请在开发计算机上运行以下命令以打开第二个 SSH 会话,您可以使用该会话在核心设备上运行其他命令。Replace(替换)用户名将替换为要登录的用户名并替换为要登录的用户名pi-ip-address替换为您的 IP 地址。

    ssh username@pi-ip-address

有关如何与 Greengrass 系统服务交互的更多信息,请参阅将 Greengrass 核心配置为系统服务.

验证设备上是否安装了 Greengrass CLI

Greengrass CLI 最多可能需要一分钟才能部署。运行以下命令以检查部署的状态。Replace(替换)MyGreengrassCore使用您的核心设备的名称。

aws greengrassv2 list-effective-deployments --core-device-thing-name MyGreengrassCore

这些区域有:coreDeviceExecutionStatus表示部署到核心设备的状态。当状态为SUCCEEDED,运行以下命令验证是否安装和运行 Greengrass CLI。Replace(替换)/greengrass/v2包含根文件夹的路径。

Linux or Unix
/greengrass/v2/bin/greengrass-cli help
Windows Command Prompt (CMD)
C:\greengrass\v2\bin\greengrass-cli help
PowerShell
C:\greengrass\v2\bin\greengrass-cli help

该命令输出 Greengrass CLI 的帮助信息。如果greengrass-cli未找到,部署可能无法安装 Greengrass CLI。有关更多信息,请参阅 排除 Amazon IoT Greengrass V2 的故障

您还可以运行以下命令以手动部署Amazon IoT GreengrassCLI。

  • Replace(替换)领域用Amazon Web Services 区域您使用的。请确保使用相同的Amazon Web Services 区域你以前用来配置的Amazon CLI在您的设备上。

  • Replace(替换)账户 id用你的Amazon Web Services 账户ID。

  • Replace(替换)MyGreengrassCore使用您的核心设备的名称。

Linux, macOS, or Unix
aws greengrassv2 create-deployment \ --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \ --components '{ "aws.greengrass.Cli": { "componentVersion": "2.8.0" } }'
Windows Command Prompt (CMD)
aws greengrassv2 create-deployment ^ --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^ --components "{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.8.0\"}}"
PowerShell
aws greengrassv2 create-deployment ` --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ` --components '{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.8.0\"}}'
提示

你可以添加/greengrass/v2/bin(Linux) 或C:\greengrass\v2\bin(Windows) 到你的PATH要运行的环境变量greengrass-cli没有其绝对路径。

这些区域有:Amazon IoT Greengrass核心软件和本地开发工具在您的设备上运行。接下来,你可以开发一个 Hello WorldAmazon IoT Greengrass您的设备上的组件。

第 4 步:在您的设备上开发和测试组件

组件是运行在上的软件模块Amazon IoT Greengrass核心设备。组件使您能够将复杂的应用程序作为独立的构建块进行创建和管理,您可以将这些应用程序从一个 Greengrass 核心设备重复使用到另一个 Greengrass 核心设备。每个组件都由一个食谱人工制品.

  • 食谱

    每个组件都包含一个定义其元数据的配方文件。该食谱还指定了组件的配置参数、组件依赖项、组件依赖项、组件依赖项、生命周期和平台兼容性。组件生命周期定义了安装、运行和关闭组件的命令。有关更多信息,请参阅 Amazon IoT Greengrass组件配方参考

    您可以在以下位置定义配方JSON要么YAML格式的日期和时间。

  • Artifacts

    组件可以有任意数量的构件,即组件二进制文件。构件可以包括脚本、编译后的代码、静态资源和组件使用的任何其他文件。组件还可以消耗来自组件依赖关系的构件。

与Amazon IoT Greengrass,你可以使用 Greengrass CLI 在 Greengrass 核心设备上本地开发和测试组件,而无需与AmazonCloud。完成本地组件后,您可以使用组件配方和构件在Amazon IoT Greengrass中的服务Amazon云端,然后将其部署到您的所有 Greengrass 核心设备上。有关组件的更多信息,请参阅开发Amazon IoT Greengrass组件.

在本节中,您将学习如何在核心设备上本地创建和运行基本的 Hello World 组件。

在你的设备上开发 Hello World 组件

  1. 为您的组件创建一个文件夹,其中包含配方和构件的子文件夹。在 Greengrass 核心设备上运行以下命令以创建这些文件夹并更改为组件文件夹。Replace(替换)~/greengrassv2要么%USERPROFILE%\ greengrassv2以及用于本地开发的文件夹路径。

    Linux or Unix
    mkdir -p ~/greengrassv2/{recipes,artifacts} cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2\recipes, %USERPROFILE%\greengrassv2\artifacts cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts cd ~/greengrassv2
  2. 使用文本编辑器创建定义组件元数据、参数、依赖项、组件元数据、参数、依赖项、依赖项、生命周期和平台功能的食谱文件。在配方文件名中包含组件版本,这样您就可以确定哪个配方反映了哪个组件版本。你可以为你的食谱选择 YAML 或 JSON 格式。

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

    JSON
    nano recipes/com.example.HelloWorld-1.0.0.json
    YAML
    nano recipes/com.example.HelloWorld-1.0.0.yaml
    注意

    Amazon IoT Greengrass对组件使用语义版本。语义版本遵循重大的.未成年人.补丁数字系统。例如,版本1.0.0代表组件的第一个主要版本。有关更多信息,请参阅 。语义版本规范.

  3. 将以下配方粘贴到该文件中。

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first Amazon IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.HelloWorld ComponentVersion: '1.0.0' ComponentDescription: My first Amazon IoT Greengrass component. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: Message: world Manifests: - Platform: os: linux Lifecycle: Run: | python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" - Platform: os: windows Lifecycle: Run: | py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"

    这个配方ComponentConfiguration部分定义了一个参数,Message,默认为world. 这些区域有:Manifests部分定义了一个表现,这是一组用于平台的生命周期指令和工件。例如,您可以定义多个清单来为不同的平台指定不同的安装说明。在清单中,Lifecycle部分指示 Greengrass 核心设备使用 Hello World 脚本运行Message参数值作为参数。

  4. 运行以下命令以创建组件构件的文件夹。

    Linux or Unix
    mkdir -p artifacts/com.example.HelloWorld/1.0.0
    Windows Command Prompt (CMD)
    mkdir artifacts\com.example.HelloWorld\1.0.0
    PowerShell
    mkdir artifacts\com.example.HelloWorld\1.0.0
    重要

    必须使用以下格式作为构件文件夹路径。包括您在配方中指定的组件名称和版本。

    artifacts/componentName/componentVersion/
  5. 使用文本编辑器为你的 Hello World 组件创建 Python 脚本构件文件。

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

    nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    将以下 Pyon 脚本复制并粘贴到该文件中。

    import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(message)
  6. 使用本地Amazon IoT Greengrass用于管理 Greengrass 核心设备上组件的 CLI。

    运行以下命令将组件部署到Amazon IoT Greengrass内核。Replace(替换)/greengrass/v2要么C:\greengrass\v2用你的Amazon IoT Greengrass V2根文件夹,然后替换~/greengrassv2要么%USERPROFILE%\ greengrassv2使用您的组件开发文件夹。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/greengrassv2/recipes \ --artifactDir ~/greengrassv2/artifacts \ --merge "com.example.HelloWorld=1.0.0"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create ^ --recipeDir %USERPROFILE%\greengrassv2\recipes ^ --artifactDir %USERPROFILE%\greengrassv2\artifacts ^ --merge "com.example.HelloWorld=1.0.0"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create ` --recipeDir ~/greengrassv2/recipes ` --artifactDir ~/greengrassv2/artifacts ` --merge "com.example.HelloWorld=1.0.0"

    此命令添加了使用配方的组件recipes和里面的 Python 脚本artifacts. 这些区域有:--merge选项添加或更新您指定的组件和版本。

  7. 这些区域有:Amazon IoT Greengrass核心软件将 stdout 从组件进程保存到日志文件中logs文件夹。运行以下命令验证是否运行了 Hello World 组件是否运行并打印消息。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您应看到类似于以下示例的消息。

    Hello, world!
    注意

    如果文件不存在,则本地部署可能尚未完成。如果文件在 15 秒内不存在,则部署可能失败。例如,如果你的食谱无效,就会发生这种情况。运行以下命令查看Amazon IoT Greengrass核心日志文件。该文件包含来自 Greengrass 核心设备的部署服务的日志。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  8. 修改本地组件以迭代和测试您的代码。Open(打开)hello_world.py在文本编辑器中,并在第 4 行添加以下代码以编辑消息Amazon IoT Greengrass核心日志。

    message += " Greetings from your first Greengrass component."

    这些区域有:hello_world.py脚本现在应包含以下内容。

    import sys message = "Hello, %s!" % sys.argv[1] message += " Greetings from your first Greengrass component." # Print the message to stdout, which Greengrass saves in a log file. print(message)
  9. 运行以下命令以使用您的更改更新组件。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/greengrassv2/recipes \ --artifactDir ~/greengrassv2/artifacts \ --merge "com.example.HelloWorld=1.0.0"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create ^ --recipeDir %USERPROFILE%\greengrassv2\recipes ^ --artifactDir %USERPROFILE%\greengrassv2\artifacts ^ --merge "com.example.HelloWorld=1.0.0"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create ` --recipeDir ~/greengrassv2/recipes ` --artifactDir ~/greengrassv2/artifacts ` --merge "com.example.HelloWorld=1.0.0"

    此命令更新com.example.HelloWorld包含最新的 Hello World 神器的组件。

  10. 运行以下命令以重新启动组件。当您重新启动组件时,核心设备会使用最新的更改。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli component restart \ --names "com.example.HelloWorld"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli component restart ^ --names "com.example.HelloWorld"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli component restart ` --names "com.example.HelloWorld"
  11. 再次检查日志,验证 Hello World 组件是否打印了新消息。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您应看到类似于以下示例的消息。

    Hello, world! Greetings from your first Greengrass component.
  12. 您可以更新组件的配置参数来测试不同的配置。部署组件时,可以指定配置更新,它定义了如何修改核心设备上的组件配置。您可以指定要将哪些配置值重置为默认值以及要合并到核心设备的新配置值。有关更多信息,请参阅 Update component configurations

    执行以下操作:

    1. 使用文本编辑器创建一个名为的文件hello-world-config-update.json包含配置更新

      例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

      nano hello-world-config-update.json
    2. 将以下 JSON 对象复制并粘贴到该文件中。此 JSON 对象定义了合并该值的配置更新friendMessage参数来更新其值。此配置更新未指定任何要重置的值。您不需要重置Message参数,因为合并更新替换了现有值。

      { "com.example.HelloWorld": { "MERGE": { "Message": "friend" } } }
    3. 运行以下命令将配置更新部署到 Hello World 组件。

      Linux or Unix
      sudo /greengrass/v2/bin/greengrass-cli deployment create \ --merge "com.example.HelloWorld=1.0.0" \ --update-config hello-world-config-update.json
      Windows Command Prompt (CMD)
      C:\greengrass\v2\bin\greengrass-cli deployment create ^ --merge "com.example.HelloWorld=1.0.0" ^ --update-config hello-world-config-update.json
      PowerShell
      C:\greengrass\v2\bin\greengrass-cli deployment create ` --merge "com.example.HelloWorld=1.0.0" ` --update-config hello-world-config-update.json
    4. 再次检查日志以验证 Hello World 组件是否输出了新消息。

      Linux or Unix
      sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
      Windows Command Prompt (CMD)
      type C:\greengrass\v2\logs\com.example.HelloWorld.log

      这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

      这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

      PowerShell
      gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

      您应看到类似于以下示例的消息。

      Hello, friend! Greetings from your first Greengrass component.
  13. 测试完组件后,将其从核心设备中移除。运行以下命令。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
    重要

    此步骤是您在将组件上传到核心设备后将其部署回核心设备所必需的Amazon IoT Greengrass. 否则,部署将失败并出现版本兼容性错误,因为本地部署指定了组件的不同版本。

    运行以下命令并验证com.example.HelloWorld组件未出现在设备上的组件列表中。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli component list
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli component list
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli component list

你的 Hello World 组件已完成,现在你可以将其上传到Amazon IoT Greengrass云服务。然后,可以将组件部署到 Greengrass 核心设备。

第 5 步:在中创建您的组件Amazon IoT Greengrass服务

在核心设备上完成组件开发后,可以将其上传到Amazon IoT Greengrass中的服务Amazon Web Services 云. 您也可以直接在中创建组件Amazon IoT Greengrass控制台.Amazon IoT Greengrass提供托管组件的组件管理服务,以便您可以将它们部署到单个设备或设备队列中。将组件上传到Amazon IoT Greengrass服务,您完成以下步骤:

  • 将组件构件上传到 S3 存储桶。

  • 将每个构件的 Amazon SerSimple Storage Service (Amazon S3) ion Servication Servic

  • 在中创建组件Amazon IoT Greengrass来自组件配方。

在本节中,您将在 Greengrass 核心设备上完成这些步骤,将您的 Hello World 组件上传到Amazon IoT Greengrass服务。

  1. 在您的中使用 S3 存储桶Amazon向房东开设账户Amazon IoT Greengrass组件构件。当您将组件部署到核心设备时,该设备会从存储桶中下载该组件的构件。

    您可以使用现有的 S3 存储桶,也可以创建新的存储桶。

    1. 在里面Amazon S3 控制台,在下存储桶,选择创建存储桶.

    2. 对于Bucket name,输入唯一的存储桶名称。例如,您可以使用 greengrass-component-artifacts-123456789012-region。Replace(替换)123456789012用你的Amazon账户 ID 和领域用Amazon您在本教程中使用的区域。

    3. 对于Amazon领域,SELECTAmazon您在本教程中使用的区域。

    4. 请选择 Create bucket (创建存储桶)

    5. 下面存储桶,选择您创建的存储桶,上传hello_world.py脚本到artifacts/com.example.HelloWorld/1.0.0存储桶中的文件夹。有关将对象上传到 S3 存储桶的信息,请参阅上传对象在里面Amazon SSimple Storage.

    6. 复制的 S3 URIhello_world.pyS3 桶中的对象。此 URI 应类似于以下示例中。Replace(替换)DOC-EXAMPLE-BU替换为 S3 桶的名称。

      s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
  2. 允许核心设备访问 S3 存储桶中的组件构件。

    每个核心设备都有一个核心设备 IAM 角色这允许它与之互动Amazon IoT并将日志发送到AmazonCloud。默认情况下,此设备角色不允许访问 S3 存储桶,因此您必须创建并附加允许核心设备从 S3 存储桶检索组件构件的策略。

    如果设备角色已允许访问 S3 存储桶,则可跳过此步骤。否则,请创建允许访问的 IAM 策略并将其附加到角色,如下所示:

    1. 在里面IAM 控制台导航菜单,选择策略,然后选择创建策略.

    2. JSON 选项卡中,将占位符内容替换为以下策略。Replace(替换)DOC-EXAMPLE-BU使用 S3 桶的名称,其中包含要下载的核心设备组件构件。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
    3. 选择 Next:。标签,然后选择下一步:审核

    4. 对于 Name (名称),请输入 MyGreengrassV2ComponentArtifactPolicy

    5. 选择 Create policy(创建策略)

    6. 在里面IAM 控制台导航菜单,选择Role,然后选择核心设备的角色的名称。您在安装时指定了此角色名称Amazon IoT Greengrass核心软件。如果您未指定名称,则原定设置为GreengrassV2TokenExchangeRole.

    7. 下面Permissions (权限),选择添加权限,然后选择附加策略.

    8. 添加权限页面上,选中MyGreengrassV2ComponentArtifactPolicy您创建的策略,然后选择附加策略.

  3. 使用组件配方在中创建组件Amazon IoT Greengrass控制台.

    1. 在里面Amazon IoT Greengrass控制台导航菜单,选择组件,然后选择创建组件.

    2. 下面组件信息,选择以 JSON 格式输入食谱. 占位符食谱应类似于以下示例。

      { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first Amazon IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ] }, { "Platform": { "os": "windows" }, "Lifecycle": { "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ] } ] }
    3. 替换每个中的占位符 URIArtifacts包含你的 S3 URI 的部分hello_world.pyobjt。

    4. 选择创建组件.

    5. com.exampHelloWorld组件页面,验证状态的组件是可部署.

要上传你的 Hello World

  1. 在您的中使用 S3 存储桶Amazon Web Services 账户到hostAmazon IoT Greengrass组件构件。当您将组件部署到核心设备时,该设备会从存储桶中下载该组件的构件。

    您可以使用现有的 S3 存储桶,或运行以下命令创建存储桶。此命令使用您的创建存储桶Amazon Web Services 账户ID 和Amazon Web Services 区域以形成一个唯一的存储桶名称。Replace(替换)123456789012用你的Amazon Web Services 账户ID 和领域用Amazon Web Services 区域你在本教程中使用的。

    aws s3 mb s3://greengrass-component-artifacts-123456789012-region

    如果请求成功,该命令将输出以下信息。

    make_bucket: greengrass-component-artifacts-123456789012-region
  2. 允许核心设备访问 S3 存储桶中的组件构件。

    每个核心设备都有一个核心设备 IAM 角色这允许它与之互动Amazon IoT并将日志发送到Amazon Web Services 云. 默认情况下,此设备角色不允许访问 S3 存储桶,因此您必须创建并附加允许核心设备从 S3 存储桶检索组件构件的策略。

    如果核心设备的角色已允许访问 S3 存储桶,则可跳过此步骤。否则,请创建允许访问的 IAM 策略并将其附加到角色,如下所示:

    1. 创建一个名为的文件component-artifact-policy.json并将以下 JSON 复制到文件中。此策略允许访问 S3 存储桶中的所有文件。Replace(替换)DOC-EXAMPLE-BU替换为 S3 桶的名称。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
    2. 运行以下命令以从中的策略文档创建策略component-artifact-policy.json.

      Linux or Unix
      aws iam create-policy \ --policy-name MyGreengrassV2ComponentArtifactPolicy \ --policy-document file://component-artifact-policy.json
      Windows Command Prompt (CMD)
      aws iam create-policy ^ --policy-name MyGreengrassV2ComponentArtifactPolicy ^ --policy-document file://component-artifact-policy.json
      PowerShell
      aws iam create-policy ` --policy-name MyGreengrassV2ComponentArtifactPolicy ` --policy-document file://component-artifact-policy.json

      从输出中的策略元数据中复制策略 Amazon ResARN ce Name Servication Resource 在下一步中,您可以使用此 ARN 将此策略附加到核心设备角色。

    3. 运行以下命令将策略附加到核心设备角色。Replace(替换)GreengrassV2TokenExchangeRole使用核心设备的角色名称。您在安装时指定了此角色名称Amazon IoT Greengrass核心软件。将策略 ARN 替换为上一步中的 ARN。

      Linux or Unix
      aws iam attach-role-policy \ --role-name GreengrassV2TokenExchangeRole \ --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      Windows Command Prompt (CMD)
      aws iam attach-role-policy ^ --role-name GreengrassV2TokenExchangeRole ^ --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      PowerShell
      aws iam attach-role-policy ` --role-name GreengrassV2TokenExchangeRole ` --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy

      如果该命令没有输出,则表示成功。核心设备现在可以访问您上传到此 S3 存储桶的项目。

  3. 将 Hello World Python 脚本项目上传到 S3 存储桶。

    运行以下命令将脚本上传到您的脚本所在的存储桶中的相同路径Amazon IoT Greengrass内核。Replace(替换)DOC-EXAMPLE-BU替换为 S3 桶的名称。

    Linux or Unix
    aws s3 cp \ artifacts/com.example.HelloWorld/1.0.0/hello_world.py \ s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
    Windows Command Prompt (CMD)
    aws s3 cp ^ artifacts/com.example.HelloWorld/1.0.0/hello_world.py ^ s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
    PowerShell
    aws s3 cp ` artifacts/com.example.HelloWorld/1.0.0/hello_world.py ` s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    该命令输出一行,开头为upload:如果请求成功。

  4. 将工件的 Amazon S3 URI 添加到组件配方中。

    Amazon S3 URI 由存储桶名称和存储桶中构件对象的路径组成。您的脚本构件的 Amazon S3 URI 是您在上一步中将构件上传到的 URI。此 URI 应类似于以下示例中。Replace(替换)DOC-EXAMPLE-BU替换为 S3 桶的名称。

    s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    要将神器添加到配方中,请添加以下列表Artifacts它包含一个带有 Amazon S3 URI 的结构。

    JSON
    "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ]

    在文本编辑器中打开配方文件。

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

    nano recipes/com.example.HelloWorld-1.0.0.json

    将神器添加到配方中。您的食谱文件应类似于以下示例。

    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first Amazon IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ] }, { "Platform": { "os": "windows" }, "Lifecycle": { "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ] } ] }
    YAML
    Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    在文本编辑器中打开配方文件。

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建文件。

    nano recipes/com.example.HelloWorld-1.0.0.yaml

    将神器添加到配方中。您的食谱文件应类似于以下示例。

    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.HelloWorld ComponentVersion: '1.0.0' ComponentDescription: My first Amazon IoT Greengrass component. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: Message: world Manifests: - Platform: os: linux Lifecycle: Run: | python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py - Platform: os: windows Lifecycle: Run: | py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
  5. 在中创建组件资源Amazon IoT Greengrass来自配方。运行以下命令以从食谱创建组件,食谱是您以二进制文件提供的食谱。

    JSON
    aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.json
    YAML
    aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.yaml

    如果请求成功,响应类似于以下示例。

    { "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0", "componentName": "com.example.HelloWorld", "componentVersion": "1.0.0", "creationTimestamp": "Mon Nov 30 09:04:05 UTC 2020", "status": { "componentState": "REQUESTED", "message": "NONE", "errors": {} } }

    复制arn从输出中检查下一步中组件的状态。

    注意

    你也可以在中看到你的 Hello World 组件Amazon IoT Greengrass控制台组件page。

  6. 确认组件已创建并准备部署。创建组件时,其状态为REQUESTED. 然后,Amazon IoT Greengrass验证该组件是否可部署。您可以运行以下命令来查询组件状态并验证您的组件是否可部署。替换arn使用上一步中的ARN。

    aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0"

    如果组件通过验证,则响应表明组件状态为DEPLOYABLE.

    { "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0", "componentName": "com.example.HelloWorld", "componentVersion": "1.0.0", "creationTimestamp": "2020-11-30T18:04:05.823Z", "publisher": "Amazon", "description": "My first Greengrass component.", "status": { "componentState": "DEPLOYABLE", "message": "NONE", "errors": {} }, "platforms": [ { "os": "linux", "architecture": "all" } ] }

您的 Hello World 组件现于以下版本可用Amazon IoT Greengrass. 你可以将其部署回这个 Greengrass 核心设备或其他核心设备。

第 6 步:部署组件

与Amazon IoT Greengrass,您可以将组件部署到单个设备或设备组。部署组件时,Amazon IoT Greengrass在每台目标设备上安装并运行该组件的软件。您可以指定要部署的组件以及要为每个组件部署的配置更新。您还可以控制如何向部署目标设备部署部署。有关更多信息,请参阅 部署Amazon IoT Greengrass组件到设备

在本节中,你将你的 Hello World 组件重新部署到你的 Greengrass 核心设备上。

  1. 在里面Amazon IoT Greengrass控制台导航菜单,选择组件.

  2. 组件页面,在我的组件选项卡,选择com.example.HelloWorld.

  3. com.example.HelloWorld页面,选择部署.

  4. From添加到部署,选择创建新部署,然后选择下一页.

  5. 指定目标页面上,请执行以下操作:

    1. 名称框中,输入 Deployment for MyGreengrassCore

    2. 对于部署目标,选择核心设备,以及Amazon IoT适合你的核心设备的东西。本教程中的默认值是MyGreengrassCore.

    3. 选择 Next(下一步)。

  6. 选择组件页面,下方我的组件,请验证com.example.HelloWorld组件被选中,然后选择下一页.

  7. 配置组件页面,选择com.example.HelloWorld,并执行以下操作:

    1. 选择配置组件.

    2. 下面配置更新,在要合并的配置,输入以下配置。

      { "Message": "universe" }

      此配置更新设置了 Hello WorldMessage参数为universe适用于此部署中的设备。

    3. 选择 Confirm(确认)。

    4. 选择 Next(下一步)。

  8. 配置高级设置页面,保留默认配置设置,然后选择下一页.

  9. Review(检查)页上,选择 Deploy(部署)。

  10. 验证部署是否成功完成。部署可能需要几分钟的时间才能完成。查看 Hello World 日志以验证更改。在您的 Greengrass 核心设备上运行以下命令。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您应看到类似于以下示例的消息。

    Hello, universe! Greetings from your first Greengrass component.
    注意

    如果日志消息没有改变,则部署失败或未到达核心设备。如果您的核心设备未连接到 Internet 或者没有权限从 S3 存储桶中检索项目,就会发生这种情况。在核心设备上运行以下命令以查看Amazon IoT Greengrass核心软件日志文件。该文件包含来自 Greengrass 核心设备的部署服务的日志。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait

    有关更多信息,请参阅 排除 Amazon IoT Greengrass V2 的故障

部署你的 Hello World 组件

  1. 在开发计算机上,创建一个名为的文件hello-world-deployment.json并将以下 JSON 复制到文件中。此文件定义了要部署的组件和配置。

    { "components": { "com.example.HelloWorld": { "componentVersion": "1.0.0", "configurationUpdate": { "merge": "{\"Message\":\"universe\"}" } } } }

    此配置文件指定要部署的版本1.0.0您在前面的过程中开发和发布的 Hello World 组件。这些区域有:configurationUpdate指定在 JSON 编码的字符串中合并组件配置。此配置更新设置了 Hello WorldMessage参数为universe适用于此部署中的设备。

  2. 运行以下命令将组件部署到 Greengrass 核心设备。您可以部署到事物,即单个设备或事物组(即设备组)。Replace(替换)MyGreengrassCore用... 的名字Amazon IoT适合你的核心设备的东西。

    Linux or Unix
    aws greengrassv2 create-deployment \ --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \ --cli-input-json file://hello-world-deployment.json
    Windows Command Prompt (CMD)
    aws greengrassv2 create-deployment ^ --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^ --cli-input-json file://hello-world-deployment.json
    PowerShell
    aws greengrassv2 create-deployment ` --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ` --cli-input-json file://hello-world-deployment.json

    命令输出类似于以下示例的响应。

    { "deploymentId": "deb69c37-314a-4369-a6a1-3dff9fce73a9", "iotJobId": "b5d92151-6348-4941-8603-bdbfb3e02b75", "iotJobArn": "arn:aws:iot:region:account-id:job/b5d92151-6348-4941-8603-bdbfb3e02b75" }
  3. 验证部署是否成功完成。部署可能需要几分钟的时间才能完成。查看 Hello World 日志以验证更改。在您的 Greengrass 核心设备上运行以下命令。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您应看到类似于以下示例的消息。

    Hello, universe! Greetings from your first Greengrass component.
    注意

    如果日志消息没有改变,则部署失败或未到达核心设备。如果您的核心设备未连接到 Internet 或者没有权限从 S3 存储桶中检索项目,就会发生这种情况。在核心设备上运行以下命令以查看Amazon IoT Greengrass核心软件日志文件。该文件包含来自 Greengrass 核心设备的部署服务的日志。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    这些区域有:type命令将文件的内容写入终端。多次运行此命令以观察文件中的变化。

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait

    有关更多信息,请参阅 排除 Amazon IoT Greengrass V2 的故障

后续步骤

你已经完成了本教程。这些区域有:Amazon IoT Greengrass核心软件和你的 Hello World 组件可以在你的设备上运行。此外,你的 Hello World 组件可在Amazon IoT Greengrass云服务部署到其他设备。有关本教程探讨的主题的更多信息,请参阅以下文档: