准备 Amazon IoT 工作 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

准备 Amazon IoT 工作

Amazon IoT Device Management Software Package Catalog 通过替换参数以及与 Amazon IoT 舰队索引、动态事物组和 Amazon IoT 事物的保留名为 shadow 的集成来扩展 Amazon IoT 任务。

注意

要使用 Software Package Catalog 提供的所有功能,您必须创建以下 Amazon Identity and Access Management (IAM) 角色和策略:Amazon IoT 部署软件包版本Amazon IoT 任务权限和更新保留名为 shadow 的任务权限。有关更多信息,请参阅准备安全性

Amazon IoT 任务的替代参数

您可以在 Amazon IoT 工作文档中使用替代参数作为占位符。当任务服务遇到替代参数时,它会将任务指向指定软件版本的属性以获取参数值。您可以使用此过程创建单个任务文档,并通过通用属性将元数据传递到任务中。例如,您可以通过软件包版本属性,将 Amazon Simple Storage Service (Amazon S3) URL、软件包 Amazon 资源名称(ARN)或签名传递到任务文档中。

在任务文档中,替代参数的格式应如下所示:

${aws:iot:package:<packageName>:version:<versionName>:attributes:<anyAttributeName>}

在此示例中,有一个名为 samplePackage 的软件包,它有一个名为 2.1.5 的软件包版本,该版本具有以下属性:

  • 名称:s3URL,值:https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile

    • 此属性标识存储在 Amazon S3 中的代码文件的位置。

  • 名称:signature,值:aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj

    • 此属性提供了设备所需的作为安全措施的代码签名值。有关更多信息,请参阅任务的代码签名注意:此属性是一个示例,而不是软件包目录或任务的必需属性。

对于 downloads,任务文档参数编写如下:

{ "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}" }

对于 signature,任务文档参数编写如下:

{ "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}" }

完整的任务文档编写如下:

{ ... "Steps": { "uninstall": ["samplePackage"], "download": [ { "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}" }, ], "signature": [ "samplePackage" : "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}" ] } }

完成替换后,将以下任务文档部署到设备上:

{ ... "Steps": { "uninstall": ["samplePackage"], "download": [ { "samplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile" }, ], "signature": [ "samplePackage" : "aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj" ] } }

有关 Amazon IoT 作业、创建作业文档和部署作业的更多信息,请参阅作业

准备任务文档和软件包版本以进行部署

创建软件包版本时,其draft状态表示正在准备部署。要为部署准备包版本,您必须创建任务文档,将文档保存到任务可以访问的位置(例如 Amazon S3),并确认包版本具有您希望任务文档使用的属性值。(注意:您只能在软件包版本draft处于状态时更新其属性。)

如果您对软件包版本感到满意,请通过 Amazon IoT 控制台中的软件包详细信息页面或发出 UpdatePackageVersionAPI 操作进行发布。然后,您可以在通过 Amazon IoT 控制台或发出 CreateJobAPI 操作创建任务时引用软件包版本。

部署时指定软件包和版本

部署 Amazon IoT 作业时,必须命名作业部署中作业文档中命名的相同软件包和软件包版本(destinationPackageVersions)。否则,您将收到一条错误消息,说明缺少软件包版本。

您可以加入未包含在任务文档内的其它软件包和软件包版本。如果您这样做,则该任务不会向设备提供有关如何处理这些文件的说明,并且设备应该知道怎么做。例如,如果其它文件包含设备可能引用的数据,则可以向设备发送这些文件。

通过 Amazon IoT 动态事物组定位工作

软件包目录与实例集索引Amazon IoT 任务Amazon IoT 动态事物组配合使用来筛选和定位实例集中的设备,以选择要部署到设备上的软件包版本。您可以根据设备当前的包裹信息运行队列索引查询,并将这些内容定位到 Amazon IoT 任务中。您也可以发布软件更新,但只能发布到符合条件的目标设备。例如,您可以指定只想将配置部署到当前运行 iot-device-client 1.5.09 的设备。有关更多信息,请参阅创建动态事物组

预留命名影子和软件包版本

如果已配置,则 Amazon IoT 任务可以在任务成功完成时更新名为 shadow ($package) 的事物的保留内容。如果这样做,则无需手动将软件包版本与事物的预留命名影子相关联。

在以下情况下,您可以选择手动将软件包版本关联或更新到事物的预留命名影子:

  • 您 Amazon IoT Core 无需关联已安装的软件包版本即可向其注册事物。

  • Amazon IoT 作业未配置为更新事物的预留名为 shadow。

  • 您使用内部流程将软件包版本发送到您的车队,该流程 Amazon IoT Core 在完成后不会更新。

注意

我们建议您使用 Amazon IoT Jobs 更新名为 shadow ($package) 的预留文件中的软件包版本。当 Amazon IoT Jobs 也配置为更新$package影子时,通过其他流程(例如手动或编程 API 调用)更新影子中的版本参数可能会导致设备上的实际版本与报告的预留命名影子的版本不一致。

您可以通过控制台或 UpdateThingShadow API 操作,将软件包版本添加到或更新为预留命名影子($package)。有关更多信息,请参阅将包版本与 Amazon IoT 事物关联

注意

将软件包版本与 Amazon IoT 事物关联不会直接更新设备软件。必须将软件包版本部署到设备才能更新设备软件。

卸载软件包及其软件包版本

$null是一个保留的占位符,它提示 Amazon IoT 作业服务从设备的预留名为 shadow $package 的软件包中删除现有的软件包和软件包版本。有关更多信息,请参阅预留命名影子

要使用此功能,请将 destinationPackageVersionAmazon 资源名称 (ARN) 末尾的版本名称替换为。$null之后,您必须指示您的服务从设备中删除该软件。

授权的 ARN 使用以下格式:

arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null

例如,

$ aws iot create-job \ ... \ --destinationPackageVersions ["arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/$null"]