管理任務 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管理任務

使用任務通知裝置軟體或韌體更新。您可以使用AWS IoT 主控台 任務管理和控制 API 操作AWS Command Line InterfaceAWS SDKs來建立和管理任務。

任務的程式碼簽署

傳送程式碼至裝置時,若要讓裝置偵測程式碼在傳輸過程中是否遭到修改,我們建議您使用 AWS CLI對程式碼檔案進行簽署。如需相關說明,請參閱使用 AWS CLI建立和管理任務

如需詳細資訊,請參閱什麼是 的程式碼簽署 AWS IoT?

任務文件

建立任務之前,您必須建立任務文件。如果您使用 的程式碼簽署 AWS IoT,則必須將任務文件上傳到版本化的 Amazon S3 儲存貯體。如需建立 Amazon S3 儲存貯體並將檔案上傳至其中的詳細資訊,請參閱《Amazon S3 入門指南》中的 Amazon Simple Storage Service 入門

提示

如需任務文件範例,請參閱 AWS IoT SDK中適用於 的 job-agent.js 範例 JavaScript。

預先簽章 URLs

您的任務文件可以包含指向程式碼檔案 (或其他檔案) 的預先簽章 URL Amazon S3。預先簽章的 Amazon S3 僅在有限時間內URLs有效,並在裝置請求任務文件時產生。由於建立任務文件時URL未建立預先簽章,請改用URL任務文件中的預留位置。預留位置URL如下所示:

${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/<bucket>/<code file>}

其中:

  • bucket 是包含程式碼檔案的 Amazon S3 儲存貯體。

  • code file 是程式碼檔案的 Amazon S3 金鑰。

當裝置請求任務文件時, AWS IoT 會產生預先簽章的 URL,並將預留位置取代URL為預先簽章的 URL。您的任務文件接著會傳送到裝置。

IAM 角色,以授予從 S3 下載檔案的許可

當您建立使用預先簽章 Amazon S3 的任務時URLs,您必須提供 IAM角色。此角色必須授予自資料或更新儲存所在 Amazon S3 儲存貯體中下載檔案的許可。此角色也必須授與 AWS IoT 許可來擔任此角色。

您可以為預先簽章的 指定選用逾時URL。如需詳細資訊,請參閱 CreateJob

授予 AWS IoT 任務擔任您角色的許可
  1. 前往IAM主控台的角色中樞,然後選擇您的角色。

  2. 信任關係索引標籤上,選擇編輯信任關係,並將政策文件取代為下列 JSON。選擇 Update Trust Policy (更新信任政策)。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "iot.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  3. 建議您新增全域條件內容金鑰 aws:SourceArnaws:SourceAccount 至政策,保護自己免受混淆代理人問題的困擾。

    重要

    aws:SourceArn 必須符合以下格式:arn:aws:iot:region:account-id:*。請確定 region 符合您的 AWS IoT 區域和 account-id 符合您的客戶帳戶 ID。如需詳細資訊,請參閱預防跨服務混淆代理人

    { "Effect": "Allow", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:iot:*:123456789012:job/*" } } } ] }
  4. 如果您的任務使用 Amazon S3 物件的任務文件,請選擇許可並使用下列 JSON。這會新增一個政策,授予從 Amazon S3 儲存貯體下載檔案的許可。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your_S3_bucket/*" } ] }

已預先簽章URL供檔案上傳

如果您的裝置需要在任務部署期間將檔案上傳到 Amazon S3 儲存貯體,則可以在任務文件中包含下列預先簽章URL的預留位置:

${aws:iot:s3-presigned-url-upload:https://s3.region.amazonaws.com/<bucket>/<key>}

您可以在任務文件中的檔案上傳預留位置中${jobId},將 ${thingName}、 和 中每個 中的最多兩個預留關鍵字${executionNumber}作為key屬性URL。建立任務執行時,代表key屬性中預留關鍵字的本機預留位置將會剖析和取代。使用具有每個裝置專用預留關鍵字的本機預留位置,可確保從裝置上傳的每個檔案都是該裝置專用,且不會由相同任務部署目標之其他裝置的類似上傳檔案覆寫。如需在任務部署期間針對上傳檔案的預先簽章URL預留位置進行本機預留位置疑難排解的資訊,請參閱 錯誤訊息的一般疑難排解

注意

Amazon S3 儲存貯體名稱不能包含代表上傳檔案預留關鍵字的本機預留位置。本機預留位置必須位於 key 屬性中。

當裝置收到 Amazon S3 預先簽章上傳時,此預先簽章URL預留位置會轉換為URL任務文件中的 Amazon S3 預先簽章上傳。 Amazon S3 您的裝置會使用此功能將檔案上傳至目的地 Amazon S3 儲存貯體。

注意

當上述預留位置 中未提供 Amazon S3 儲存貯體和金鑰時URL, AWS IoT 工作會自動產生每個裝置的金鑰${jobId},每個裝置最多使用兩個 ${thingName}、 和 ${executionNumber}

URL 使用 Amazon S3 版本控制預先簽署

保護存放在 Amazon S3 儲存貯體中的檔案的完整性,對於確保使用檔案對裝置機群進行安全任務部署至關重要。使用 Amazon S3 版本控制,您可以為存放在 Amazon S3 儲存貯體中的每個檔案變體新增版本識別碼,以追蹤檔案的每個版本。這可讓您深入了解使用 AWS IoT 任務部署到裝置機群的檔案版本。如需使用版本控制之 Amazon S3 儲存貯體的詳細資訊,請參閱在 Amazon S3 儲存貯體中使用版本控制。

如果檔案存放在 Amazon S3 中,且任務文件包含預先簽章的URL預留位置, AWS IoT Jobs 將使用 Amazon S3 儲存貯體、儲存貯體金鑰和存放在 Amazon S3 儲存貯體中的檔案版本,在URL任務文件中產生預先簽章的 。在任務文件中URL產生的此預先簽章將取代任務文件中原始的預先簽章URL預留位置。如果您更新存放在 Amazon S3 儲存貯體中的檔案,versionId則會建立新的檔案版本和後續版本,以表示所做的更新,並提供在未來任務部署中鎖定該特定檔案的能力。

請參閱下列範例,了解使用 在您的URLs任務文件中預先簽署的 Amazon S3 之前和期間versionId

Amazon S3 預先簽章URL預留位置 (在任務部署之前)

//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://bucket-name.s3.region-code.amazonaws.com/key-name%3FversionId%3Dversion-id} //Path-style URL ${aws:iot:s3-presigned-url:https://s3.region-code.amazonaws.com/bucket-name/key-name%3FversionId%3Dversion-id}

Amazon S3 預先簽章 URL(在任務部署期間)

//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://sample-bucket-name.s3.us-west-2.amazonaws.com/sample-code-file.png%3FversionId%3Dversion1} //Path-style ${aws:iot:s3-presigned-url:https://s3.us-west-2.amazonaws.com/sample-bucket-name/sample-code-file.png%3FversionId%3Dversion1}

如需 Amazon S3 虛擬託管和路徑樣式物件 的詳細資訊URLs,請參閱 Virtual-hosted-style 請求路徑樣式請求

注意

如果您想要附加versionId至 Amazon S3 預先簽章的 URL,則必須符合支援 的URL編碼 AWS SDK for Java 2.x。如需詳細資訊,請參閱剖析 Amazon S3 URIs 從第 1 版至第 2 版的變更