Cree y gestione trabajos mediante el AWS CLI - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree y gestione trabajos mediante el AWS CLI

En esta sección se describe cómo crear y administrar trabajos.

Creación de trabajos

Para crear un AWS IoT trabajo, utilice el CreateJob comando. El trabajo se pone en cola para la ejecución en los destinos (objetos o grupos de objetos) que especifique. Para crear un AWS IoT trabajo, necesita un documento de trabajo que pueda incluirse en el cuerpo de la solicitud o como un enlace a un documento de Amazon S3. Si el trabajo incluye la descarga de archivos mediante Amazon S3 prefirmadoURLs, necesitará un IAM rol: Amazon Resource Name (ARN) que tenga permiso para descargar el archivo y que conceda permiso al servicio AWS IoT Jobs para que asuma el rol.

Para obtener más información sobre la sintaxis al introducir la fecha y la hora mediante un API comando o el AWS CLI, consulte Timestamp.

Firma de código con trabajos

Si utiliza la firma de código para AWS IoT, debe iniciar un trabajo de firma de código e incluir el resultado en el documento de trabajo. Esto sustituirá al marcador de posición de firma de código del documento de trabajo, que es obligatorio como marcador de posición hasta que se sustituya por la ruta del archivo de código firmada mediante su Perfil de firma de código. El marcador de la firma de código tendrá el siguiente aspecto:

${aws:iot:code-sign-signature:s3://region.bucket/code-file@code-file-version-id}

Utilice el start-signing-jobcomando para crear un trabajo de firma de código. start-signing-jobdevuelve un identificador de trabajo. Utilice el comando describe-signing-job para obtener la ubicación de Amazon S3 donde se almacena la firma. Después podrá descargar la firma desde Amazon S3. Para obtener más información sobre trabajos de firma de código, consulte la sección sobre Firma de código para AWS IoT.

El documento de trabajo debe contener un URL marcador de posición prefirmado para el archivo de código y el resultado de la JSON firma colocado en un bucket de Amazon S3 mediante el start-signing-job comando:

{ "presign": "${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/bucket/image}", }

Creación de un trabajo con un documento de trabajo

El siguiente comando muestra cómo crear un trabajo mediante un documento de trabajo (job-document.json) almacenado en un bucket de Amazon S3 (jobBucket) y un rol con permiso para descargar archivos de Amazon S3 (S3DownloadRole).

aws iot create-job \ --job-id 010 \ --targets arn:aws:iot:us-east-1:123456789012:thing/thingOne \ --document-source https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json \ --timeout-config inProgressTimeoutInMinutes=100 \ --job-executions-rollout-config "{ \"exponentialRate\": { \"baseRatePerMinute\": 50, \"incrementFactor\": 2, \"rateIncreaseCriteria\": { \"numberOfNotifiedThings\": 1000, \"numberOfSucceededThings\": 1000}}, \"maximumPerMinute\": 1000}" \ --abort-config "{ \"criteriaList\": [ { \"action\": \"CANCEL\", \"failureType\": \"FAILED\", \"minNumberOfExecutedThings\": 100, \"thresholdPercentage\": 20}, { \"action\": \"CANCEL\", \"failureType\": \"TIMED_OUT\", \"minNumberOfExecutedThings\": 200, \"thresholdPercentage\": 50}]}" \ --presigned-url-config "{\"roleArn\":\"arn:aws:iam::123456789012:role/S3DownloadRole\", \"expiresInSec\":3600}"

El trabajo se ejecuta en thingOne.

El parámetro timeout-config opcional especifica la cantidad de tiempo que cada dispositivo tiene para finalizar su ejecución del trabajo. El temporizador comienza cuando el estado de ejecución del trabajo se establece en IN_PROGRESS. Si el estado de ejecución del trabajo no se establece en otro estado terminal antes de que se cumpla el plazo, se establecerá en TIMED_OUT.

El temporizador en curso no se puede actualizar y se aplica a todas las ejecuciones de trabajos para el trabajo. Cuando la ejecución de una tarea permanece en ese IN_PROGRESS estado durante más tiempo que este intervalo, se produce un error y pasa al TIMED_OUT estado terminal. AWS IoT también publica una MQTT notificación.

Para obtener más información acerca de cómo crear configuraciones sobre despliegues de trabajos y anulaciones, consulte Despliegue de trabajos y configuración de anulaciones.

nota

Los documentos de trabajo que está especificados como archivos de Amazon S3 se recuperan en el momento en el que crea el trabajo. Si cambia el contenido del archivo de Amazon S3 que usó como origen de su documento de trabajo después de haberlo creado, no cambia lo que se envía a los destinos del trabajo.

Actualización de un trabajo

Para actualizar un trabajo se utiliza el comando UpdateJob. Puede actualizar los campos description, presignedUrlConfig, jobExecutionsRolloutConfig, abortConfig y timeoutConfig para un trabajo.

aws iot update-job \ --job-id 010 \ --description "updated description" \ --timeout-config inProgressTimeoutInMinutes=100 \ --job-executions-rollout-config "{ \"exponentialRate\": { \"baseRatePerMinute\": 50, \"incrementFactor\": 2, \"rateIncreaseCriteria\": { \"numberOfNotifiedThings\": 1000, \"numberOfSucceededThings\": 1000}, \"maximumPerMinute\": 1000}}" \ --abort-config "{ \"criteriaList\": [ { \"action\": \"CANCEL\", \"failureType\": \"FAILED\", \"minNumberOfExecutedThings\": 100, \"thresholdPercentage\": 20}, { \"action\": \"CANCEL\", \"failureType\": \"TIMED_OUT\", \"minNumberOfExecutedThings\": 200, \"thresholdPercentage\": 50}]}" \ --presigned-url-config "{\"roleArn\":\"arn:aws:iam::123456789012:role/S3DownloadRole\", \"expiresInSec\":3600}"

Para obtener más información, consulte Despliegue de trabajos y configuración de anulaciones.

Cancelación de un trabajo

Para cancelar un trabajo se utiliza el comando CancelJob. La cancelación de un trabajo AWS IoT impide que se ejecuten nuevos trabajos para el trabajo. También cancela cualquier ejecución de un trabajo que se produzca en un QUEUED estado determinado. AWS IoT mantiene intactas las ejecuciones de tareas en estado terminal porque el dispositivo ya ha completado la tarea. Si el estado de la ejecución de un trabajo es IN_PROGRESS, también se mantendrá intacta a menos que se use el parámetro opcional --force.

El siguiente comando muestra cómo cancelar un trabajo con ID 010.

aws iot cancel-job --job-id 010

El comando muestra el resultado siguiente:

{ "jobArn": "string", "jobId": "string", "description": "string" }

Cuando se cancela un trabajo, se cancelan las ejecuciones de trabajos con estado QUEUED. Las ejecuciones de trabajos en estado IN_PROGRESS se cancelarán, pero solo si especifica el parámetro opcional --force. Las ejecuciones de trabajo con un estado terminal no se cancelarán.

aviso

Si se cancela un trabajo en estado IN_PROGRESS (al establecer el parámetro --force), se cancelarán las ejecuciones de trabajos en curso, y se hará que el dispositivo que está ejecutando el trabajo no pueda actualizar el estado de ejecución del trabajo. Actúe con precaución y asegúrese de que cada dispositivo que esté ejecutando un trabajo cancelado pueda recuperarse a un estado válido.

En última instancia, el estado de un trabajo cancelado o de una de sus ejecuciones es uniforme. AWS IoT deja de programar las ejecuciones de nuevos QUEUED trabajos y las ejecuciones de trabajos para ese trabajo en los dispositivos lo antes posible. Cambiar el estado de la ejecución de un trabajo a CANCELED puede llevar algo de tiempo, según el número de dispositivos y otros factores.

Si un trabajo se cancela porque cumple los criterios definidos por un objeto AbortConfig, el servicio añade valores rellenados automáticamente para los campos comment y reasonCode. Puede crear sus propios valores reasonCode cuando el trabajo se cancela por iniciativa del usuario.

Cancelación de una ejecución de trabajo

Para cancelar la ejecución de un trabajo en un dispositivo, utilice el comando CancelJobExecution. Este cancela la ejecución de un trabajo que se encuentra en estado QUEUED. Si desea cancelar la ejecución de un trabajo en curso, debe utilizar el parámetro --force.

El siguiente comando muestra cómo cancelar la ejecución de un trabajo del trabajo 010 que se ejecuta en myThing.

aws iot cancel-job-execution --job-id 010 --thing-name myThing

El comando no muestra ninguna salida.

Se cancela la ejecución de un trabajo que se encuentra en estado QUEUED. La ejecución de un trabajo en estado IN_PROGRESS se cancela, pero solo si especifica el parámetro opcional --force. Las ejecuciones de trabajo con un estado terminal no se pueden cancelar.

aviso

Cuando se cancela la ejecución de un trabajo con estado IN_PROGRESS, el dispositivo no puede actualizar el estado de ejecución del trabajo. Actúe con precaución y asegúrese de que el dispositivo pueda recuperarse a un estado válido.

Si la ejecución del trabajo se encuentra en estado final, o si la ejecución del trabajo está en estado IN_PROGRESS y el parámetro --force no está definido en true, el comando genera InvalidStateTransitionException.

El estado de la ejecución de un trabajo cancelada es a la larga coherente. Cambiar el estado de la ejecución de un trabajo a CANCELED puede llevar algo de tiempo, dependiendo de varios factores.

Eliminación de un trabajo

Para eliminar un trabajo y sus ejecuciones, utilice el comando DeleteJob. De forma predeterminada, solo puede eliminar un trabajo en estado final (SUCCEEDED o CANCELED). En caso contrario, se produce una excepción. Podrá eliminar un trabajo con estado IN_PROGRESS, aunque solo si el parámetro force está definido en true.

Para eliminar un trabajo, ejecute el siguiente comando:

aws iot delete-job --job-id 010 --force|--no-force

El comando no muestra ninguna salida.

aviso

Cuando se elimina un trabajo que se encuentra en estado IN_PROGRESS, el dispositivo que está implementando el trabajo no puede obtener acceso a la información del trabajo ni actualizar el estado de su ejecución. Actúe con precaución y asegúrese de que cada dispositivo que implemente un trabajo eliminado pueda recuperarse a un estado válido.

Eliminar un trabajo podría llevar algún tiempo, en función del número de ejecuciones de trabajos creadas para el trabajo y otros factores. Aunque el trabajo se esté eliminando, como estado del trabajo se muestra DELETION_IN_PROGRESS. Si se intenta eliminar o cancelar un trabajo cuyo estado ya es DELETION_IN_PROGRESS, se producirá un error.

Solo puede haber 10 trabajos con estado DELETION_IN_PROGRESS al mismo tiempo. De lo contrario, se genera LimitExceededException.

Obtención de un documento de trabajo

Para recuperar un documento de trabajo para un trabajo, utilice el comando GetJobDocument. Un documento de trabajo es una descripción de las operaciones remotas que deben ejecutar los dispositivos.

Para obtener un documento de trabajo, ejecute el siguiente comando:

aws iot get-job-document --job-id 010

El comando devuelve el documento de trabajo para el trabajo especificado:

{ "document": "{\n\t\"operation\":\"install\",\n\t\"url\":\"http://amazon.com/firmWareUpate-01\",\n\t\"data\":\"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/amzn-s3-demo-bucket/datafile}\"\n}" }
nota

Cuando utilizas este comando para recuperar un documento de trabajo, los marcadores de posición URLs no se sustituyen por Amazon S3 prefirmado. URLs Cuando un dispositivo llama a la GetPendingJobExecutionsAPIoperación, el marcador de posición URLs se sustituye por Amazon S3 prefirmado URLs en el documento de trabajo.

Enumeración de trabajos

Para obtener una lista de todos los trabajos que tiene Cuenta de AWS, utilice el ListJobs comando. Los datos del trabajo y los datos de ejecución del trabajo se conservan durante un tiempo limitado. Ejecute el siguiente comando para enumerar todos los trabajos de su cuenta Cuenta de AWS:

aws iot list-jobs

El comando devuelve todos los trabajos en su cuenta ordenados por estado del trabajo:

{ "jobs": [ { "status": "IN_PROGRESS", "lastUpdatedAt": 1486687079.743, "jobArn": "arn:aws:iot:us-east-1:123456789012:job/013", "createdAt": 1486687079.743, "targetSelection": "SNAPSHOT", "jobId": "013" }, { "status": "SUCCEEDED", "lastUpdatedAt": 1486685868.444, "jobArn": "arn:aws:iot:us-east-1:123456789012:job/012", "createdAt": 1486685868.444, "completedAt": 148668789.690, "targetSelection": "SNAPSHOT", "jobId": "012" }, { "status": "CANCELED", "lastUpdatedAt": 1486678850.575, "jobArn": "arn:aws:iot:us-east-1:123456789012:job/011", "createdAt": 1486678850.575, "targetSelection": "SNAPSHOT", "jobId": "011" } ] }

Descripción de un trabajo

Para obtener el estado de un trabajo, ejecute el comando DescribeJob. El siguiente comando muestra cómo describir un trabajo:

$ aws iot describe-job --job-id 010

El comando devuelve el estado de un trabajo especificado. Por ejemplo:

{ "documentSource": "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json", "job": { "status": "IN_PROGRESS", "jobArn": "arn:aws:iot:us-east-1:123456789012:job/010", "targets": [ "arn:aws:iot:us-east-1:123456789012:thing/myThing" ], "jobProcessDetails": { "numberOfCanceledThings": 0, "numberOfFailedThings": 0, "numberOfInProgressThings": 0, "numberOfQueuedThings": 0, "numberOfRejectedThings": 0, "numberOfRemovedThings": 0, "numberOfSucceededThings": 0, "numberOfTimedOutThings": 0, "processingTargets": [ arn:aws:iot:us-east-1:123456789012:thing/thingOne, arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupOne, arn:aws:iot:us-east-1:123456789012:thing/thingTwo, arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupTwo ] }, "presignedUrlConfig": { "expiresInSec": 60, "roleArn": "arn:aws:iam::123456789012:role/S3DownloadRole" }, "jobId": "010", "lastUpdatedAt": 1486593195.006, "createdAt": 1486593195.006, "targetSelection": "SNAPSHOT", "jobExecutionsRolloutConfig": { "exponentialRate": { "baseRatePerMinute": integer, "incrementFactor": integer, "rateIncreaseCriteria": { "numberOfNotifiedThings": integer, // Set one or the other "numberOfSucceededThings": integer // of these two values. }, "maximumPerMinute": integer } }, "abortConfig": { "criteriaList": [ { "action": "string", "failureType": "string", "minNumberOfExecutedThings": integer, "thresholdPercentage": integer } ] }, "timeoutConfig": { "inProgressTimeoutInMinutes": number } } }

Enumeración de ejecuciones para un trabajo

Un trabajo que se ejecuta en un dispositivo específico se representa mediante un objeto de ejecución de trabajo. Ejecute el comando ListJobExecutionsForJob para enumerar todas las ejecuciones de trabajo para un trabajo. A continuación se muestra cómo enumerar las ejecuciones para un trabajo:

aws iot list-job-executions-for-job --job-id 010

El comando devuelve una lista de ejecuciones de trabajo:

{ "executionSummaries": [ { "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne", "jobExecutionSummary": { "status": "QUEUED", "lastUpdatedAt": 1486593196.378, "queuedAt": 1486593196.378, "executionNumber": 1234567890 } }, { "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingTwo", "jobExecutionSummary": { "status": "IN_PROGRESS", "lastUpdatedAt": 1486593345.659, "queuedAt": 1486593196.378, "startedAt": 1486593345.659, "executionNumber": 4567890123 } } ] }

Enumeración de ejecuciones de trabajo para un objeto

Ejecute el comando ListJobExecutionsForThing para enumerar todas las ejecuciones de trabajo que se ejecutan en un objeto. A continuación se muestra cómo listar las ejecuciones de trabajos para un objeto:

aws iot list-job-executions-for-thing --thing-name thingOne

El comando devuelve una lista de ejecuciones de trabajo que se ejecutan o se han ejecutado en el objeto especificado:

{ "executionSummaries": [ { "jobExecutionSummary": { "status": "QUEUED", "lastUpdatedAt": 1486687082.071, "queuedAt": 1486687082.071, "executionNumber": 9876543210 }, "jobId": "013" }, { "jobExecutionSummary": { "status": "IN_PROGRESS", "startAt": 1486685870.729, "lastUpdatedAt": 1486685870.729, "queuedAt": 1486685870.729, "executionNumber": 1357924680 }, "jobId": "012" }, { "jobExecutionSummary": { "status": "SUCCEEDED", "startAt": 1486678853.415, "lastUpdatedAt": 1486678853.415, "queuedAt": 1486678853.415, "executionNumber": 4357680912 }, "jobId": "011" }, { "jobExecutionSummary": { "status": "CANCELED", "startAt": 1486593196.378, "lastUpdatedAt": 1486593196.378, "queuedAt": 1486593196.378, "executionNumber": 2143174250 }, "jobId": "010" } ] }

Descripción de una ejecución de trabajo

Ejecute el comando DescribeJobExecution para obtener el estado de la ejecución de un trabajo. Debe especificar un ID de trabajo y el nombre del objeto y, opcionalmente, un número de ejecución para identificar la ejecución del trabajo. A continuación se muestra cómo describir la ejecución de un trabajo:

aws iot describe-job-execution --job-id 017 --thing-name thingOne

El comando devuelve JobExecution. Por ejemplo:

{ "execution": { "jobId": "017", "executionNumber": 4516820379, "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne", "versionNumber": 123, "createdAt": 1489084805.285, "lastUpdatedAt": 1489086279.937, "startedAt": 1489086279.937, "status": "IN_PROGRESS", "approximateSecondsBeforeTimedOut": 100, "statusDetails": { "status": "IN_PROGRESS", "detailsMap": { "percentComplete": "10" } } } }

Eliminación de una ejecución de trabajo

Ejecute el comando DeleteJobExecution para eliminar la ejecución de un trabajo. Debe especificar un ID de trabajo, un nombre de objeto y un número de ejecución para identificar la ejecución del trabajo. A continuación se muestra cómo eliminar la ejecución de un trabajo:

aws iot delete-job-execution --job-id 017 --thing-name thingOne --execution-number 1234567890 --force|--no-force

El comando no muestra ninguna salida.

De forma predeterminada, el estado de ejecución de los trabajos debe ser QUEUED o un estado final (SUCCEEDED, FAILED, REJECTED, TIMED_OUT, REMOVED o CANCELED). En caso contrario, se produce un error. Para eliminar la ejecución de un trabajo con estado IN_PROGRESS, puede establecer el parámetro force en true.

aviso

Cuando se elimina la ejecución de un trabajo con estado IN_PROGRESS, el dispositivo que está ejecutando el trabajo no puede obtener acceso a la información del trabajo ni actualizar el estado de su ejecución. Actúe con precaución y asegúrese de que el dispositivo pueda recuperarse a un estado válido.