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

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

CreateAmazon IoT Greengrass组件

你可以开发自定义Amazon IoT Greengrass本地开发计算机或 Greengrass 核心设备上的组件。Amazon IoT Greengrass提供Amazon IoT Greengrass开发工具包命令行界面 (GDK CLI)以帮助您从预定义的组件模板中创建、构建和发布组件,社区组件. 您还可以运行内置 shell 命令来创建、构建和发布组件。从以下选项中进行选择以创建自定义 Greengrass 组件:

  • 使用 Greengrass 开发套件 CLI

    使用 GDK CLI 在本地开发计算机上开发组件。GDK CLI 将组件源代码构建并打包到配方和工件中,您可以将其作为私有组件发布到Amazon IoT Greengrass服务。您可以将 GDK CLI 配置为在发布组件时自动更新组件的版本和构件 URI,因此无需每次更新配方。要使用 GDK CLI 开发组件,您可以从模板或社区组件开始Greengrass 软件目录. 有关更多信息,请参阅 Amazon IoT Greengrass开发套件命令行界面

  • 运行内置 shell 命令

    您可以运行内置的 shell 命令在本地开发计算机或 Greengrass 核心设备上开发组件。您可以使用 shell 命令将组件源代码复制或构建到工件中。每次创建组件的新版本时,都必须使用新组件版本创建或更新配方。当您将组件发布到Amazon IoT Greengrass服务,则必须将 URI 更新到配方中的每个组件对象。

创建组件(GDK CLI)

按照本节中的说明使用 GDK CLI 创建和构建组件。

开发 Greengrass 组件(GDK CLI)

  1. 如果尚未安装 GDK CLI,请在您的开发计算机上安装 GDK CLI。有关更多信息,请参阅 安装或更新Amazon IoT Greengrass开发套件命令行界面

  2. 更改到要在其中创建组件文件夹的文件夹。

    Linux or Unix
    mkdir ~/greengrassv2 cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2 cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2 cd ~/greengrassv2
  3. 选择要下载的组件模板或社区组件。GDK CLI 下载模板或社区组件,因此您可以从功能示例开始。使用列出组件命令以检索可用模板或社区组件列表。

    • 要列出组件模板,请运行以下命令。响应中的每一行都包含模板的名称和编程语言。

      gdk component list --template
    • 要列出社区组件,请运行以下命令。

      gdk component list --repository
  4. 创建并更改为组件文件夹,GDK CLI 在其中下载模板或社区组件。ReplaceHelloWorld使用组件的名称或其他有助于识别此组件文件夹的名称。

    Linux or Unix
    mkdir HelloWorld cd HelloWorld
    Windows Command Prompt (CMD)
    mkdir HelloWorld cd HelloWorld
    PowerShell
    mkdir HelloWorld cd HelloWorld
  5. 将模板或社区组件下载到当前文件夹。使用init 组件命令。

    • 要从模板创建组件文件夹,请运行以下命令。ReplaceHelloWorld将模板的名称替换为模板的名称,然后将python用编程语言的名字。

      gdk component init --template HelloWorld --language python
    • 要从社区组件创建组件夹,请运行以下命令。ReplaceComponentName使用社区组件的名称。

      gdk component init --repository ComponentName
    注意

    如果使用 GDK CLI v1.0.0,则必须在空文件夹中运行此命令。GDK CLI 会将模板或社区组件下载到当前文件夹中。

    如果您使用 GDK CLI v1.1.0 或更高版本,则可以指定--name参数来指定 GDK CLI 下载模板或社区组件的文件夹。如果使用此参数,请指定不存在的文件夹。GDK CLI 会为您创建此文件夹。如果您不指定此参数,GDK CLI 将使用当前文件夹,此文件夹必须为空。

  6. GDK CLI 从GDK CLI 配置文件,命名gdk-config.json,以构建和发布组件。此配置文件存在于组件文件夹的根目录中。上一步为你创建了这个文件。在此步中,您将更新gdk-config.json包含有关您的组件的信息。执行以下操作:

    1. 在文本编辑器中打开 gdk-config.json

    2. (可选)更改组件名称。组件名称是component对象。

    3. 更改组件的作者。

    4. (可选)更改组件版本。指定下列项之一:

      • NEXT_PATCH— 选择此选项后,GDK CLI 将在您发布组件时设置版本。GDK CLI 查询Amazon IoT Greengrass服务,以标识组件的最新发布版本。然后,它将版本设置为该版本之后的下一个修补程序版本。如果您之前没有发布该组件,GDK CLI 将使用版本1.0.0.

        如果选择此选项,则无法使用CLI Greengrass将组件部署到本地开发计算机上并测试该组件,该计算机运行Amazon IoT Greengrass核心软件。要启用本地部署,必须改为指定语义版本。

      • 语义版本,例如1.0.0. 语义版本使用重大的.未成年人.补丁编号系统。有关更多信息,请参阅 。Semantic version 规范.

        如果您在要部署和测试组件的 Greengrass 核心设备上开发组件,请选择此选项。必须使用特定版本构建组件才能使用CLI Greengrass.

    5. (可选)更改组件的构建配置。构建配置定义了 GDK CLI 如何将组件的源代码构建到工件中。从以下选项中进行选择build_system

      • zip— 将组件的文件夹打包到 ZIP 文件中,以定义为组件的唯一工件。对于以下类型的组件,请选择此选项:

        • 使用解释式编程语言(如 Python 或 JavaScript)的组件。

        • 打包代码以外的文件的组件,例如机器学习模型或其他资源。

        GDK CLI 将组件的文件夹压缩到与组件文件夹同名的 zip 文件中。例如,如果组件夹的名称为HelloWorld,GDK CLI 会创建一个名为HelloWorld.zip.

        注意

        如果在 Windows 设备上使用 GDK CLI 1.0.0 版,组件文件夹和 zip 文件名必须仅包含小写字母。

        当 GDK CLI 将组件的文件夹压缩到 zip 文件中时,它会跳过以下文件:

        • gdk-config.json 文件

        • 食谱文件 (recipe.json要么recipe.yaml

        • 构建文件夹,例如greengrass-build

      • maven— 运行mvn clean package命令将组件的源代码构建成工件。为使用的组件选择此选项玛文,例如 Java 组件。

        在 Windows 设备上,此功能适用于 GDK CLI v1.1.0 及更高版本。

      • gradle— 运行gradle build命令将组件的源代码构建成工件。为使用的组件选择此选项Gradle.

        此功能适用于 GDK CLI v1.1.0 及更高版本。

      • custom— 运行自定义命令以将组件的源代码构建到配方和工件中。在中指定自定义命令custom_build_command参数。

    6. 如果你指定custom为了build_system添加custom_build_commandbuild对象。Incustom_build_command,指定单个字符串或字符串列表,其中每个字符串均为命令中的一个单词。例如,要为 C++ 组件运行自定义构建命令,可以指定["cmake", "--build", "build", "--config", "Release"].

    7. 如果您使用 GDK CLI v1.1.0 或更高版本,则可以指定--bucket参数,以指定 GDK CLI 在其中上传组件的工件的 S3 存储桶。如果您不指定此参数,GDK CLI 会上传到名称为的 S3 存储桶bucketPrefix-region-accountId,其中,BucketPrefix领域是你在中指定的值gdk-config.json, 和accountId是你的Amazon Web Services 账户ID。如果存储桶不存在,GDK CLI 会创建存储桶。

      更改组件的发布配置。执行以下操作:

      1. 指定要用于托管组件项目的 S3 存储桶的名称。

      2. 指定Amazon Web Services 区域GDK CLI 发布组件的位置。

    完此步骤后,gdk-config.json文件可能与以下示例类似。

    { "component": { "com.example.PythonHelloWorld": { "author": "Amazon", "version": "NEXT_PATCH", "build": { "build_system" : "zip" }, "publish": { "bucket": "greengrass-component-artifacts", "region": "us-west-2" } } }, "gdk_version": "1.0.0" }
  7. 更新组件配方文件,名为recipe.yaml要么recipe.json. 执行以下操作:

    1. 如果您下载的模板或社区组件使用zip创建系统,请检查 zip 项目名称与组件夹的名称匹配。GDK CLI 将组件文件夹压缩到与组件文件夹同名的 zip 文件中。配方在组件对象列表和使用 zip 项目中文件的生命周期脚本中包含 zip 项目名称。更新ArtifactsLifecycle定义,使 zip 文件名称与组件夹的名称匹配。以下部分配方例子突出显示了ArtifactsLifecycle定义。

      JSON
      { ... "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
      YAML
      --- ... Manifests: - Platform: os: all Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip" Unarchive: ZIP Lifecycle: Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
    2. (可选)更新组件描述、默认配置、工件、生命周期脚本和平台支持。有关更多信息,请参阅 Amazon IoT Greengrass组件配方参考

      重要

      使用 GDK CLI 时,配方属性名称区分大小写,必须与组件配方参考.

    完此步后,配方文件可能类似于以下示例。

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "{COMPONENT_NAME}", "ComponentVersion": "{COMPONENT_VERSION}", "ComponentDescription": "This is a simple Hello World component written in Python.", "ComponentPublisher": "{COMPONENT_AUTHOR}", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "World" } }, "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
    YAML
    --- RecipeFormatVersion: "2020-01-25" ComponentName: "{COMPONENT_NAME}" ComponentVersion: "{COMPONENT_VERSION}" ComponentDescription: "This is a simple Hello World component written in Python." ComponentPublisher: "{COMPONENT_AUTHOR}" ComponentConfiguration: DefaultConfiguration: Message: "World" Manifests: - Platform: os: all Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip" Unarchive: ZIP Lifecycle: Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
  8. 开发和构建 Greengrass 组件。这些区域有:生成组件命令在greengrass-build组件文件夹中的文件夹。运行以下 命令。

    gdk component build

准备好测试组件时,请使用 GDK CLI 将其发布到Amazon IoT Greengrass服务。然后,您可以将组件部署到 Greengrass 核心设备。有关更多信息,请参阅 发布要部署到核心设备的组件

创建组件(shell 命令)

按照本节中的说明创建包含多个组件的源代码和工件文件夹的配方和工件文件夹。

开发 Greengrass 组件(shell 命令)

  1. 为组件创建一个文件夹,其中包含食谱和工件的子文件夹。在 Greengrass 核心设备上运行以下命令以创建这些文件夹并更改为组件文件夹。Replace~/ 绿草 v2要么%USERPROFILE%\ Greengrass v2包含要用于本地开发的文件夹的路径。

    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代表组件的第一个主要版本。有关更多信息,请参阅 。Semantic version 规范.

  3. 定义组件的配方。有关更多信息,请参阅 Amazon IoT Greengrass组件配方参考

    您的配方可能与以下 Hello World 示例配方类似。

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

    此配方运行 Hello World Python 脚本,此脚本可能类似于以下示例脚本。

    import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(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. 在您在上一步中创建的文件夹中为组件创建构件。工件可以包括软件、映像和组件使用的任何其他二进制文件。

    当你的组件准备就绪后,测试组件.