本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 5:在 Amazon IoT Greengrass 服务中创建您的组件
在核心设备上开发完组件后,可以将其上传到中的 Amazon IoT Greengrass
服务 Amazon Web Services 云。您也可以直接在Amazon IoT Greengrass 控制台
-
将组件项目上传到 S3 存储桶。
-
将每个工件的亚马逊简单存储服务 (Amazon S3) 添加到URI组件配方中。
-
Amazon IoT Greengrass 从组件配方中创建组件。
在本节中,您将在 Greengrass 核心设备上完成这些步骤,将 Hello World 组件上传到该服务。 Amazon IoT Greengrass
-
在您的 Amazon 账户中使用一个 S3 存储桶来托管 Amazon IoT Greengrass 组件项目。当您将组件部署到核心设备时,设备会从存储桶中下载该组件的构件。
您可以使用现有的 S3 存储桶,也可以创建新的存储桶。
-
在 Amazon S3 控制台
的存储桶下,选择创建存储桶。 -
在存储桶名称中,输入唯一的存储桶名称。例如,您可以使用
greengrass-component-artifacts-
。Replace(替换)region
-123456789012
123456789012
使用您的 Amazon 账户 ID 和region
使用你在本教程中使用的。 Amazon Web Services 区域 -
对于Amazon 区域,请选择您用于本教程的 Amazon 区域。
-
选择创建存储桶。
-
在 Buc kets 下,选择您创建的存储桶,然后将
hello_world.py
脚本上传到存储桶中的artifacts/com.example.HelloWorld/1.0.0
文件夹。有关将对象上传到 S3 存储桶的信息,请参阅 Amazon 简单存储服务用户指南中的上传对象。 -
将
hello_world.py
对象的 S3 URI 复制到 S3 存储桶中。这URI应该与以下示例类似。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称。s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
-
-
允许核心设备访问 S3 存储桶中的组件工件。
每台核心设备都有一个核心设备IAM角色,允许它与云进行交互 Amazon IoT 并将日志发送到 Amazon 云端。默认情况下,此设备角色不允许访问 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 Amazon IoT Greengrass ore 软件时指定了此角色名称。如果您未指定名称,则默认为 GreengrassV2TokenExchangeRole
。 -
在权限下,选择添加权限,然后选择附加策略。
-
在添加权限页面上,选中您创建的
MyGreengrassV2ComponentArtifactPolicy
策略旁边的复选框,然后选择添加权限。
-
-
使用组件配方在Amazon IoT Greengrass 控制台
中创建组件。 -
在Amazon IoT Greengrass 控制台
导航菜单中,选择组件,然后选择创建组件。 -
在 “组件信息” 下,选择 “将配方输入为” 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}\"" }, "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
对象URI的 S3。 -
选择创建组件。
-
在 com.example 上。 HelloWorld组件页面上,验证组件的状态是否为可部署。
-
上传你的 Hello World 组件
-
使用您的中的 S3 存储桶 Amazon Web Services 账户 来托管 Amazon IoT Greengrass 组件项目。当您将组件部署到核心设备时,设备会从存储桶中下载该组件的构件。
您可以使用现有的 S3 存储桶,也可以运行以下命令来创建存储桶。此命令使用您的 Amazon Web Services 账户 ID 创建一个存储桶 Amazon Web Services 区域 ,并形成一个唯一的存储桶名称。Replace(替换)
123456789012
带上你的 Amazon Web Services 账户 身份证和region
使用你在本教程中使用的。 Amazon Web Services 区域aws s3 mb s3://greengrass-component-artifacts-
123456789012
-region
如果请求成功,该命令将输出以下信息。
make_bucket: greengrass-component-artifacts-
123456789012
-region
-
允许核心设备访问 S3 存储桶中的组件工件。
每台核心设备都有一个核心设备IAM角色,允许它与之交互 Amazon IoT 并向其发送日志 Amazon Web Services 云。默认情况下,此设备角色不允许访问 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,您可以使用此策略将此策略附加到核心设备角色。
-
运行以下命令将策略附加到核心设备角色。Replace(替换)
GreengrassV2TokenExchangeRole
使用核心设备的角色名称。您在安装 C Amazon IoT Greengrass ore 软件时指定了此角色名称。将策略ARN替换为上一步ARN中的策略。如果命令没有输出,则表示成功了。核心设备现在可以访问您上传到此 S3 存储桶的项目。
-
-
将 Hello World Python 脚本构件上传到 S3 存储桶。
运行以下命令将脚本上传到 Amazon 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 添加
Artifacts
包含结构的列表URI。 -
Amazon 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
从输出中复制,以便在下一步中检查组件的状态。注意
你还可以在Amazon IoT Greengrass 控制台
的 “组件” 页面上看到你的 Hello World 组件。 -
验证组件是否已创建并已准备好部署。创建组件时,其状态为
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" } ] }
你的 Hello World 组件现已在中可用 Amazon IoT Greengrass。您可以将其部署回此 Greengrass 核心设备或其他核心设备。