Criação de uma atualização do OTA com a AWS CLI
Ao usar a AWS CLI para criar uma atualização OTA, você:
-
Assinar digitalmente a imagem de firmware.
-
Criar um fluxo da imagem de firmware assinada digitalmente.
-
Iniciar um trabalho de atualização OTA.
Assinatura digital da atualização de firmware
Ao usar a AWS CLI para executar atualizações OTA, você pode usar o Code Signing para AWS IoT ou pode assinar a atualização de firmware por conta própria. Para obter uma lista dos algoritmos de hashing e assinatura criptográfica compatíveis com o Code Signing para AWS IoT, consulte SigningConfigurationOverrides. Se desejar usar um algoritmo de criptografia que não é compatível com o Code Signing para AWS IoT, você precisará assinar o binário de firmware antes de fazer upload dele para o Amazon S3.
Assinatura de imagem de firmware com o Code Signing para AWS IoT
Para assinar a imagem de firmware usando o Code Signing para AWS IoT, você pode usar um dos SDKs ou ferramentas da linha de comando da AWS
Depois de instalar e configurar as ferramentas de assinatura de código, copie a imagem de firmware não assinada no bucket do Amazon S3 e inicie um trabalho de assinatura de código com os seguintes comandos da AWS CLI. O comando put-signing-profile cria um perfil de assinatura de código reutilizável. O comando start-signing-job inicia o trabalho de assinatura.
aws signer put-signing-profile \ --profile-nameyour_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
nota
your-source-bucket-name e your-destination-bucket-name podem ser o mesmo bucket do Amazon S3.
Esses são os parâmetros para os comandos put-signing-profile e start-signing-job:
source-
Especifica o local do firmware não assinado em um bucket do S3.
-
bucketName: o nome do bucket do S3. -
key: a chave (nome do arquivo) do firmware no seu bucket do S3. -
version: a versão do S3 do firmware no seu bucket do S3. Isso é diferente da versão de firmware. Você pode encontrá-la navegando até o console do Amazon S3, escolhendo o bucket e, na parte superior da página, próximo a Versões, escolhendo Exibir.
-
destination-
O destino no dispositivo para o qual o firmware assinado no bucket do S3 será copiado. O formato deste parâmetro é o mesmo do parâmetro
source. signing-material-
O ARN do certificado de assinatura de código. Esse ARN é gerado quando você importa o certificado para o ACM.
signing-parameters-
Um mapa de pares de chave/valor para assinatura. Podem incluir qualquer informação que você deseja usar durante a assinatura.
nota
Esse parâmetro é necessário ao criar um perfil de assinatura de código para assinar atualizações OTA com o Code Signing para AWS IoT.
platform-
O
platformIdda plataforma de hardware para a qual você está distribuindo a atualização OTA.Para retornar uma lista das plataformas disponíveis e seus valores de
platformId, use o comandoaws signer list-signing-platforms.
O trabalho de assinatura inicia e grava a imagem de firmware assinada no bucket de destino do Amazon S3. O nome do arquivo para a imagem de firmware assinada é um GUID. Você precisa desse nome de arquivo ao criar um fluxo. Você pode encontrar o nome do arquivo navegando até o console do Amazon S3 e escolhendo o bucket. Se você não vir um arquivo com um nome de arquivo GUID, atualize o navegador.
O comando exibe um ARN de trabalho e um ID de trabalho. Você precisará desses valores mais tarde. Para obter mais informações sobre o Code Signing para AWS IoT, consulte Code Signing para AWS IoT.
Assinatura de imagem de firmware manualmente
Assine digitalmente a imagem de firmware e faça upload da imagem de firmware assinada no bucket do Amazon S3.
Criação de um fluxo da atualização de firmware
Um fluxo é uma interface abstrata para dados que podem ser consumidos por um dispositivo. Um fluxo pode ocultar a complexidade de acessar dados armazenados em diferentes locais ou serviços baseados em nuvem diferentes. O serviço Gerenciador de atualizações OTA permite que você use vários dados armazenados em vários locais no Amazon S3 para realizar uma atualização OTA.
Ao criar uma atualização OTA em AWS IoT, você também pode criar um fluxo que contém a atualização de firmware assinada. Crie um arquivo JSON (stream.json) que identifique a imagem de firmware assinada. O arquivo JSON deve conter o seguinte:
[ { "fileId":"your_file_id", "s3Location":{ "bucket":"your_bucket_name", "key":"your_s3_object_key" } } ]
Estes são os atributos no arquivo JSON:
fileId-
Um inteiro arbitrário entre 0 a 255 que identifica a imagem de firmware.
s3Location-
O bucket e a chave para o firmware ser transmitido.
bucket-
O bucket do Amazon S3 no qual está armazenada a imagem de firmware não assinada.
key-
O nome do arquivo da imagem de firmware assinada no bucket do Amazon S3. Você pode encontrar esse valor no console do Amazon S3, observando o conteúdo do bucket.
Se você estiver usando o Code Signing para AWS IoT, o nome do arquivo será um GUID gerado pelo Code Signing para AWS IoT.
Use o comando create-stream AWS CLI da para criar um fluxo.
aws iot create-stream \ --stream-idyour_stream_id\ --descriptionyour_description\ --files file://stream.json\ --role-arnyour_role_arn
Estes são os argumentos para o comando create-stream da AWS CLI:
stream-id-
Uma string arbitrária para identificar o fluxo.
description-
Uma descrição opcional do fluxo.
files-
Uma ou mais referências a arquivos JSON que contêm dados sobre imagens de firmware a serem transmitidas. O arquivo JSON deve conter os atributos a seguir:
fileId-
Um ID de arquivo arbitrário.
s3Location-
O nome do bucket onde a imagem de firmware assinada está armazenada e a chave (nome do arquivo) da imagem de firmware assinada.
bucket-
O bucket do Amazon S3 onde a imagem de firmware assinada está armazenada.
key-
A chave (nome do arquivo) da imagem de firmware assinada.
Quando você usa o Code Signing para AWS IoT, essa chave é um GUID.
Veja a seguir um exemplo de arquivo
stream.json.[ { "fileId":123, "s3Location": { "bucket":"codesign-ota-bucket", "key":"48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6" } } ] role-arn-
O perfil de serviço OTA que também concede acesso ao bucket do Amazon S3 em que a imagem do firmware está armazenada.
Para encontrar a chave de objeto do Amazon S3 da imagem de firmware assinada, use o comando aws signer describe-signing-job --job-id
my-job-id, em que my-job-id é o ID do trabalho exibido pelo comando create-signing-job da AWS CLI. A saída do comando describe-signing-job contém a chave da imagem de firmware assinada.
... text deleted for brevity ... "signedObject": { "s3": { "bucketName": "ota-bucket", "key": "7309da2c-9111-48ac-8ee4-5a4262af4429" } } ... text deleted for brevity ...
Criação de uma atualização do OTA
Use o comando create-ota-update da AWS CLI para criar um trabalho de atualização OTA.
nota
Não use nenhuma informação pessoal identificável (PII) no ID de trabalho de atualização OTA. Exemplos de informações de identificação pessoal incluem:
-
Nomes.
-
Endereços IP.
-
Endereços de e-mail.
-
Locais.
-
Dados bancários.
-
Informações médicas.
aws iot create-ota-update \ --ota-update-idvalue\ [--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-jsonFormato de
{ "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" } ] }
Name |
Tipo |
Descrição |
|---|---|---|
|
string (máx: 128 mín:1) |
O ID da atualização OTA a ser criado. |
|
string (máx: 2028) |
A descrição da atualização OTA. |
|
list |
Os dispositivos de destino para receber atualizações OTA. |
|
list |
O protocolo usado para transferir a imagem de atualização OTA. Os valores válidos são [HTTP], [MQTT], [HTTP, MQTT]. Quando HTTP e MQTT são especificados, o dispositivo de destino pode escolher o protocolo. |
|
string |
Especifica se a atualização continuará a ser executada (CONTINUOUS) ou se será concluída depois que todas as coisas especificadas como destinos tiverem concluído a atualização (SNAPSHOT). Se contínua, a atualização também poderá ser executada em uma coisa quando uma alteração for detectada em um destino. Por exemplo, uma atualização será executada em uma coisa quando a coisa for adicionada a um grupo de destinos, mesmo depois da atualização ter sido concluída por todas as coisas originalmente no grupo. Valores válidos: CONTINUOUS | SNAPSHOT. enum: CONTINUOUS | SNAPSHOT |
|
Configuração da distribuição de atualizações OTA. |
|
|
integer (máx: 1000 mín:1) |
O número máximo de execuções de trabalhos de atualizações OTA iniciadas por minuto. |
|
A taxa de aumento para a implantação de um trabalho. Esse parâmetro permite definir um aumento na taxa exponencial para a implantação de um trabalho. |
|
|
integer (máx: 1000 mín:1) |
O número mínimo de coisas que serão notificadas de um serviço pendente, por minuto, no início da implantação do trabalho. Esta é a taxa inicial da implantação. |
|
|
Os critérios para iniciar o aumento na taxa de implantação de um trabalho. AWS IoTO oferece suporte a até um dígito após o ponto decimal (por exemplo, 1,5, mas não 1,55). |
|
|
|
integer (mín:1) |
Quando esse número de coisas tiver sido notificado, ele iniciará um aumento na taxa de implantação. |
|
|
integer (mín:1) |
Quando esse número de coisas tiver sido bem-sucedido na execução de trabalho, ele iniciará um aumento na taxa de implantação. |
|
Informações da configuração de pre-signed URLs. |
|
|
|
longo |
Por quanto tempo (em segundos) as pre-signed URLs são válidas. Os valores válidos são 60 – 3600, o valor padrão é 1800 segundos. Os pre-signed URLs são gerados quando uma solicitação para o documento de trabalho é recebida. |
|
|
Os critérios que determinam quando e como ocorre a interrupção de um trabalho. |
|
|
|
list |
A lista de critérios que determinam quando e como interromper o trabalho. |
|
|
string |
O tipo de falhas de execução de trabalho que podem iniciar uma interrupção. enum: FAILED | REJECTED | TIMED_OUT | ALL |
|
|
string |
O tipo de ação do trabalho a ser executada para iniciar a interrupção. enum: CANCEL |
|
|
integer (mín:1) |
O número mínimo de coisas que devem receber notificações de execução de trabalho antes que ele possa ser interrompido. |
|
|
Especifica o tempo que cada dispositivo tem para concluir a execução do trabalho. Um temporizador é iniciado quando o status da execução do trabalho é definido como |
|
|
|
longo |
Especifica o tempo, em minutos, que este dispositivo tem para concluir a execução do trabalho. O intervalo de tempo limite pode estar em qualquer lugar entre 1 minuto e 7 dias (1 a 10.080 minutos). O temporizador em andamento não pode ser atualizado e será aplicado a todas as execuções do trabalho. Sempre que uma execução de trabalho permanecer com o status IN_PROGRESS por mais tempo que esse intervalo, a execução falhará e alternará para o status |
|
|
list |
Os arquivos a serem transmitidos pela atualização OTA. |
|
|
string |
O nome do arquivo. |
|
|
integer range- máx.: 255, mín.: 0 |
Um valor inteiro que você pode incluir no documento de trabalho para permitir que os dispositivos identifiquem o tipo de arquivo recebido da nuvem. |
|
|
string |
A versão do arquivo. |
|
|
O local do firmware atualizado. |
|
|
|
O stream que contém a atualização OTA. |
|
|
|
string (máx: 128 mín:1) |
O ID do fluxo. |
|
|
integer (máx: 255 mín:0) |
O ID de um arquivo associado a um fluxo. |
|
|
O local do firmware atualizado no S3. |
|
|
|
string (mín:1) |
O bucket do S3. |
|
|
string (mín:1) |
A chave de S3. |
|
|
string |
A versão do bucket do S3. |
|
|
O método de assinatura do código do arquivo. |
|
|
|
string |
O ID da AWSSignerJob que foi criado para assinar o arquivo. |
|
|
Descreve o trabalho de assinatura de código. |
|
|
|
Descreve o perfil de assinatura de código. |
|
|
|
string |
ARN de certificado. |
|
|
string |
A plataforma de hardware do dispositivo. |
|
|
string |
A localização do certificado de assinatura de código no dispositivo. |
|
|
string |
O nome do perfil de assinatura de código. |
|
|
O local para gravar o arquivo de código assinado. |
|
|
|
Descreve o local no S3 do firmware atualizado. |
|
|
|
string (mín:1) |
O bucket do S3 que contém o firmware atualizado. |
|
|
string |
O prefixo do S3. |
|
|
Um método personalizado para assinar um arquivo por código. |
|
|
|
A assinatura do arquivo. |
|
|
|
blob |
A representação binária codificada em base64 da assinatura por código. |
|
|
A cadeia de certificados. |
|
|
|
string |
O nome do certificado. |
|
|
string |
A representação binária codificada em base64 da cadeia de certificados de assinaturas por código. |
|
|
string |
O algoritmo de hash usado para assinar o arquivo por código. |
|
|
string |
O algoritmo de assinatura usado para assinar o arquivo por código. |
|
|
mapear |
Uma lista de pares nome/atributo. |
|
|
string (máx: 2048 mín:20) |
O perfil do IAM que concede acesso ao AWS IoT para o Amazon S3, os trabalhos do AWS IoT e os recursos do AWS Code Signing para criar um trabalho de atualização OTA. |
|
|
mapear |
Uma lista de parâmetros de atualização OTA adicionais que são pares nome-valor. |
|
|
list |
Metadados que podem ser usados para gerenciar atualizações. |
|
|
string (máx: 128 mín:1) |
A chave da tag. |
|
|
string (máx: 256 mín:1) |
O valor da tag. |
Resultado
{ "otaUpdateId": "string", "awsIotJobId": "string", "otaUpdateArn": "string", "awsIotJobArn": "string", "otaUpdateStatus": "string" }
|
Name |
Tipo |
Descrição |
|---|---|---|
|
|
string (máx: 128 mín:1) |
O ID da atualização OTA |
|
|
string |
O ID do trabalho do AWS IoT associado à atualização OTA. |
|
|
string |
O ARN da atualização OTA. |
|
|
string |
O ARN do trabalho do AWS IoT associado à atualização OTA. |
|
|
string |
O status da atualização OTA. enum: CREATE_PENDING | CREATE_IN_PROGRESS | CREATE_COMPLETE | CREATE_FAILED |
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update que utiliza o Code Signing para AWS IoT.
[ { "fileName": "firmware.bin", "fileType": 1, "fileLocation": { "stream": { "streamId": "004", "fileId":123 } }, "codeSigning": { "awsSignerJobId": "48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6" } } ]
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update da AWS CLI que usa um arquivo em linha para fornecer material de assinatura de código personalizado.
[ { "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" } } } ]
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update da AWS CLI que permite que o FreeRTOS OTA inicie um trabalho de assinatura de código e crie um perfil de assinatura de código e fluxo.
[ { "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" } } } } } ]
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update da AWS CLI que cria uma atualização OTA que inicia um trabalho de assinatura de código com um perfil existente e usa o fluxo especificado.
[ { "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" } } } } } ]
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update da AWS CLI que permite que o FreeRTOS OTA crie um fluxo com um ID de trabalho de assinatura de código existente.
[ { "fileName": "your_firmware_path_on_device", "fileType": 1, "fileVersion": "1", "codeSigning":{ "awsSignerJobId": "your_signer_job_id" } } ]
Veja a seguir um exemplo de um arquivo JSON transmitido para o comando create-ota-update da AWS CLI que cria uma atualização OTA. A atualização cria um fluxo a partir do objeto especificado do S3 e usa a assinatura de código personalizado.
[ { "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" } } } ]
Listagem de atualizações do OTA
Você pode usar o comando list-ota-updates da AWS CLI para obter uma lista de todas as atualizações OTA.
aws iot list-ota-updates
A saída do comando list-ota-updates parece com o exemplo a seguir.
{ "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 } ] }
Obtenção de informações sobre uma atualização OTA
Você pode usar o comando get-ota-update da AWS CLI para obter o status da criação ou exclusão de uma atualização OTA.
aws iot get-ota-update --ota-update-idyour-ota-update-id
A saída do comando get-ota-update é semelhante ao exemplo a seguir.
{ "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" } }
Os valores retornados para otaUpdateStatus incluem o seguinte:
CREATE_PENDING-
A criação de uma atualização OTA está pendente.
CREATE_IN_PROGRESS-
Uma atualização OTA está sendo criada.
CREATE_COMPLETE-
Uma atualização OTA foi criada.
CREATE_FAILED-
A criação de uma atualização OTA falhou.
DELETE_IN_PROGRESS-
Uma atualização OTA está sendo excluída.
DELETE_FAILED-
A exclusão de uma atualização OTA falhou.
nota
Para obter o status de execução de uma atualização OTA após sua criação, você precisará usar o comando describe-job-execution. Para obter mais informações, consulte Descrever a execução do trabalho.
Exclusão de dados relacionados ao OTA
No momento, não é possível usar o console da AWS IoT para excluir fluxos ou atualizações OTA. Você pode usar a AWS CLI para excluir fluxos, atualizações OTA e trabalhos da AWS IoT criados durante uma atualização OTA.
Exclusão de um fluxo do OTA
Quando você cria uma atualização OTA que usa MQTT, você pode usar a linha de comando ou o console da AWS IoT para criar um fluxo para dividir o firmware em pedaços para que ele possa ser enviado pelo MQTT. Você pode excluir esse fluxo com o comando delete-stream da AWS CLI, conforme mostrado no exemplo a seguir.
aws iot delete-stream --stream-idyour_stream_id
Como excluir uma atualização do OTA
Quando você cria uma atualização OTA, são criados:
-
Uma entrada no banco de dados de trabalhos de atualização OTA.
-
Um trabalho da AWS IoT para executar a atualização.
-
Uma execução de trabalho da AWS IoT para cada dispositivo que está sendo atualizado.
O comando delete-ota-update exclui a entrada somente no banco de dados de trabalhos de atualização OTA. É necessário usar o comando delete-job para excluir o trabalho da AWS IoT.
Use o comando delete-ota-update para excluir uma atualização OTA.
aws iot delete-ota-update --ota-update-idyour_ota_update_id
ota-update-id-
O ID da atualização OTA a ser excluído.
delete-stream-
Exclui o fluxo associado à atualização OTA.
force-delete-aws-job-
Exclui o trabalho da AWS IoT associado à atualização OTA. Se esse sinalizador não estiver definido e o trabalho estiver no estado
In_Progress, o trabalho não será excluído.
Exclusão de um trabalho da IoT criado para uma atualização do OTA
O FreeRTOS cria um trabalho do AWS IoT quando você cria uma atualização OTA. Uma execução de trabalho também é criada para cada dispositivo que processa o trabalho. Você pode usar o comando delete-job da AWS CLI para excluir um trabalho e as execuções de trabalho associadas.
aws iot delete-job --job-idyour-job-id--no-force
O parâmetro no-force especifica que somente os trabalhos que estão em estado terminal (COMPLETED ou CANCELED) podem ser excluídos. Você pode excluir um trabalho que está em um estado não terminal, transmitindo o parâmetro force. Para obter mais informações, consulte API DeleteJob.
nota
A exclusão de um trabalho com o status IN_PROGRESS interrompe todas as execuções de trabalho que estão em IN_PROGRESS nos dispositivos e pode resultar na permanência de um dispositivo em um estado não determinista. Certifique-se de que cada dispositivo que esteja executando um trabalho que foi excluído possa retornar a um estado conhecido.
Dependendo do número de execuções de trabalho criadas para o trabalho e de outros fatores, pode levar alguns minutos para excluir um trabalho. Enquanto o trabalho estiver sendo excluído, seu status será DELETION_IN_PROGRESS. A tentativa de excluir ou cancelar um trabalho cujo status já seja DELETION_IN_PROGRESS resulta em um erro.
Você pode usar a delete-job-execution para excluir uma execução de trabalho. Você pode querer excluir uma execução de trabalho quando um pequeno número de dispositivos não puder processar um trabalho. Isso exclui a execução do trabalho de um único dispositivo, conforme mostrado no exemplo a seguir.
aws iot delete-job-execution --job-idyour-job-id--thing-nameyour-thing-name--execution-numberyour-job-execution-number--no-force
Assim como ocorre com o comando delete-job da AWS CLI, você pode transmitir o parâmetro --force ao delete-job-execution para forçar a exclusão de um trabalho de execução. Para obter mais informações, consulte API DeleteJobExecution.
nota
A exclusão de uma execução de trabalho com o status IN_PROGRESS interrompe todas as execuções de trabalho que estão em IN_PROGRESS nos dispositivos e pode resultar na permanência de um dispositivo em um estado não determinista. Certifique-se de que cada dispositivo que esteja executando um trabalho que foi excluído possa retornar a um estado conhecido.
Para obter mais informações sobre como usar a aplicação de demonstração de atualização OTA, consulte Aplicação de demonstração de atualizações remotas.