本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 建立OTA更新 AWS CLI
當您使用 AWS CLI 建立OTA更新時,您會:
-
數位簽署您的韌體映像。
-
建立您數位簽署韌體映像的串流。
-
啟動OTA更新任務。
數位簽署您的韌體更新
當您使用 AWS CLI 執行OTA更新時,您可以使用 的程式碼簽署 AWS IoT,也可以自行簽署韌體更新。如需 Code Signing for 支援的密碼編譯簽署和雜湊演算法清單 AWS IoT,請參閱 SigningConfigurationOverrides。如果您想要使用 Code Signing for 不支援的密碼編譯演算法 AWS IoT,您必須先簽署韌體二進位檔,才能將其上傳至 Amazon S3。
使用 Code Signing for 簽署您的韌體映像 AWS IoT
若要使用 的程式碼簽署來簽署韌體映像 AWS IoT,您可以使用其中一個 AWS SDKs或 命令列工具
安裝和設定程式碼簽署工具之後,請將未簽署的韌體映像複製到 Amazon S3 儲存貯體,並使用下列 AWS CLI 命令啟動程式碼簽署工作。put-signing-profile 命令會建立可重複使用的程式碼簽署描述檔。start-signing-job 命令會啟動簽署任務。
aws signer put-signing-profile \ --profile-name
your_profile_name
\ --signing-material certificateArn=arn:aws:acm::your-region
:your-aws-account-id
:certificate/your-certificate-id
\ --platformyour-hardware-platform
\ --signing-parameters certname=your_certificate_path_on_device
aws signer start-signing-job \ --source 's3={bucketName=
your_s3_bucket
,key=your_s3_object_key
,version=your_s3_object_version_id
}' \ --destination 's3={bucketName=your_destination_bucket
}' \ --profile-nameyour_profile_name
注意
your-source-bucket-name
以及 your-destination-bucket-name
可以是相同的 Amazon S3 儲存貯體。
這些是 put-signing-profile 和 start-signing-job 命令的參數:
source
-
指定 S3 儲存貯體中未簽署韌體的位置。
-
bucketName
:您 S3 儲存貯體的名稱。 -
key
:您 S3 儲存貯體中韌體的金鑰 (檔案名稱)。 -
version
:您 S3 儲存貯體中韌體的 S3 版本。這與您的韌體版本不同。您可以瀏覽至 Amazon S3 主控台、選擇儲存貯體,並在頁面頂端的版本 旁選擇顯示 來尋找它。
-
destination
-
S3 儲存貯體中簽署的韌體將複製到其裝置上的目的地。此參數的格式與
source
參數相同。 signing-material
-
您程式碼簽署憑證ARN的 。當您將憑證匯入 時ARN,就會產生此值ACM。
signing-parameters
-
用於簽署的鍵/值對映射。這些可包含任何您希望在簽署期間使用的資訊。
注意
當您建立程式碼簽署設定檔以使用 的程式碼簽署簽署OTA更新時,需要此參數 AWS IoT。
platform
-
您要向其分發OTA更新的硬體平台
platformId
的 。若要傳回可用平台及其
platformId
值的清單,請使用aws signer list-signing-platforms
命令。
簽署任務會啟動並將簽署的韌體映像寫入目的地 Amazon S3 儲存貯體。已簽署韌體映像的檔案名稱為 GUID。當您建立串流時,會需要此檔案名稱。您可以瀏覽至 Amazon S3 主控台並選擇儲存貯體來尋找檔案名稱。如果您看不到檔案名稱為 的檔案GUID,請重新整理瀏覽器。
命令會顯示任務ARN和任務 ID。您稍後會需要這些值。如需 程式碼簽署的詳細資訊 AWS IoT,請參閱 程式碼簽署 AWS IoT。
手動簽署您的韌體映像
以數位方式簽署您的韌體映像,並將已簽章的韌體映像上傳至您的 Amazon S3 儲存貯體。
建立您韌體更新的串流
串流是可以由裝置使用之資料的抽象介面。串流可以隱藏下列動作的複雜性:存取在不同位置或不同雲端型服務中存放的資料。OTA Update Manager 服務可讓您使用儲存在 Amazon S3 中不同位置的多個資料片段來執行OTA更新。
建立 AWS IoT OTA更新時,您也可以建立包含已簽署韌體更新的串流。建立可識別已簽署韌體映像JSON的檔案 (stream.json
)。JSON 檔案應包含下列項目。
[ { "fileId":"
your_file_id
", "s3Location":{ "bucket":"your_bucket_name
", "key":"your_s3_object_key
" } } ]
以下是 JSON 檔案中的屬性:
fileId
-
介於 0–255 之間的任意整數,可識別您的韌體映像。
s3Location
-
儲存貯體及用於串流的韌體鍵。
bucket
-
儲存未簽章韌體映像的 Amazon S3 儲存貯體。
key
-
Amazon S3 儲存貯體中已簽署韌體映像的檔案名稱。您可以在 Amazon S3 主控台中找到此值,方法是查看儲存貯體的內容。
如果您使用的是 的程式碼簽署 AWS IoT,則檔案名稱是由 的程式碼簽署GUID產生的 AWS IoT。
使用 create-stream AWS CLI 命令來建立串流。
aws iot create-stream \ --stream-id
your_stream_id
\ --descriptionyour_description
\ --files file://stream.json
\ --role-arnyour_role_arn
以下是 create-stream AWS CLI 命令的引數:
stream-id
-
用於識別串流的任意字串。
description
-
串流的選擇性說明。
files
-
一或多個參考JSON檔案,其中包含要串流之韌體映像的資料。JSON 檔案必須包含下列屬性:
fileId
-
任意的檔案 ID。
s3Location
-
儲存貯體名稱,其中存放了已簽署的韌體映像及已簽署韌體映像的鍵 (檔案名稱)。
bucket
-
存放已簽署韌體映像的 Amazon S3 儲存貯體。
key
-
已簽署韌體映像的鍵 (檔案名稱)。
當您使用 的程式碼簽署時 AWS IoT,此金鑰是 GUID。
以下是範例
stream.json
檔案。[ { "fileId":123, "s3Location": { "bucket":"codesign-ota-bucket", "key":"48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6" } } ]
role-arn
-
OTA 服務角色也會授予儲存韌體映像的 Amazon S3 儲存貯體存取權。
若要尋找已簽署韌體映像的 Amazon S3 物件金鑰,請使用 aws signer describe-signing-job --job-id my-job-id
命令,其中 my-job-id
是 create-signing-job AWS CLI 命令顯示的任務 ID。describe-signing-job 命令的輸出包含已簽署韌體映像的鍵。
... text deleted for brevity ... "signedObject": { "s3": { "bucketName": "ota-bucket", "key": "7309da2c-9111-48ac-8ee4-5a4262af4429" } } ... text deleted for brevity ...
建立OTA更新
使用 create-ota-update AWS CLI 命令來建立OTA更新任務。
注意
請勿在OTA更新任務 ID 中使用任何個人身分資訊 (PII)。個人識別資訊的範例包括:
-
名稱。
-
IP 地址。
-
電子郵件地址。
-
位置
-
銀行詳細資訊。
-
醫療資訊。
aws iot create-ota-update \ --ota-update-id
value
\ [--descriptionvalue
] \ --targetsvalue
\ [--protocolsvalue
] \ [--target-selectionvalue
] \ [--aws-job-executions-rollout-configvalue
] \ [--aws-job-presigned-url-configvalue
] \ [--aws-job-abort-configvalue
] \ [--aws-job-timeout-configvalue
] \ --filesvalue
\ --role-arnvalue
\ [--additional-parametersvalue
] \ [--tagsvalue
] \ [--cli-input-jsonvalue
] \ [--generate-cli-skeleton]
cli-input-json
格式
{ "otaUpdateId": "string", "description": "string", "targets": [ "string" ], "protocols": [ "string" ], "targetSelection": "string", "awsJobExecutionsRolloutConfig": { "maximumPerMinute": "integer", "exponentialRate": { "baseRatePerMinute": "integer", "incrementFactor": "double", "rateIncreaseCriteria": { "numberOfNotifiedThings": "integer", "numberOfSucceededThings": "integer" } } }, "awsJobPresignedUrlConfig": { "expiresInSec": "long" }, "awsJobAbortConfig": { "abortCriteriaList": [ { "failureType": "string", "action": "string", "thresholdPercentage": "double", "minNumberOfExecutedThings": "integer" } ] }, "awsJobTimeoutConfig": { "inProgressTimeoutInMinutes": "long" }, "files": [ { "fileName": "string", "fileType": "integer", "fileVersion": "string", "fileLocation": { "stream": { "streamId": "string", "fileId": "integer" }, "s3Location": { "bucket": "string", "key": "string", "version": "string" } }, "codeSigning": { "awsSignerJobId": "string", "startSigningJobParameter": { "signingProfileParameter": { "certificateArn": "string", "platform": "string", "certificatePathOnDevice": "string" }, "signingProfileName": "string", "destination": { "s3Destination": { "bucket": "string", "prefix": "string" } } }, "customCodeSigning": { "signature": { "inlineDocument": "blob" }, "certificateChain": { "certificateName": "string", "inlineDocument": "string" }, "hashAlgorithm": "string", "signatureAlgorithm": "string" } }, "attributes": { "string": "string" } } ], "roleArn": "string", "additionalParameters": { "string": "string" }, "tags": [ { "Key": "string", "Value": "string" } ] }
cli-input-json 欄位 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
名稱 |
Type |
描述 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:128;下限:1) |
要建立的OTA更新 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:2028) |
OTA 更新的說明。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
列出 |
以接收OTA更新為目標的裝置。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
列出 |
用於傳輸OTA更新映像的通訊協定。有效值為 【HTTP】、【MQTT】、【HTTP、MQTT】。同時指定 MQTT HTTP和 時,目標裝置可以選擇通訊協定。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
指定更新是否會繼續執行 (CONTINUOUS),或在指定為目標的所有項目完成更新 () 之後完成SNAPSHOT。如果是 CONTINUOUS,則在目標中偵測到變更時,更新也可能會運作於物件上。例如,當物件新增至目標群組,更新就會在物件上運作,即使該更新已被原本就在群組中的所有物件完成。有效值: CONTINUOUS | SNAPSHOT。 列舉: CONTINUOUS | SNAPSHOT |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
推出OTA更新的組態。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (上限:1000;下限:1) |
每分鐘啟動的OTA更新任務執行次數上限。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
任務推展的增加率。此參數可讓您為任務推展定義指數增加率。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (上限:1000;下限:1) |
在任務推展開始時,每分鐘通知待處理任務的最低物件數量。這是推展的初始率。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
任務啟動增加推展速率的條件。 AWS IoT 支援十進位後最多一個數字 (例如 1.5,但不支援 1.55)。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (下限:1) |
收到此物件數量通知時,它會啟動推展率的增加。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (下限:1) |
當此物件數量已在其任務執行中成功時,它會啟動推展率的增加。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
預先簽署 的組態資訊URLs。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
long |
預先簽署的時間長度 (以秒為單位) URLs 有效。有效值為 60 - 3600,預設值為 1800 秒。收到任務文件的請求時,URLs會產生預先簽署。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
決定任務停止發生的時間和方式的標準。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
列出 |
決定何時以及如何停止任務的條件清單。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
可以啟動任務停止的任務執行失敗類型。 列舉: FAILED | REJECTED | TIMED_OUT | ALL |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
啟動任務停止時要採取的任務動作類型。 列舉: CANCEL |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (下限:1) |
在停止任務之前,必須接收任務執行通知的物件數量下限。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
指定每個裝置必須完成其任務執行的時間量。任務執行狀態設定為 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
long |
指定此裝置必須完成這項任務執行的時間 (以分鐘為單位)。逾時間隔可介於 1 分鐘到 7 天之間 (1 到 10080 分鐘)。進行中的計時器無法更新,並會套用到任務的所有任務執行。當任務執行保持 IN_PROGRESS 狀態超過此間隔時,任務執行將會失敗並切換到終端機 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
列出 |
OTA 更新要串流的檔案。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
檔案名稱。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer 範圍 - 上限:255;下限:0 |
您可以包含在任務文件中的整數值,讓裝置識別從雲端接收的檔案類型。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
檔案版本。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
已更新韌體的位置。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
包含OTA更新的串流。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:128;下限:1) |
串流 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
integer (上限:255;下限:0) |
與串流建立關聯的檔案 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
S3 中已更新韌體的位置。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (下限:1) |
S3 儲存貯體。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (下限:1) |
S3 金鑰。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
S3 儲存貯體版本。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
檔案的代碼簽署方式。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
為簽署 檔案而建立的 AWSSignerJob 的 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
描述程式碼簽署任務。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
描述程式碼簽署描述檔。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
憑證 ARN。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
您裝置的硬體平台。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
程式碼簽署憑證在您裝置上的位置。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
程式碼簽署描述檔名稱。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
撰寫程式碼簽章檔案的位置。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
描述 S3 中已更新韌體的位置。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (下限:1) |
內含已更新韌體的 S3 儲存貯體。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
S3 字首。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
代碼簽署檔案的自訂方式。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
檔案的簽章。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
blob |
以 base64 編碼呈現的二進位代碼簽署簽章。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
憑證鏈。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
憑證名稱。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
以 base64 編碼呈現的二進位代碼簽署憑證鏈。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
用於以代碼簽署檔案的雜湊演算法。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
用於以代碼簽署檔案的簽章演算法。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
映射 |
名稱/屬性對清單。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:2048;下限:20) |
授予 Amazon S3、 AWS IoT 工作和 AWS 程式碼簽署資源 AWS IoT 存取權IAM的角色,以建立OTA更新任務。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
映射 |
其他OTA更新參數的清單,這些參數是 name-value 對。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
列出 |
用於管理更新的中繼資料。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:128;下限:1) |
標籤的金鑰。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:256;下限:1) |
標籤的值。 |
輸出
{ "otaUpdateId": "string", "awsIotJobId": "string", "otaUpdateArn": "string", "awsIotJobArn": "string", "otaUpdateStatus": "string" }
AWS CLI 輸出欄位 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
名稱 |
Type |
描述 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string (上限:128;下限:1) |
OTA 更新 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
與OTA更新相關聯的 AWS IoT 任務 ID。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
OTA 更新 ARN。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
與OTA更新ARN相關聯的 AWS IoT 任務。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
string |
OTA 更新狀態。 列舉:CREATE_PENDING | CREATE_IN_PROGRESS | CREATE_COMPLETE | CREATE_FAILED |
以下是傳入 create-ota-update命令JSON的檔案範例,該命令使用 的程式碼簽署 AWS IoT。
[ { "fileName": "firmware.bin", "fileType": 1, "fileLocation": { "stream": { "streamId": "004", "fileId":123 } }, "codeSigning": { "awsSignerJobId": "48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6" } } ]
以下是傳入 create-ota-update AWS CLI 命令JSON的檔案範例,該命令使用內嵌檔案來提供自訂程式碼簽署材料。
[ { "fileName": "firmware.bin", "fileType": 1, "fileLocation": { "stream": { "streamId": "004", "fileId": 123 } }, "codeSigning": { "customCodeSigning":{ "signature":{ "inlineDocument":"
your_signature
" }, "certificateChain": { "certificateName": "your_certificate_name
", "inlineDocument":"your_certificate_chain
" }, "hashAlgorithm":"your_hash_algorithm
", "signatureAlgorithm":"your_signature_algorithm
" } } } ]
以下是傳入 create-ota-update AWS CLI 命令JSON的檔案範例,允許 FreeRTOS OTA啟動程式碼簽署任務並建立程式碼簽署設定檔和串流。
[ { "fileName": "
your_firmware_path_on_device
", "fileType": 1, "fileVersion": "1", "fileLocation": { "s3Location": { "bucket": "your_bucket_name
", "key": "your_object_key
", "version": "your_S3_object_version
" } }, "codeSigning":{ "startSigningJobParameter":{ "signingProfileName": "myTestProfile
", "signingProfileParameter": { "certificateArn": "your_certificate_arn
", "platform": "your_platform_id
", "certificatePathOnDevice": "certificate_path
" }, "destination": { "s3Destination": { "bucket": "your_destination_bucket
" } } } } } ]
以下是傳入 create-ota-update AWS CLI 命令JSON的檔案範例,該命令會建立使用現有設定檔啟動程式碼簽署任務並使用指定串流的OTA更新。
[ { "fileName": "
your_firmware_path_on_device
", "fileType": 1, "fileVersion": "1", "fileLocation": { "s3Location": { "bucket": "your_s3_bucket_name
", "key": "your_object_key
", "version": "your_S3_object_version
" } }, "codeSigning":{ "startSigningJobParameter":{ "signingProfileName": "your_unique_profile_name
", "destination": { "s3Destination": { "bucket": "your_destination_bucket
" } } } } } ]
以下是傳入 create-ota-update AWS CLI 命令JSON的檔案範例,允許 FreeRTOS OTA建立具有現有程式碼簽署任務 ID 的串流。
[ { "fileName": "
your_firmware_path_on_device
", "fileType": 1, "fileVersion": "1", "codeSigning":{ "awsSignerJobId": "your_signer_job_id
" } } ]
以下是傳入建立OTA更新的create-ota-update AWS CLI 命令JSON的檔案範例。更新會從指定的 S3 物件建立串流,並使用自訂程式碼簽署。
[ { "fileName": "
your_firmware_path_on_device
", "fileType": 1, "fileVersion": "1", "fileLocation": { "s3Location": { "bucket": "your_bucket_name
", "key": "your_object_key
", "version": "your_S3_object_version
" } }, "codeSigning":{ "customCodeSigning": { "signature":{ "inlineDocument":"your_signature
" }, "certificateChain": { "inlineDocument":"your_certificate_chain
", "certificateName": "your_certificate_path_on_device
" }, "hashAlgorithm":"your_hash_algorithm
", "signatureAlgorithm":"your_sig_algorithm
" } } } ]
列出OTA更新
您可以使用 list-ota-updates AWS CLI 命令來取得所有OTA更新的清單。
aws iot list-ota-updates
list-ota-updates 命令的輸出看起來與以下內容相似。
{ "otaUpdates": [ { "otaUpdateId": "my_ota_update2", "otaUpdateArn": "arn:aws:iot:
us-west-2
:123456789012
:otaupdate/my_ota_update2", "creationDate": 1522778769.042 }, { "otaUpdateId": "my_ota_update1", "otaUpdateArn": "arn:aws:iot:us-west-2
:123456789012
:otaupdate/my_ota_update1", "creationDate": 1522775938.956 }, { "otaUpdateId": "my_ota_update", "otaUpdateArn": "arn:aws:iot:us-west-2
:123456789012
:otaupdate/my_ota_update", "creationDate": 1522775151.031 } ] }
取得OTA更新的相關資訊
您可以使用 get-ota-update AWS CLI 命令來取得OTA更新的建立或刪除狀態。
aws iot get-ota-update --ota-update-id
your-ota-update-id
get-ota-update 命令的輸出如下。
{ "otaUpdateInfo": { "otaUpdateId": "ota-update-001", "otaUpdateArn": "arn:aws:iot:
region
:123456789012:otaupdate/ota-update-001", "creationDate": 1575414146.286, "lastModifiedDate": 1575414149.091, "targets": [ "arn:aws:iot:region
:123456789012:thing/myDevice" ], "protocols": [ "HTTP" ], "awsJobExecutionsRolloutConfig": { "maximumPerMinute": 0 }, "awsJobPresignedUrlConfig": { "expiresInSec": 1800 }, "targetSelection": "SNAPSHOT", "otaUpdateFiles": [ { "fileName": "my_firmware.bin", "fileType": 1, "fileLocation": { "s3Location": { "bucket": "my-bucket", "key": "my_firmware.bin", "version": "AvP3bfJC9gyqnwoxPHuTqM5GWENt4iii" } }, "codeSigning": { "awsSignerJobId": "b7a55a54-fae5-4d3a-b589-97ed103737c2", "startSigningJobParameter": { "signingProfileParameter": {}, "signingProfileName": "my-profile-name", "destination": { "s3Destination": { "bucket": "some-ota-bucket", "prefix": "SignedImages/" } } }, "customCodeSigning": {} } } ], "otaUpdateStatus": "CREATE_COMPLETE", "awsIotJobId": "AFR_OTA-ota-update-001", "awsIotJobArn": "arn:aws:iot:region
:123456789012
:job/AFR_OTA-ota-update-001" } }
為 otaUpdateStatus
傳回的值包括下列項目:
CREATE_PENDING
-
OTA 更新建立擱置中。
CREATE_IN_PROGRESS
-
正在建立OTA更新。
CREATE_COMPLETE
-
已建立OTA更新。
CREATE_FAILED
-
建立OTA更新失敗。
DELETE_IN_PROGRESS
-
正在刪除OTA更新。
DELETE_FAILED
-
刪除OTA更新失敗。
注意
若要在建立OTA更新後取得更新執行狀態,您需要使用 describe-job-execution命令。如需詳細資訊,請參閱描述任務執行。
刪除 OTA相關資料
目前,您無法使用 AWS IoT 主控台刪除串流或OTA更新。您可以使用 AWS CLI 刪除更新期間建立的串流、OTA更新和 AWS IoT 任務OTA。
刪除OTA串流
當您建立使用 的OTA更新時MQTT,您可以使用命令列或 AWS IoT 主控台來建立串流,將韌體分解為區塊,以便透過 傳送MQTT。您可以使用 delete-stream AWS CLI 命令刪除此串流,如下列範例所示。
aws iot delete-stream --stream-id
your_stream_id
刪除OTA更新
當您建立OTA更新時,會建立下列項目:
-
OTA 更新任務資料庫中的項目。
-
執行更新 AWS IoT 的任務。
-
要更新的每個裝置 AWS IoT 的任務執行。
delete-ota-update 命令只會刪除OTA更新任務資料庫中的項目。您必須使用 delete-job 命令來刪除 AWS IoT 任務。
使用 delete-ota-update命令刪除OTA更新。
aws iot delete-ota-update --ota-update-id
your_ota_update_id
ota-update-id
-
要刪除的OTA更新 ID。
delete-stream
-
刪除與OTA更新相關聯的串流。
force-delete-aws-job
-
刪除與OTA更新相關聯的 AWS IoT 任務。若未設定此標記,並且任務正處於
In_Progress
狀態,便不會刪除任務。
刪除為OTA更新建立的 IoT 任務
建立OTA更新時,可免費RTOS建立 AWS IoT 任務。也會為每個裝置建立任務執行,處理任務。您可以使用 delete-job AWS CLI 命令來刪除任務及其相關聯的任務執行。
aws iot delete-job --job-id
your-job-id
--no-force
no-force
參數指定只能刪除處於終端機狀態 (COMPLETED 或 CANCELLED) 的任務。您可以透過傳遞 force
參數,來刪除並未處於終止狀態的任務。如需詳細資訊,請參閱 DeleteJob API。
注意
刪除狀態為 IN_PROGRESS 的任務會中斷裝置上的 IN_PROGRESS 的任何任務執行,並可能導致裝置處於非確定性狀態。請確保每個執行遭刪除任務的裝置都能復原至已知狀態。
視為任務建立的任務執行數及其他因素而定,刪除任務可能需要數分鐘。刪除任務時,其狀態為 DELETION_IN_PROGRESS。嘗試刪除或取消狀態為 DELETION_IN_PROGRESS 的任務會導致錯誤。
您可以利用 delete-job-execution 來刪除任務執行。您可能會想要在一小部分的裝置無法處理任務時刪除任務執行。這會刪除單一裝置的任務執行,如下列範例所示。
aws iot delete-job-execution --job-id
your-job-id
--thing-nameyour-thing-name
--execution-numberyour-job-execution-number
--no-force
與 delete-job AWS CLI 命令一樣,您可以將 --force
參數傳遞至 delete-job-execution,以強制刪除任務執行。如需詳細資訊,請參閱 DeleteJobExecution API。
注意
刪除狀態為 IN_PROGRESS 的任務執行會中斷裝置上的 IN_PROGRESS 的任何任務執行,並可能導致裝置處於非確定性狀態。請確保每個執行遭刪除任務的裝置都能復原至已知狀態。
如需使用OTA更新示範應用程式的詳細資訊,請參閱 Over-the-air 更新演示應用。