Developer Guide


AWS IoT Jobs is a service that allows you to define a set of remote operations that are sent to and executed on one or more devices connected to AWS IoT.

Jobs Key Concepts


A job is a remote operation that is sent to and executed on one or more devices connected to AWS IoT. For example, you can define a job that instructs a set of devices to download and install application or firmware updates, reboot, rotate certificates, or perform remote troubleshooting operations.

job document

To create a job, you must first create a job document which is a description of the remote operations to be performed by the devices.

Job documents are UTF-8 encoded JSON documents and should contain any information your devices need to perform a job. A job document will most likely contain one or more URLs where the device can download an update or some other data. The job document itself can be stored in an Amazon S3 bucket, or be included inline with the command that creates the job.


When you create a job, you specify a list of targets which are the devices that should perform the operations. The targets can be things or thing groups or both. AWS IoT Jobs sends a message to each target to inform it that a job is available.

job execution

A job execution is an instance of a job on a target device. The target starts an execution of a job by downloading the job document. It then performs the operations the document specifies, and reports its progress to AWS IoT. An execution number is a unique identifier of a specific job execution on a specific target. The Jobs service provides commands to track the progress of a job execution on a specific target and the progress of a job generally across all the targets of the job.

snapshot job

By default, a job is sent to all targets that you specify when you create the job. After those targets complete the job (or report that they are unable to do so), the job is complete. This is a snapshot job.

continuous job

A continuous job is one that continues to run and is executed when a change is detected in a target. For example, a job will run on a device when the thing representing the device is added to a target group, even after the job was completed by all things originally in the group. A continuous job can be used to onboard or upgrade devices as they are added to a group. You can make a job continuous by setting an optional parameter when you create the job.


When you create a job you can specify how quickly targets are notified of a pending job execution. This allows you to create a staged rollout to better manage updates, reboots, and other operations.

The following field can be added to the CreateJob request to specify the maximum number of targets which will be informed of the job per minute:

"jobExecutionRolloutConfig": { "maximumPerMinute": "integer" }
presigned URLs

To allow a device secure, time-limited access to data beyond that included in the job document itself, you can use presigned Amazon S3 URLs. You can place your data in an Amazon S3 bucket and add a placeholder link to the data in the job document. When the Jobs service receives a request for the job document, it parses the job document looking for placeholder links and it replaces them with presigned Amazon S3 URLs.

The placeholder link is of the following form:


where bucket is your bucket name and key is the object in the bucket to which you are linking.

On this page: