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

准备 Amazon IoT Jobs

Amazon IoT Device Management 软件包目录通过替换参数以及与 Amazon IoT 实例集索引集成、动态事物组和 Amazon IoT 事物的预留命名影子来扩展 Amazon IoT Jobs。

注意

要使用软件包目录提供的所有功能,您必须创建以下 Amazon Identity and Access Management(IAM)角色和策略:用于部署软件包版本的 Amazon IoT Jobs 权限用于更新预留命名影子的 Amazon IoT Jobs 权限。有关更多信息,请参阅准备安全性

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 Jobs、创建任务文档和部署任务的更多信息,请参阅任务

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

创建软件包版本时,它处于草稿状态,表示正准备部署。要完成此过程,您必须创建任务文档,将文档保存到任务可以访问的位置(例如 Amazon S3),确认软件包版本具有您希望任务文档使用的属性值,然后发布软件包版本。

将软件包版本转换为已发布

完成任务文档并准备好部署后,请查看您的软件包版本及其属性,以确保您传递给任务的所有信息都包含在内且准确无误。当软件包版本处于 draft 状态时,您可以更新其属性。

查看软件包版本并对其配置感到满意后,通过 Amazon IoT 控制台中的软件包详细信息页面或发出 UpdatePackageVersion API 操作将其转换为 published

部署时指定软件包和版本

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

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

通过 Amazon IoT 动态事物组定位任务

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

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

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

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

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

  • Amazon IoT Jobs 未配置为更新事物的预留命名影子。

  • 您使用内部流程将软件包版本分派到您的实例集,该流程在完成后不会更新 Amazon IoT Core。

注意

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

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

注意

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

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

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

要使用此功能,请将 destinationPackageVersion Amazon 资源名称(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"]