发布组件以部署到您的核心设备 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

发布组件以部署到您的核心设备

构建或完成组件版本后,可以将其发布到 Amazon IoT Greengrass 服务。然后,可以将其部署到 Greengrass 核心设备。

如果您使用 Greengrass 工具包 CLI(GDK CLI)开发和构建组件,则可以使用 GDK CLI 将该组件发布到 Amazon Web Services 云。否则,请使用内置 Shell 命令和 Amazon CLI 发布组件。

您还可以使用 Amazon CloudFormation 从模板创建组件和其他 Amazon 资源。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的什么是Amazon CloudFormation?AWS::GreengrassV2::ComponentVersion

发布组件(GDK CLI)

按照本节中的说明,使用 GDK CLI 发布组件。GDK CLI 将构建构件上传到 S3 存储桶,更新配方中的构件 URI,并根据配方创建组件。您可以在 GDK CLI 配置文件中指定要使用的 S3 存储桶和区域。

如果您使用的是 GDK CLI v1.1.0 或更高版本,则可以指定 --bucket 参数来指定供 GDK CLI 上传组件构件的 S3 存储桶。如果未指定此参数,GDK CLI 会上传到名为 bucket-region-accountId 的 S3 存储桶,其中 bucketregion 是您在 gdk-config.json 中指定的值,accountId 是您的 Amazon Web Services 账户 ID。如果存储桶不存在,GDK CLI 将创建该存储桶。

重要

默认情况下,核心设备角色不允许访问 S3 存储桶。如果这是您首次使用此 S3 存储桶,则必须向角色添加权限,才能允许核心设备从 S3 存储桶中检索组件构件。有关更多信息,请参阅 允许访问 S3 存储桶中的组件构件

发布 Greengrass 组件(GDK CLI)
  1. 在命令提示符或终端中打开组件文件夹。

  2. 如果没有 Greengrass 组件,请先构建。component build 命令在组件文件夹的 greengrass-build 文件夹中生成配方和构件。运行以下命令。

    gdk component build
  3. 将该组件发布到 Amazon Web Services 云。组件发布命令将组件的构件上传到 Amazon S3,并使用每个构件的 URI 更新组件的配方。然后,它会在 Amazon IoT Greengrass 服务中创建组件。

    注意

    Amazon IoT Greengrass 在创建组件时计算每个构件的摘要。这意味着在创建组件后,无法修改 S3 存储桶中的构件文件。如果这样做,则包含此组件的部署会由于文件摘要不匹配而失败。如果修改构件文件,则必须创建新版本组件。

    如果您在 GDK CLI 配置文件中指定组件版本的 NEXT_PATCH,GDK CLI 会使用 Amazon IoT Greengrass 服务中尚不存在的下一个补丁版本。

    运行以下命令。

    gdk component publish

    输出会显示 GDK CLI 创建的组件版本。

    发布组件后,可以将组件部署到核心设备。有关更多信息,请参阅 将 Amazon IoT Greengrass 组件部署至设备

发布组件(Shell 命令)

按照以下步骤使用 Shell 命令和 Amazon Command Line Interface(Amazon CLI)发布组件。发布组件时,您将执行以下操作:

  1. 将组件构件发布到 S3 存储桶。

  2. 将每个构件的 Amazon S3 URI 添加到组件配方。

  3. 根据组件配方在 Amazon IoT Greengrass 中创建组件版本。

注意

您上传的每个组件版本都必须是唯一的。请务必上传正确的组件版本,因为上传后将无法对其进行编辑。

您可以按照以下步骤从开发计算机或 Greengrass 核心设备发布组件。

发布组件(Shell 命令)
  1. 如果组件使用 Amazon IoT Greengrass 服务中存在的版本,则必须更改该组件的版本。在文本编辑器中打开配方,增加版本并保存文件。选择反映您对组件所做更改的新版本。

    注意

    Amazon IoT Greengrass 使用组件的语义版本。语义版本遵循 major.minor.patch 编号系统。例如,版本 1.0.0 表示组件的第一个主要版本。有关更多信息,请参阅语义版本规范

  2. 如果组件有构件,请执行以下操作:

    1. 将组件构件发布到 Amazon Web Services 账户 中的 S3 存储桶。

      提示

      我们建议您在 S3 存储桶中构件的路径中包含组件名称和版本。此命名方案可以帮助您维护先前版本的组件所使用的构件,因此可以继续支持先前的组件版本。

      运行以下命令,将构件文件发布到 S3 存储桶。将 amzn-s3-demo-bucket 替换为存储的名称,然后将 artifacts/com.example.HelloWorld/1.0.0/artifact.py 替换为构件文件的路径。

      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      重要

      默认情况下,核心设备角色不允许访问 S3 存储桶。如果这是您首次使用此 S3 存储桶,则必须向角色添加权限,才能允许核心设备从 S3 存储桶中检索组件构件。有关更多信息,请参阅 允许访问 S3 存储桶中的组件构件

    2. 如果组件配方中不存在名为 Artifacts 的列表,请添加。每个清单中都会显示 Artifacts 列表,其中定义了组件在其支持的每个平台上的要求(或该组件对所有平台的默认要求)。

    3. 将每个构件添加到构件列表中,或更新现有构件的 URI。Amazon S3 URI 由存储桶名称和存储桶中构件对象的路径组成。构件的 Amazon S3 URI,应类似于以下示例。

      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py

    完成这些步骤后,您的配方应具有一个如下所示的 Artifacts 列表。

    JSON
    { ... "Manifests": [ { "Lifecycle": { ... }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py", "Unarchive": "NONE" } ] } ] }
    注意

    您可以为 ZIP 构件添加 "Unarchive": "ZIP" 选项,以将 Amazon IoT Greengrass Core 软件配置为在组件部署时解压缩构件。

    YAML
    ... Manifests: - Lifecycle: ... Artifacts: - URI: s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py Unarchive: NONE
    注意

    您可以使用 Unarchive: ZIP 选项将 Amazon IoT Greengrass Core 软件配置为在组件部署时解压缩 ZIP 构件。有关如何在组件中使用 ZIP 构件的更多信息,请参阅 artifacts:decompressedPath 配方变量

    有关配方的更多信息,请参阅Amazon IoT Greengrass 组件配方参考

  3. 使用 Amazon IoT Greengrass 控制台从配方文件创建组件。

    运行以下命令,从配方文件创建组件。此命令创建组件,并将其作为私有 Amazon IoT Greengrass 组件发布到您的 Amazon Web Services 账户 中。将 path/to/recipeFile 替换为配方文件的路径。

    aws greengrassv2 create-component-version --inline-recipe fileb://path/to/recipeFile

    复制响应中的 arn,以便在下一步中检查组件的状态。

    注意

    Amazon IoT Greengrass 在创建组件时计算每个构件的摘要。这意味着在创建组件后,无法修改 S3 存储桶中的构件文件。如果这样做,则包含此组件的部署会由于文件摘要不匹配而失败。如果修改构件文件,则必须创建新版本组件。

  4. Amazon IoT Greengrass 服务中的每个组件都有一个状态。运行以下命令,确认您在此过程中发布的组件版本的状态。将 com.example.HelloWorld1.0.0 替换为要查询的组件版本。将 arn 替换为上一步中的 ARN。

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

    此操作将返回一个包含组件元数据的响应。元数据中含有一个包含组件状态和任何错误(如果适用)的 status 对象。

    组件状态为 DEPLOYABLE 时,可以将组件部署到设备。有关更多信息,请参阅 将 Amazon IoT Greengrass 组件部署至设备