本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在核心设备上开发完组件后,您可以将其上传至 AWS Cloud中的 AWS IoT Greengrass
服务。您也可以直接在 AWS IoT Greengrass 控制台
-
将组件构件上传至 S3 存储桶。
-
将每个构件的 Amazon Simple Storage Service(Amazon S3)URI 添加到组件配方中。
-
AWS IoT Greengrass 从组件配方中创建组件。
在本节中,您将在 Greengrass 核心设备上完成这些步骤,将 Hello World 组件上传到该服务。 AWS IoT Greengrass
-
在您的 AWS 账户中使用一个 S3 存储桶来托管 AWS IoT Greengrass 组件项目。当您将组件部署到核心设备时,设备会从存储桶中下载该组件的构件。
您可以使用现有的 S3 存储桶,也可以创建新存储桶。
-
在 Amazon S3 控制台
的存储桶下,选择创建存储桶。 -
对于配置,请输入唯一的存储桶名称。例如,您可以使用
greengrass-component-artifacts-
。region
-123456789012
123456789012
替换为您的 AWS 账户 IDregion
和您在本教程中 AWS 区域 使用的账户 ID。 -
对于AWS 区域,请选择您用于本教程的 AWS 区域。
-
选择创建存储桶。
-
在存储桶下,选择您创建的存储桶,然后将
hello_world.py
脚本上传至存储桶中的artifacts/com.example.HelloWorld/1.0.0
文件夹。有关将对象上传至 S3 存储桶的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的上传对象。 -
复制 S3 存储桶中
hello_world.py
对象的 S3 URI。此 URI 应该类似于以下示例。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称。s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
-
-
允许核心设备访问 S3 存储桶中的组件构件。
每台核心设备都有一个核心设备 IAM 角色,允许其与云进行交互 AWS IoT 并将日志发送到 AWS 云端。默认情况下,此设备角色不允许访问 S3 存储桶,因此您必须创建并附加一个允许核心设备从 S3 存储桶检索组件构件的策略。
如果设备的角色已允许访问 S3 存储桶,则可跳过此步骤。否则,请创建允许访问的 IAM 策略并将其附加到该角色,如下所示:
-
在 IAM 控制台
的导航菜单中,选择策略,然后选择创建策略。 -
在 JSON 选项卡中,将占位符内容替换为以下策略。将 amzn-s3-demo-bucket 替换为包含供核心设备下载的组件构件的 S3 存储桶名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
-
选择下一步。
-
在策略详细信息部分,对于名称,请输入
MyGreengrassV2ComponentArtifactPolicy
。 -
选择创建策略。
-
在 IAM 控制台
导航菜单中,选择角色,然后选择核心设备的角色名称。您在安装 C AWS IoT Greengrass ore 软件时指定了此角色名称。如果您未指定名称,则默认使用 GreengrassV2TokenExchangeRole
。 -
在权限下,选择添加权限,然后选择附加策略。
-
在添加权限页面,选中与您创建的策略
MyGreengrassV2ComponentArtifactPolicy
对应的复选框,然后选择添加权限。
-
-
使用组件配方在 AWS IoT Greengrass 控制台
中创建组件。 -
在 AWS IoT Greengrass 控制台
导航菜单中,选择组件,然后选择创建组件。 -
在组件信息下,选择以 JSON 格式输入配方。该占位符配方应该类似于以下示例。
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first AWS 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://amzn-s3-demo-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://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py" } ] } ] }
-
将每个
Artifacts
部分中的占位符 URI 替换为hello_world.py
对象的 S3 URI。 -
选择创建组件。
-
在 com.example 上。 HelloWorld组件页面上,验证组件的状态是否为可部署。
-
上传 Hello World 组件
-
使用您的中的 S3 存储桶 AWS 账户 来托管 AWS IoT Greengrass 组件项目。当您将组件部署到核心设备时,设备会从存储桶中下载该组件的构件。
您可以使用现有 S3 存储桶,也可以运行以下命令以创建存储桶。此命令使用您的 AWS 账户 ID 创建一个存储桶 AWS 区域 ,并形成一个唯一的存储桶名称。
123456789012
用你的 AWS 账户 ID 和region
你在本教程 AWS 区域 中使用的 ID 替换。aws s3 mb s3://greengrass-component-artifacts-
123456789012
-region
如果请求成功,命令将输出以下信息。
make_bucket: greengrass-component-artifacts-
123456789012
-region
-
允许核心设备访问 S3 存储桶中的组件构件。
每台核心设备都有一个核心设备 IAM 角色,允许其与核心设备交互 AWS IoT 并向其发送日志 AWS Cloud。默认情况下,此设备角色不允许访问 S3 存储桶,因此您必须创建并附加一个允许核心设备从 S3 存储桶检索组件构件的策略。
如果核心设备的角色已允许访问 S3 存储桶,则可跳过此步骤。否则,请创建允许访问的 IAM 策略并将其附加到该角色,如下所示:
-
创建一个名为
component-artifact-policy.json
的文件,并将以下 JSON 复制到该文件中。此策略允许访问 S3 存储桶中的所有文件。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
-
运行以下命令,从
component-artifact-policy.json
中的策略文档创建策略。从输出中的策略元数据复制策略 Amazon 资源名称(ARN)。您将在下一步中使用此 ARN 来将此策略附加到核心设备角色。
-
运行以下命令以将策略附加到核心设备角色。
GreengrassV2TokenExchangeRole
替换为核心设备的角色名称。您在安装 C AWS IoT Greengrass ore 软件时指定了此角色名称。将策略 ARN 替换为上一步中的 ARN。如果命令没有输出,则表示成功。核心设备现在可以访问您上传至 S3 存储桶的构件。
-
-
将 Hello World Python 脚本构件上传至 S3 存储桶。
运行以下命令将脚本上传到 AWS IoT Greengrass 核心上存在脚本的存储桶中的相同路径。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称。
如果请求成功,该命令将输出以
upload:
开头的行。 -
将构件的 Amazon S3 URI 添加到组件配方中。
Amazon S3 URI 由存储桶名称和存储桶中构件对象的路径组成。您脚本构件的 Amazon S3 URI 就是您在上一步中上传构件的 URI。此 URI 应该类似于以下示例。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称。
s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
要将构件添加到配方中,请添加一个包含 Amazon S3 URI 结构的
Artifacts
列表。 -
AWS IoT Greengrass 从配方中创建组件资源。运行以下命令以根据以二进制文件形式提供的配方创建组件。
如果请求成功,响应类似如下示例。
{ "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
,以便在下一步中检查组件的状态。注意
您还可以在 AWS IoT Greengrass 控制台
的组件页面上看到 Hello World 组件。 -
验证组件是否已创建且已准备好部署。创建组件后,其状态为
REQUESTED
。然后, AWS 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 组件现已在中可用 AWS IoT Greengrass。您可以将其部署回此 Greengrass 核心设备或其它核心设备。