任務工作流程 - AWS IoT Core

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

任務工作流程

以下顯示了任務工作流程中從開始新任務到報告任務執行完成狀態的各個步驟。

開始新任務

建立新工作後,J AWS IoT obs 會針對每個目標裝置發佈有關$aws/things/thing-name/jobs/notify主題的訊息。

訊息包含下列資訊:

{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }

當任務執行排入佇列時,裝置就會收到這個以 '$aws/things/thingName/jobs/notify' 為主題的訊息。

注意

對於設有選擇性 SchedulingConfig 的任務,任務會維持 SCHEDULED 的初始狀態。當任務達到選定的 startTime 時,會發生下列情形:

  • 任務狀態將更新為 IN_PROGRESS

  • 任務會開始將任務文件推展至目標群組中的所有裝置。

取得任務資訊

若需取得更多有關任務執行的資訊,該裝置會呼叫 DescribeJobExecution MQTT API,且 includeJobDocument 欄位將設為 true (此為預設)。

如果要求成功, AWS IoT Jobs 服務會針對下列$aws/things/MyThing/jobs/0023/get/accepted主題發佈訊息:

{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }

如果要求失敗, AWS IoT Jobs 服務會發佈關於該$aws/things/MyThing/jobs/0023/get/rejected主題的訊息。

裝置現在具有可用於執行任務遠端操作的任務文件。如果任務文件包含 Amazon S3 預先簽章的 URL,則裝置可以使用此 URL 下載任務需要的所有檔案。

報告任務執行狀態

裝置執行工作時,可以呼叫 UpdateJobExecutionMQTT API 以更新工作執行的狀態。

例如,裝置可以藉由以 IN_PROGRESS 主題發佈下列訊息而將任務執行狀態更新為 $aws/things/MyThing/jobs/0023/update

{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }

任務會透過將訊息發佈至 $aws/things/MyThing/jobs/0023/update/accepted$aws/things/MyThing/jobs/0023/update/rejected 主題進行回應:

{ "clientToken":"client001", "timestamp":1476289222841 }

裝置可以透過呼叫 StartNextPendingJobExecution 來合併前兩個請求。這會取得並開始下一個待定任務執行,並能讓裝置更新任務執行狀態。此請求也會在任務執行待定時傳回任務文件。

如果工作包含 TimeoutConfig,則進行中的計時器會開始執行。您也可以設定呼叫時的值,以設定工作執行的步驟計stepTimeoutInMinutes時器UpdateJobExecution。步驟計時器僅適用於您更新的任務執行。您可以在每次更新任務執行時,為此計時器設定新值。您也可以在通話時建立步數計時器StartNextPendingJobExecution。如果任務執行維持在 IN_PROGRESS 狀態的時間超過步驟計時器隔時,任務執行就會失敗,並切換到終止的 TIMED_OUT 狀態。當您建立任務時,步驟計時器不會影響您設定的進行中計時器。

status 欄位可以設定為 IN_PROGRESSSUCCEEDEDFAILED。若任務執行已經處於結束狀態,您就無法更新其狀態。

報告執行完成

裝置完成執行工作時,會呼叫 UpdateJobExecutionMQTT API。如果任務成功,則將 status 設定為 SUCCEEDED,並在訊息酬載的 statusDetails 中以名稱值對的方式加入任務的其他相關資訊。任務執行完成時,執行中與步驟計時器會結束。

例如:

{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }

如果任務不成功,則將 status設定為 FAILED,並在 statusDetails 加入所發生錯誤的資訊:

{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
注意

statusDetails 屬性可以包含任意數量的名稱值對。

J AWS IoT obs 服務收到此更新時,會發佈有關$aws/things/MyThing/jobs/notify主題的訊息,指出工作執行已完成:

{ "timestamp":1476290692776, "jobs":{} }

額外任務

如果裝置還有其他待定的任務執行,則會包含在發佈至 $aws/things/MyThing/jobs/notify 的訊息中。

例如:

{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }