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

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

开始使用 Amazon IoT Greengrass V2

您可以完成本入门教程,了解Amazon IoT Greengrass V2. 在本教程中,您将执行以下操作:

  • 安装和配置Amazon IoT GreengrassLinux 设备上的核心软件,如 Raspberry Pi。此设备是Amazon IoT Greengrass核心设备。

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

  • 将该组件上传到Amazon IoT Greengrass V2中的Amazon Web Services 云.

  • 部署该组件从Amazon Web Services 云添加到您的 Greengrass 核心设备。

注意

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

您可以预计花费 20-30 分钟的时间在本教程。

Prerequisites

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

  • 一个 Amazon Web Services 账户。如果没有,请参阅设置Amazon Web Services 账户

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

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

  • 具有 Linux 操作系统和互联网连接到与开发计算机相同的网络的设备。我们建议您使用 Raspberry PiRaspberry Pi OS(以前称为 “覆盆布族”). 有关更多信息,请参阅 。安装和运行Amazon IoT GreengrassCore 软件 v2.0.

  • Python3.5 或更高版本安装在设备上。

  • Amazon Command Line Interface(Amazon CLI),并在您的开发计算机和设备上使用凭据进行配置。请确保您使用相同的Amazon Web Services 区域配置Amazon CLI在开发计算机上和设备上。使用Amazon IoT Greengrass V2使用Amazon CLI,您必须具有以下版本之一或更高版本之一:

    • 最低Amazon CLIV1 版本:版本

    • 最低Amazon CLIV2 版本:版本 2.1.11

    提示

    您可以运行以下命令来检查Amazon CLI您具有的。

    aws --version

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

    注意

    如果您使用树莓派或其他 32 位 ARM 设备,请安装Amazon CLIV1.Amazon CLI V2 不适用于 32 位 ARM 设备。有关更多信息,请参阅 。安装、更新和卸载Amazon CLI版本 1.

设置环境

按照本节中的步骤设置 Linux 设备用作Amazon IoT Greengrass核心设备。这些步骤假定您使用覆盆子派与树莓派操作系统. 如果您使用不同的设备或操作系统,请参阅设备的相关文档。

设置 Raspberry PiAmazon IoT Greengrass V2

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

  2. 找到您的 Raspberry Pi 的 IP 地址以连接到它的 SSH。为此,您可以在 Raspberry Pi 上运行以下命令。

    hostname -I
  3. 使用 SSH Connect 您的 Raspberry Pi。在开发计算机上,运行以下命令。Replaceusername将替换为要登录的用户的名称,并将Pi-ip-service将替换为您在上一步中找到的 IP 地址。

    ssh username@pi-ip-address

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

    重要

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

  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)

安装 Amazon IoT Greengrass Core 软件

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

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

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

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

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

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

安装和配置Amazon IoT GreengrassCore 软件

  1. 在您的Amazon IoT Greengrass核心设备(您的树莓派),请运行以下命令切换到主目录。

    cd ~
  2. 运行以下命令以下载Amazon IoT GreengrassCore 软件。

    curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip

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

  3. 运行以下命令解压缩软件并删除 ZIP 文件。Replace绿色草原替换为目标文件夹的名称。

    unzip greengrass-nucleus-latest.zip -d GreengrassCore && rm greengrass-nucleus-latest.zip
  4. 提供您的Amazon凭据,以便安装程序可以预配Amazon IoT和 IAM 资源。为了提高安全性,您可以获取 IAM 角色的证书,该角色仅允许预配置所需的最低权限。有关更多信息,请参阅安装程序用于配置资源的最小 IAM 策略

    执行以下操作之一以检索凭证并将其提供给Amazon IoT GreengrassCore 软件:

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

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

      2. 运行以下命令以提供Amazon IoT GreengrassCore 软件。

        export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    • (推荐)使用 IAM 角色中的临时安全证书:

      1. 提供假定的 IAM 角色的访问密钥 ID、秘密访问密钥和会话令牌。有关如何检索这些凭证的详细信息,请参阅将临时安全凭证用于Amazon CLI中的IAM 用户指南.

      2. 运行以下命令以提供Amazon IoT GreengrassCore 软件。

        export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=

    这些区域有:Amazon IoT Greengrass核心软件不会保存或存储您的凭证。

  5. 运行以下命令启动Amazon IoT GreengrassCore 软件安装程序。如果核心设备具有systemd,此命令将软件作为启动时运行的系统服务进行安装。此命令还指定使用ggc_user系统用户和ggc_group系统组以在核心设备上运行软件组件。安装程序会为您创建此默认用户和组。按如下方式替换命令中的参数值。

    1. /绿草/v2:根文件夹的路径用于安装Amazon IoT GreengrassCore 软件。

    2. 绿色草原. 解压缩的目标文件夹路径Amazon IoT GreengrassCore 软件安装程序。

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

    4. 我的绿色草原. 的名称Amazon IoT事物为您的 Greengrass 核心设备。如果事物不存在,安装程序将创建它。安装程序将下载证书以作为Amazon IoT事物。有关更多信息,请参阅Amazon IoT Greengrass 的设备身份验证和授权

      注意

      事物名称不能包含冒号(:) 字符。

    5. 我的格林格拉斯考雷集团. 的名称Amazon IoT事物组为您的 Greengrass 核心设备。如果事物组不存在,安装程序会创建它并将事物添加到它中。如果事物组存在并且具有活动部署,则核心设备会下载并运行部署指定的软件。

      注意

      事物组名称不能包含冒号(:) 字符。

    6. 绿色草原 V2 政策. 的名称Amazon IoT策略,允许 Greengrass 核心设备与Amazon IoT和Amazon IoT Greengrass. 如果Amazon IoT策略不存在,安装程序会创建一个Amazon IoT策略的名称。您可以限制此策略的权限以适用于您的用例。有关更多信息,请参阅最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备

    7. 绿草 V2 代码交换. 允许 Greengrass 核心设备获取临时Amazon凭证。如果角色不存在,安装程序将创建该角色,并创建并附加名为GreengrassV2TokenExchangeRoleAccess. 有关更多信息,请参阅授权核心设备与Amazon服务

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

    sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassCore/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
    注意

    如果您运行的是Amazon IoT Greengrass在内存有限的设备上,您可以控制Amazon IoT GreengrassCore 软件使用。要控制内存分配,您可以在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
    注意

    如果您的系统没有 systemd,安装程序将不会将软件设置为系统服务,并且您不会看到该成功消息。

  6. 本地开发工具可能需要一分钟才能部署。您可以运行以下命令来检查部署的状态。Replace我的绿色草原替换为核心设备的名称。

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

    这些区域有:coreDeviceExecutionStatus指示部署到核心设备的状态。当状态为SUCCEEDED,请运行以下命令来验证是否安装了 Greengrass CLI 并正在运行。Replace/绿草/v2将替换为根文件夹的路径。

    /greengrass/v2/bin/greengrass-cli help

    命令输出有关 Greengrass CLI 的帮助信息。如果greengrass-cli,则部署可能无法安装 Greengrass CLI。有关更多信息,请参阅Troubleshooting

    您还可以运行以下命令来手动部署Amazon IoT GreengrassCLI 到您的设备。

    • Replace区域使用Amazon Web Services 区域您使用的。确保使用相同的Amazon Web Services 区域,您用来配置Amazon CLI在您的设备上。

    • Replaceaccount-id与您的Amazon Web Services 账户ID。

    • Replace我的绿色草原替换为核心设备的名称。

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

    您可以添加/greengrass/v2/bin添加到您的PATH环境变量运行greengrass-cli没有它的绝对路径.

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

    Successfully set up Nucleus as a system service

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

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

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

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

      Launched Nucleus successfully.
    2. 您必须保持当前终端会话处于打开状态,以保持Amazon IoT GreengrassCore 软件正在运行。在开发计算机上,运行以下命令以打开可用于在核心设备上运行其他命令的第二个 SSH 会话。Replaceusername将替换为要登录的用户的名称,并将Pi-ip-service将替换为设备的 IP 地址。

      ssh username@pi-ip-address

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

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

创建您的第一个组件

组件是一个软件模块,它在Amazon IoT Greengrass核心设备。组件使您能够创建和管理复杂的应用程序,作为独立的构建模块,您可以从一个 Greengrass 核心设备重复使用这些应用程序。每个组件都由recipe构件.

  • 诀窍

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

    您可以在JSON或者YAML格式的日期和时间。

  • Artifacts

    组件可以具有任意数量的工件,这些工件是组件二进制文件。工件可以包括脚本、编译代码、静态资源以及组件使用的任何其他文件。组件还可以使用组件依赖关系中的对象。

与Amazon IoT Greengrass,您可以在 Greengrass 核心设备上开发和测试组件,而无需与Amazon Web Services 云. 完成组件后,您可以将其上传到Amazon IoT Greengrass将其部署到其他设备。有关更多信息,请参阅ManageAmazon IoT Greengrass组件

在本节中,您将了解如何创建和运行基本 Hello World 组件。

创建 Hello World 组件

  1. 在您的 Greengrass 核心设备上,可运行以下命令以更改为Amazon IoT Greengrass安装文件夹以用于本地开发。Replace〜/绿色草芯替换为安装文件夹的路径。

    cd ~/GreengrassCore
  2. Amazon IoT Greengrass期望组件配方和工件位于单独的文件夹中。

    运行以下命令以创建组件配方的文件夹。

    mkdir recipes
  3. 运行以下命令以创建配方文件并在文本编辑器中打开它。

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

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

    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}'" } } ] }
    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}'

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

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

    mkdir -p artifacts/com.example.HelloWorld/1.0.0
    重要

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

    artifacts/componentName/componentVersion/
  5. 运行以下命令以创建 Python 脚本构件文件并在文本编辑器中打开它。

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

    将以下 Python 脚本粘贴到该文件中。

    import sys import datetime message = "Hello, %s! Current time: %s." % (sys.argv[1], datetime.datetime.now()) # Print the message to stdout. print(message) # Append the message to the log file. with open('/tmp/Greengrass_HelloWorld.log', 'a') as f: print(message, file=f)

    此 Python 脚本会记录一条你好消息,并将当前时间记录到/tmp/Greengrass_HelloWorld.log.

  6. 使用本地Amazon IoT GreengrassCLI 来管理 Greengrass 核心设备上的组件。

    运行以下命令以将组件部署到Amazon IoT Greengrass核心。Replace/绿草/v2与您的Amazon IoT Greengrass V2根文件夹,然后替换〜/绿色草芯与您的Amazon IoT Greengrass V2安装文件夹。

    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/GreengrassCore/recipes \ --artifactDir ~/GreengrassCore/artifacts \ --merge "com.example.HelloWorld=1.0.0"

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

  7. 运行以下命令验证 Hello World 组件是否正在运行并记录消息。

    tail -f /tmp/Greengrass_HelloWorld.log

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

    Hello, world! Current time: 2020-11-30 17:48:59.153933.
    注意

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

    sudo tail -f /greengrass/v2/logs/greengrass.log

    您还可以查看您的 Hello World 组件的日志文件。

    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log

    有关更多信息,请参阅Troubleshooting

  8. 修改本地组件以迭代和测试代码。

    运行以下命令编辑hello_world.py.

    nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py
  9. 在第 5 行添加以下代码以编辑Amazon IoT Greengrass核心日志。

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

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

    import sys import datetime message = "Hello, %s! Current time: %s." % (sys.argv[1], datetime.datetime.now()) message += " Greetings from your first Greengrass component." # Print the message to stdout. print(message) # Append the message to the log file. with open('/tmp/Greengrass_HelloWorld.log', 'a') as f: print(message, file=f)
  10. 运行以下命令以更新组件。

    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/GreengrassCore/recipes \ --artifactDir ~/GreengrassCore/artifacts \ --merge "com.example.HelloWorld=1.0.0"

    此命令将最新的 “Hello World” 工件应用于Amazon IoT Greengrass核心运行时环境。

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

    sudo /greengrass/v2/bin/greengrass-cli component restart \ --names "com.example.HelloWorld"
  12. 再次检查日志以验证 Hello World 组件是否输出新消息。

    tail -f /tmp/Greengrass_HelloWorld.log

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

    Hello, world! Current time: 2020-11-30 17:48:59.153933. Greetings from your first Greengrass component.
  13. 您可以更新组件的配置参数以测试不同的配置。部署组件时,您可以指定配置更新,它定义了如何修改核心设备上组件的配置。您可以指定要重置为默认值的配置值以及要合并到核心设备上的新配置值。有关更多信息,请参阅更新组件配置

    执行以下操作:

    1. 创建名为的文件hello-world-config-update.json以包含配置更新。

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

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

      sudo /greengrass/v2/bin/greengrass-cli deployment create \ --merge "com.example.HelloWorld=1.0.0" \ --update-config hello-world-config-update.json
    4. 再次检查日志以验证 Hello World 组件是否输出新消息。

      tail -f /tmp/Greengrass_HelloWorld.log

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

      Hello, friend! Current time: 2020-11-30 17:48:59.153933. Greetings from your first Greengrass component.
  14. 完成组件测试后,请将其从核心设备中删除。运行以下 命令:

    sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
    重要

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

    运行以下命令,并验证com.example.HelloWorld组件不会显示在您的设备上的组件列表中。

    sudo /greengrass/v2/bin/greengrass-cli component list

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

上传您的组件

完成组件后,您可以将其上载到Amazon IoT Greengrass服务Amazon Web Services 云.Amazon IoT Greengrass提供了托管组件的组件管理服务,以便您可以将它们部署到单个设备或设备队列。要将组件上载到Amazon IoT Greengrass,您完成以下步骤:

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

  • 将每个构件的 Amazon Simple Storage Service (Amazon S3) URI 添加到组件配方中。

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

在此部分中,您将完成以下步骤:Amazon IoT Greengrass核心设备将您的 Hello World 组件上传到Amazon IoT Greengrass.

上传您的 “你好世界” 组件

  1. 使用Amazon Web Services 账户到主机Amazon IoT Greengrass组件对象。将组件部署到核心设备时,设备会从存储桶中下载组件的对象。

    您可以使用现有 S3 存储桶,或运行以下命令以创建存储桶。此命令创建一个存储桶,其中包含Amazon Web Services 账户ID 和Amazon Web Services 区域以形成唯一的存储桶名称。Replace123456789012与您的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文档示例存储桶替换为要使用的存储桶的名称。

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

      aws iam create-policy \ --policy-name MyGreengrassV2ComponentArtifactPolicy \ --policy-document file://component-artifact-policy.json

      从输出中的策略元数据复制策略 Amazon 资源名称 (ARN)。您可以在下一步中使用此 ARN 将此策略附加到核心设备角色。

    3. 运行以下命令以将策略附加到核心设备角色。Replace绿草 V2 代码交换将替换为您在运行Amazon IoT GreengrassCore 软件。将策略 ARN 替换为上一步中的 ARN。

      aws iam attach-role-policy \ --role-name GreengrassV2TokenExchangeRole \ --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy

      如果命令没有输出,则成功,并且您的核心设备可以访问您上传到此 S3 存储桶的对象。

  3. 将您好世界 Python 脚本工件上传到 S3 存储桶。运行以下命令,将脚本上传到存储桶中脚本存在于Amazon IoT Greengrass核心。Replace文档示例存储桶替换为 S3 存储桶的名称。

    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文档示例存储桶替换为 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" } ]

    运行以下命令以打开处方文件。

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

    将对象添加到处方中。您的配方文件应类似于以下示例。

    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first 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" } ] } ] }
    YAML
    Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    运行以下命令以打开处方文件。

    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
  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,以检查下一步中组件的状态。

    注意

    您还可以在Amazon IoT Greengrass控制台组件页.

  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" } ] }

您的 “你好世界” 组件现在可以在Amazon IoT Greengrass. 您可以将其部署回这个 Greengrass 核心设备或其他核心设备。

部署您的组件

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

在本节中,您将您的 Hello World 组件部署回Amazon IoT Greengrass核心设备。

部署您的 “你好世界” 组件

  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 编码的字符串中。此配置更新将设置 “你好世界”Message参数为universe对于此部署中的设备。

  2. 运行以下命令以将组件部署到您的 Greengrass 核心设备。您可以部署到单个设备或事物组(即设备组)。Replace我的绿色草原并行运行的名称为Amazon IoT事物,用于核心设备。

    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 核心设备上运行以下命令。

    tail -f /tmp/Greengrass_HelloWorld.log

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

    Hello, universe! Current time: 2020-11-30 18:18:59.153933. Greetings from your first Greengrass component.
    注意

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

    sudo tail -f /greengrass/v2/logs/greengrass.log

    有关更多信息,请参阅Troubleshooting

您已完成本教程。这些区域有:Amazon IoT Greengrass核心软件和您的 Hello World 组件在您的设备上运行。此外,您的 “你好世界” 组件也可以在Amazon IoT Greengrass部署到其他设备。有关本教程探讨的主题的更多信息,请参阅以下内容: