本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在构建或完成组件版本后,可以将其发布到 AWS IoT Greengrass 服务。然后,可以将其部署到 Greengrass 核心设备。
如果您使用 Greengrass 工具包 CLI(GDK CLI)开发和构建组件,则可以使用 GDK CLI 将该组件发布到 AWS Cloud。否则,请使用内置 Shell 命令和 AWS CLI 发布组件。
您还可以使用 AWS CloudFormation 从模板创建组件和其他 AWS 资源。有关更多信息,请参阅什么是 AWS CloudFormation? 和 AWS::GreengrassV2::ComponentVersion(在 AWS CloudFormation 用户指南中)。
发布组件(GDK CLI)
按照本节中的说明,使用 GDK CLI 发布组件。GDK CLI 将构建项目上传到 S3 存储桶,更新配方 URIs 中的项目,然后根据配方创建组件。您可以在 GDK CLI 配置文件中指定要使用的 S3 存储桶和区域。
如果您使用的是 GDK CLI v1.1.0 或更高版本,则可以指定 --bucket
参数来指定供 GDK CLI 上传组件构件的 S3 存储桶。如果您不指定此参数,GDK CLI 会上传到名称为
、其中bucket
-region
-accountId
bucket
和是您在中指定的值gdk-config.json
,并且region
是您的 ID accountId
的 S3 存储桶。 AWS 账户 如果存储桶不存在,GDK CLI 将创建该存储桶。
重要
默认情况下,核心设备角色不允许访问 S3 存储桶。如果这是您首次使用此 S3 存储桶,则必须向角色添加权限,才能允许核心设备从 S3 存储桶中检索组件构件。有关更多信息,请参阅 允许访问 S3 存储桶中的组件构件。
发布 Greengrass 组件(GDK CLI)
-
在命令提示符或终端中打开组件文件夹。
-
如果没有 Greengrass 组件,请先构建。component build 命令在组件文件夹的
greengrass-build
文件夹中生成配方和构件。运行以下命令。gdk component build
-
将该组件发布到 AWS Cloud。组件发布命令将组件的构件上传到 Amazon S3,并使用每个构件的 URI 更新组件的配方。然后,它会在 AWS IoT Greengrass 服务中创建组件。
注意
AWS IoT Greengrass 在创建组件时计算每个工件的摘要。这意味着在创建组件后,无法修改 S3 存储桶中的构件文件。如果这样做,则包含此组件的部署会由于文件摘要不匹配而失败。如果修改构件文件,则必须创建新版本组件。
如果您在 GDK CLI 配置文件中指定
NEXT_PATCH
组件版本,GDK CLI 将使用服务中尚不存在的下一个补丁版本。 AWS IoT Greengrass运行以下命令。
gdk component publish
输出会显示 GDK CLI 创建的组件版本。
发布组件后,可以将组件部署到核心设备。有关更多信息,请参阅 将 AWS IoT Greengrass 组件部署到设备。
发布组件(Shell 命令)
按照以下步骤使用 Shell 命令和 AWS Command Line Interface (AWS CLI)发布组件。发布组件时,您将执行以下操作:
-
将组件构件发布到 S3 存储桶。
-
将每个构件的 Amazon S3 URI 添加到组件配方。
-
AWS IoT Greengrass 从组件配方中创建组件版本。
注意
您上传的每个组件版本都必须是唯一的。请务必上传正确的组件版本,因为上传后将无法对其进行编辑。
您可以按照以下步骤从开发计算机或 Greengrass 核心设备发布组件。
发布组件(Shell 命令)
-
如果组件使用 AWS IoT Greengrass 服务中存在的版本,则必须更改该组件的版本。在文本编辑器中打开配方,增加版本并保存文件。选择反映您对组件所做更改的新版本。
注意
AWS IoT Greengrass 使用组件的语义版本。语义版本遵循 major.minor.patch 编号系统。例如,版本
1.0.0
表示组件的第一个主要版本。有关更多信息,请参阅语义版本规范。 -
如果组件有构件,请执行以下操作:
-
将组件的构件发布到您的 S3 存储桶中 AWS 账户。
提示
我们建议您在 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 存储桶中的组件构件。
-
如果组件配方中不存在名为
Artifacts
的列表,请添加。每个清单中都会显示Artifacts
列表,其中定义了组件在其支持的每个平台上的要求(或该组件对所有平台的默认要求)。 -
将每个构件添加到构件列表中,或更新现有构件的 URI。Amazon S3 URI 由存储桶名称和存储桶中构件对象的路径组成。您的工件的 Amazon S3 URIs 应与以下示例类似。
s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
完成这些步骤后,您的配方应具有一个如下所示的
Artifacts
列表。{
...
"Manifests": [ { "Lifecycle": {...
}, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py
", "Unarchive": "NONE" } ] } ] }注意
您可以为 ZIP 构件添加
"Unarchive": "ZIP"
选项,以将 AWS IoT Greengrass Core 软件配置为在组件部署时解压缩工件。有关配方的更多信息,请参阅AWS IoT Greengrass 组件配方参考。
-
-
使用 AWS IoT Greengrass 控制台从配方文件创建组件。
运行以下命令,从配方文件创建组件。此命令创建组件,并将其作为私有 AWS IoT Greengrass 组件发布到您的中 AWS 账户。替换为
path/to/recipeFile
配方文件的路径。aws greengrassv2 create-component-version --inline-recipe fileb://
path/to/recipeFile
复制响应中的
arn
,以便在下一步中检查组件的状态。注意
AWS IoT Greengrass 在创建组件时计算每个工件的摘要。这意味着在创建组件后,无法修改 S3 存储桶中的构件文件。如果这样做,则包含此组件的部署会由于文件摘要不匹配而失败。如果修改构件文件,则必须创建新版本组件。
-
AWS IoT Greengrass 服务中的每个组件都有一个状态。运行以下命令,确认您在此过程中发布的组件版本的状态。
1.0.0
用要查询的组件版本替换com.example.HelloWorld
和。将arn
替换为上一步中的 ARN。aws greengrassv2 describe-component --arn "arn:aws:greengrass:
region
:account-id
:components:com.example.HelloWorld
:versions:1.0.0
"此操作将返回一个包含组件元数据的响应。元数据中含有一个包含组件状态和任何错误(如果适用)的
status
对象。组件状态为
DEPLOYABLE
时,可以将组件部署到设备。有关更多信息,请参阅 将 AWS IoT Greengrass 组件部署到设备。