Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erstellen und verwalten Sie Jobs mit dem AWS CLI
In diesem Abschnitt wird beschrieben, wie Sie Aufträge erstellen und verwalten.
Erstellen von Aufträgen
Verwenden Sie den CreateJob Befehl, um einen AWS IoT Job zu erstellen. Der Auftrag wird in die Warteschlange für die Ausführung auf den Zielen (Objekten oder Objektgruppen) gesetzt, die Sie angeben. Um einen AWS IoT Job zu erstellen, benötigen Sie ein Jobdokument, das in den Hauptteil der Anfrage oder als Link zu einem Amazon S3 S3-Dokument aufgenommen werden kann. Wenn der Job das Herunterladen von Dateien mit vorsigniertem Amazon S3 beinhaltetURLs, benötigen Sie eine IAM Rolle Amazon Resource Name (ARN), die über die Berechtigung zum Herunterladen der Datei verfügt und dem AWS IoT Jobs-Service die Erlaubnis erteilt, die Rolle zu übernehmen.
Weitere Informationen zur Syntax bei der Eingabe von Datum und Uhrzeit mithilfe eines API Befehls oder des AWS CLI finden Sie unter Timestamp.
Codesignatur mit Aufträgen
Wenn Sie Codesignatur für verwenden AWS IoT, müssen Sie einen Codesignaturauftrag starten und die Ausgabe in Ihr Auftragsdokument aufnehmen. Dadurch wird der Platzhalter für die Codezeichensignatur in Ihrem Auftragsdokument ersetzt, der als Platzhalter erforderlich ist, bis er mithilfe Ihres Codesignaturprofils durch den Pfad der signierten Codedatei ersetzt wird. Der Platzhalter für die Codesignatur sieht wie folgt aus:
${aws:iot:code-sign-signature:s3://region.bucket/code-file@code-file-version-id}
Verwenden Sie den start-signing-jobBefehl, um einen Codesignaturauftrag zu erstellen. start-signing-job
gibt eine Job-ID zurück. Verwenden Sie den Befehl describe-signing-job, um den Amazon S3-Ort abzurufen, an dem die Signatur gespeichert ist. Anschließend können Sie die Signatur von Amazon S3 herunterladen. Weitere Informationen zu Codesignaturaufträgen finden Sie unter Codesignatur für AWS IoT.
Ihr Jobdokument muss einen vorsignierten URL Platzhalter für Ihre Codedatei und die JSON Signaturausgabe enthalten, die mit dem folgenden Befehl in einem Amazon S3 S3-Bucket platziert wird: start-signing-job
{ "presign": "${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/bucket/image}", }
Erstellen eines Auftrags mit einem Auftragsdokument
Der folgende Befehl zeigt, wie Sie einen Job mithilfe eines Jobdokuments erstellen (job-document.json
) gespeichert in einem Amazon S3 S3-Bucket (jobBucket
) und eine Rolle mit der Erlaubnis, Dateien von Amazon S3 herunterzuladen (S3DownloadRole
).
aws iot create-job \ --job-id 010 \ --targets
arn:aws:iot:us-east-1:123456789012:thing/thingOne
\ --document-sourcehttps://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}"
Der Job wird ausgeführt am thingOne
.
Der optionale timeout-config
-Parameter gibt die Dauer an, die jedes Gerät für den Abschluss der Ausführung des Auftrags hat. Der Timer wird gestartet, wenn der Status der Auftragsausführung auf IN_PROGRESS
gesetzt wird. Wird der Status der Auftragsausführung vor Ablauf der Zeit nicht auf einen anderen Terminal-Zustand festgelegt, wird er automatisch auf TIMED_OUT
festgelegt.
Der Timer für „In Bearbeitung“ kann nicht aktualisiert werden und gilt für alle Auftragsausführungen für den Auftrag. Immer wenn eine Auftragsausführung länger als dieses Intervall im IN_PROGRESS
Status verbleibt, schlägt sie fehl und wechselt in den TIMED_OUT
Terminalstatus. AWS IoT veröffentlicht auch eine MQTT Benachrichtigung.
Weitere Informationen zum Konfigurieren von Auftragsrollouts und -abbrüchen finden Sie unter Auftragsrollout- und Abbruchkonfiguration.
Anmerkung
Auftragsdokumente, die als Amazon S3-Dateien angegeben werden, werden zum Zeitpunkt der Erstellung des Auftrags abgerufen. Wenn Sie den Inhalt der Amazon S3-Datei, die Sie als Quelle Ihres Auftragsdokuments verwendet haben, ändern, nachdem Sie das Auftragsdokument erstellt haben, ändert sich das, was an die Auftragsziele gesendet wird, nicht.
Aktualisieren eines Auftrags
Um einen Auftrag zu aktualisieren, verwenden Sie den Befehl UpdateJob. Sie können die Felder description
, presignedUrlConfig
, jobExecutionsRolloutConfig
, abortConfig
und timeoutConfig
eines Auftrags aktualisieren.
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}"
Weitere Informationen finden Sie unter Rollout von Aufträgen und Abbruchskonfiguration.
Abbrechen eines Auftrags
Um einen Auftrag abzubrechen, verwenden Sie den Befehl CancelJob. Durch das Abbrechen eines Jobs AWS IoT werden keine neuen Jobausführungen für den Job bereitgestellt. Außerdem werden alle Auftragsausführungen storniert, die sich in einem bestimmten Status befinden. QUEUED
AWS IoT lässt alle Auftragsausführungen im Terminalstatus unberührt, da das Gerät den Job bereits abgeschlossen hat. Wenn der Status einer Auftragsausführung IN_PROGRESS
ist, wird sie auch nicht verändert, es sei denn, Sie verwenden den optionalen --force
-Parameter.
Der folgende Befehl zeigt, wie Sie einen Auftrag mit der ID 010 abbrechen.
aws iot cancel-job --job-id 010
Die Ausgabe des Befehls sieht wie folgt aus:
{ "jobArn": "string", "jobId": "string", "description": "string" }
Wenn Sie einen Auftrag abbrechen, werden Auftragsausführungen mit dem Status QUEUED
abgebrochen. Auftragsausführungen mit dem Status IN_PROGRESS
werden abgebrochen, aber nur, wenn Sie den optionalen --force
-Parameter angeben. Auftragsausführungen mit einem Terminal-Zustand werden nicht abgebrochen.
Warnung
Der Abbruch eines Auftrags im Status IN_PROGRESS
(durch Setzen des --force
-Parameters) bricht alle Auftragsausführungen ab, die sich in Ausführung befinden, was dazu führt, dass das Gerät, das den Auftrag ausführt, den Status der Auftragsausführung nicht aktualisieren kann. Seien Sie vorsichtig, und stellen Sie sicher, dass jedes Gerät, das einen abgebrochenen Auftrag ausführt, in einen gültigen Status zurückkehren kann.
Der Status eines abgebrochenen Auftrags oder einer seiner Jobausführungen ist letztendlich konsistent. AWS IoT beendet die Planung neuer Auftragsausführungen und QUEUED
Auftragsausführungen für diesen Job auf Geräten so schnell wie möglich. Die Änderung des Status einer Auftragsausführung zu CANCELED
kann jedoch je nach der Anzahl der Geräte und anderen Faktoren einige Zeit dauern.
Wenn ein Auftrag abgebrochen wurde, da er die von einem AbortConfig
-Objekt definierten Kriterien erfüllt hat, fügt der Service automatisch eingegebene Werte für die Felder comment
und reasonCode
hinzu. Sie können Ihre eigenen Werte für reasonCode
erstellen, wenn der Abbruch des Auftrags vom Benutzer gesteuert wird.
Abbrechen einer Auftragsausführung
Um eine Auftragsausführung auf einem Gerät abzubrechen, verwenden Sie den CancelJobExecution-Befehl. Damit wird eine Auftragsausführung abgebrochen, die sich im Status QUEUED
befindet. Wenn Sie eine Auftragsausführung abbrechen möchten, die sich in Ausführung befindet, müssen Sie den --force
-Parameter verwenden.
Der folgende Befehl zeigt, wie die Ausführung von Auftrag 010 auf myThing
abgebrochen wird.
aws iot cancel-job-execution --job-id 010 --thing-name myThing
Der Befehl zeigt keine Ausgabe an.
Eine Auftragsausführung, die sich im Status QUEUED
befindet, wird abgebrochen. Eine Auftragsausführung mit dem Status IN_PROGRESS
wird abgebrochen, aber nur, wenn Sie den optionalen --force
-Parameter angeben. Auftragsausführungen mit einem Terminal-Zustand können nicht abgebrochen werden.
Warnung
Der Abbruch einer Auftragsausführung mit dem Status IN_PROGRESS
führt dazu, dass das Gerät den Ausführungsstatus für den Auftrag nicht aktualisieren kann. Seien Sie vorsichtig, und stellen Sie sicher, dass das Gerät in der Lage ist, in einen gültigen Status zurückzukehren.
Wenn sich die Auftragsausführung in einem Terminal-Zustand oder im Status IN_PROGRESS
befindet und der --force
-Parameter nicht auf true
gesetzt ist, führt dieser Befehl zu einer InvalidStateTransitionException
.
Der Status einer abgebrochenen Auftragsausführungen bleibt schließlich konsistent. Das Ändern des Status einer Auftragsausführung zu CANCELED
kann aufgrund verschiedener Faktoren einige Zeit in Anspruch nehmen.
Löschen eines Auftrags
Um einen Auftrag und dessen Auftragsausführungen zu löschen, verwenden Sie den DeleteJob-Befehl. Standardmäßig können Sie nur einen Auftrag löschen, der sich in einem Terminal-Zustand (SUCCEEDED
oder CANCELED
) befindet. Andernfalls tritt eine Ausnahme auf. Sie können einen Auftrag im Status IN_PROGRESS
löschen, jedoch nur, wenn der force
-Parameter auf true
gesetzt ist.
Um einen Auftrag zu löschen, führen Sie den folgenden Befehl aus:
aws iot delete-job --job-id 010 --force|--no-force
Der Befehl zeigt keine Ausgabe an.
Warnung
Wenn Sie einen Auftrag löschen, der sich im IN_PROGRESS
-Status befindet, kann das Gerät, das den Auftrag umsetzt, nicht auf Auftragsinformationen zugreifen oder den Status der Auftragsausführung aktualisieren. Seien Sie vorsichtig, und stellen Sie sicher, dass jedes Gerät, das einen gelöschten Auftrag umsetzt, in einen gültigen Status zurückkehren kann.
Das Löschen eines Auftrags kann einige Zeit in Anspruch nehmen, abhängig von der Anzahl der Auftragsausführungen für den Auftrag und anderen Faktoren. Während der Auftrag gelöscht wird, wird DELETION_IN_PROGRESS
als Status des Auftrags angezeigt. Es tritt ein Fehler auf, wenn Sie versuchen, einen Auftrag abzubrechen oder zu löschen, dessen Status bereits DELETION_IN_PROGRESS
ist.
Nur 10 Aufträge können gleichzeitig den Status DELETION_IN_PROGRESS
haben. Andernfalls tritt eine LimitExceededException
auf.
Abrufen eines Auftragsdokuments
Um ein Auftragsdokument für einen Auftrag abzurufen, verwenden Sie den Befehl GetJobDocument. Ein Auftragsdokument ist eine Beschreibung der Remoteoperationen, die von den Geräten ausgeführt werden sollen.
Um ein Auftragsdokument zu erhalten, führen Sie den folgenden Befehl aus:
aws iot get-job-document --job-id 010
Der Befehl gibt das Auftragsdokument für den angegebenen Auftrag aus:
{ "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}" }
Anmerkung
Wenn Sie diesen Befehl verwenden, um ein Jobdokument abzurufen, werden Platzhalter URLs nicht durch vorsignierte Amazon S3 ersetzt. URLs Wenn ein Gerät den GetPendingJobExecutionsAPIVorgang aufruft, URLs werden die Platzhalter URLs im Auftragsdokument durch vorsignierte Amazon S3 ersetzt.
Auflisten von Aufträgen
Um eine Liste aller Jobs in Ihrem zu erhalten AWS-Konto, verwenden Sie den ListJobs Befehl. Auftragsdaten und Auftragsausführungsdaten werden für eine begrenzte Zeitaufbewahrt. Führen Sie den folgenden Befehl aus, um alle Jobs in Ihrem aufzulisten AWS-Konto:
aws iot list-jobs
Der Befehl listet alle Aufträge in Ihrem Konto nach Auftragsstatus sortiert auf:
{ "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" } ] }
Beschreiben eines Auftrags
Um den Status eines Auftrags abzurufen, führen Sie den Befehl DescribeJob aus. Der folgende Befehl zeigt, wie Sie einen Auftrag beschreiben:
$ aws iot describe-job --job-id 010
Der Auftrag gibt den Status des angegebenen Auftrags aus. Beispielsweise:
{ "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 } } }
Auflisten von Ausführungen für einen Auftrag
Ein Auftrag, der auf einem bestimmten Gerät ausgeführt wird, wird durch ein Auftragsausführungsobjekt repräsentiert. Mit dem Befehl ListJobExecutionsForJob listen Sie alle Auftragsausführungen für einen Auftrag auf. Nachfolgend sehen Sie, wie Sie die Ausführungen für einen Auftrag auflisten können:
aws iot list-job-executions-for-job --job-id 010
Der Befehl gibt eine Liste von Auftragsausführungen zurück:
{ "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 } } ] }
Auflisten von Auftragsausführungen für ein Objekt
Mit dem Befehl ListJobExecutionsForThing listen Sie alle Auftragsausführungen auf einem Objekt auf. Nachfolgend sehen Sie, wie Sie die Auftragsausführungen für ein Objekt auflisten können:
aws iot list-job-executions-for-thing --thing-name thingOne
Der Befehl gibt eine Liste der Auftragsausführungen aus, die auf dem angegebenen Objekt ausgeführt werden oder wurden:
{ "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" } ] }
Beschreiben der Auftragsausführung
Mit dem Befehl DescribeJobExecution rufen Sie den Status einer Auftragsausführung ab. Sie müssen eine Auftrags-ID und den Namen eines Objekts sowie optional eine Ausführungsnummer angeben, um die Auftragsausführung zu identifizieren. Nachfolgend sehen Sie, wie Sie eine Auftragsausführung beschreiben können:
aws iot describe-job-execution --job-id 017 --thing-name thingOne
Der Befehl gibt den JobExecution
zurück: Beispielsweise:
{ "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" } } } }
Löschen einer Auftragsausführung
Mit dem DeleteJobExecution-Befehl löschen Sie eine Auftragsausführung. Sie müssen eine Auftrags-ID und den Namen eines Objekts und eine Ausführungsnummer angeben, um die Auftragsausführung zu identifizieren. Nachfolgend sehen Sie, wie Sie eine Auftragsausführung löschen können:
aws iot delete-job-execution --job-id 017 --thing-name thingOne --execution-number 1234567890 --force|--no-force
Der Befehl zeigt keine Ausgabe an.
Standardmäßig muss der Status der Auftragsausführung QUEUED
oder ein Terminal-Zustand (SUCCEEDED
, FAILED
, REJECTED
, TIMED_OUT
, REMOVED
oder CANCELED
) sein. Andernfalls tritt ein Fehler auf. Um eine Auftragsausführung mit dem Status IN_PROGRESS
zu löschen, können Sie den force
-Parameter auf true
setzen.
Warnung
Wenn Sie eine Auftragsausführung löschen, die sich im IN_PROGRESS
-Status befindet, kann das Gerät, das den Auftrag ausführt, nicht auf Auftragsinformationen zugreifen oder den Status der Auftragsausführung aktualisieren. Seien Sie vorsichtig, und stellen Sie sicher, dass das Gerät in der Lage ist, in einen gültigen Status zurückzukehren.