View a markdown version of this page

Erstellen Sie den Job und führen Sie ihn aus in AWS IoT mit AWS IoT Geräte-Client - AWS IoT Core

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 Sie den Job und führen Sie ihn aus in AWS IoT mit AWS IoT Geräte-Client

Mit den Verfahren in diesem Abschnitt werden ein Jobdokument und eine AWS IoT Jobressource erstellt. Nachdem Sie die Jobressource erstellt haben, AWS IoT sendet das Jobdokument an die angegebenen Jobziele, auf denen ein Job-Agent das Jobdokument auf das Gerät oder den Client anwendet.

Erstellen und speichern Sie das Jobdokument für den IoT-Job

Dieses Verfahren erstellt ein einfaches Auftragsdokument, das in eine AWS IoT Jobressource aufgenommen werden soll. In diesem Jobdokument wird „Hallo Welt!“ auf dem Jobziel angezeigt.

So erstellen und speichern Sie ein Jobdokument:
  1. Wählen Sie den Amazon-S3-Bucket aus, in dem Sie Ihr Jobdokument speichern möchten. Wenn Sie nicht über einen vorhandenen Amazon-S3-Bucket verfügen, den Sie verwenden können, müssen Sie einen erstellen. Weitere Informationen zum Erstellen von Amazon-S3-Buckets finden Sie unterErste Schritte mit Amazon S3.

  2. Erstellen und Speichern des Jobdokuments für diesen Job

    1. Öffnen Sie auf Ihrem lokalen Host-Computer einen Texteditor.

    2. Kopieren Sie den folgenden Text und fügen Sie ihn in den Editor ein.

      { "operation": "echo", "args": ["Hello world!"] }
    3. Speichern Sie auf dem lokalen Host-Computer den Inhalt des Editors in einer Datei mit dem Namen hello-world-job.json.

    4. Vergewissern Sie sich, dass die Datei korrekt gespeichert wurde. Einige Texteditoren fügen .txt beim Speichern einer Textdatei automatisch an den Dateinamen an. Wenn Ihr Editor .txt an den Dateinamen angehängt hat, korrigieren Sie den Dateinamen, bevor Sie fortfahren.

  3. Ersetzen Sie den path_to_file durch den Pfad zuhello-world-job.json, falls er sich nicht in Ihrem aktuellen Verzeichnis befindet, s3_bucket_name ersetzen Sie ihn durch den Amazon S3-Bucket-Pfad zu dem von Ihnen ausgewählten Bucket, und führen Sie dann diesen Befehl aus, um Ihr Job-Dokument in den Amazon S3-Bucket einzufügen.

    aws s3api put-object \ --key hello-world-job.json \ --body path_to_file/hello-world-job.json --bucket s3_bucket_name

    Die URL des Jobdokuments, die das Auftragsdokument identifiziert, das Sie in Amazon S3 gespeichert haben, wird bestimmt, indem Sie das s3_bucket_name und AWS_region in der folgenden URL ersetzen. Notieren Sie sich die resultierende URL, um sie später als zu verwenden job_document_path

    https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
    Anmerkung

    AWS Die Sicherheit verhindert, dass Sie diese URL außerhalb von Ihnen öffnen können AWS-Konto, z. B. mithilfe eines Browsers. Die URL wird standardmäßig von der AWS IoT Job-Engine verwendet, die Zugriff auf die Datei hat. In einer Produktionsumgebung müssen Sie sicherstellen, dass Ihre AWS IoT -Services berechtigt sind, auf die in Amazon S3 gespeicherten Jobdokumente zuzugreifen.

Nachdem Sie die URL des Jobdokuments gespeichert haben, fahren Sie fort mit Führen Sie einen Job in aus AWS IoT für ein IoT-Gerät.

Führen Sie einen Job in aus AWS IoT für ein IoT-Gerät

Die Verfahren in diesem Abschnitt starten den AWS IoT Device Client auf Ihrem Raspberry Pi, um den Job-Agenten auf dem Gerät auszuführen und auf die Ausführung von Jobs zu warten. Außerdem wird eine Jobressource in erstellt AWS IoT, die den Job an Ihr IoT-Gerät sendet und auf diesem ausführt.

Anmerkung

Dieses Verfahren führt einen Job nur auf einem einzigen Gerät aus.

So starten Sie den Job-Agenten auf Ihrem Raspberry Pi:
  1. Führen Sie im Terminalfenster auf Ihrem lokalen Host-Computer, der mit Ihrem Raspberry Pi verbunden ist, diesen Befehl aus, um den AWS IoT Device Client zu starten.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
  2. Bestätigen Sie im Terminalfenster, dass der AWS IoT Device Client und diese Meldungen anzeigt

    2021-11-15T18:45:56.708Z [INFO] {Main.cpp}: Jobs is enabled . . . 2021-11-15T18:45:56.708Z [INFO] {Main.cpp}: Client base has been notified that Jobs has started 2021-11-15T18:45:56.708Z [INFO] {JobsFeature.cpp}: Running Jobs! 2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to startNextPendingJobExecution accepted and rejected 2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to nextJobChanged events 2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusAccepted for jobId + 2021-11-15T18:45:56.738Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionAccepted with code {0} 2021-11-15T18:45:56.739Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusRejected for jobId + 2021-11-15T18:45:56.753Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToNextJobChanged with code {0} 2021-11-15T18:45:56.760Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobRejected with code {0} 2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobAccepted with code {0} 2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionRejected with code {0} 2021-11-15T18:45:56.777Z [DEBUG] {JobsFeature.cpp}: Publishing startNextPendingJobExecutionRequest 2021-11-15T18:45:56.785Z [DEBUG] {JobsFeature.cpp}: Ack received for StartNextPendingJobPub with code {0} 2021-11-15T18:45:56.785Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
  3. Wenn Sie im Terminalfenster diese Meldung sehen, fahren Sie mit dem nächsten Verfahren fort und erstellen Sie die Jobressource. Beachten Sie, dass dies möglicherweise nicht der letzte Eintrag in der Liste ist.

    2021-11-15T18:45:56.785Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
Um eine zu erstellen AWS IoT Job-Ressource
  1. Auf Ihrem lokalen Host-Computer:

    1. job_document_urlErsetzen Sie durch die URL des Jobdokuments vonErstellen und speichern Sie das Jobdokument für den IoT-Job.

    2. thing_arnErsetzen Sie es durch den ARN der Ding-Ressource, die Sie für Ihr Gerät erstellt haben, und führen Sie dann diesen Befehl aus.

      aws iot create-job \ --job-id hello-world-job-1 \ --document-source "job_document_url" \ --targets "thing_arn" \ --target-selection SNAPSHOT

      Bei Erfolg gibt der Befehl ein Ergebnis wie dieses zurück:

      { "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1", "jobId": "hello-world-job-1" }
  2. Im Terminalfenster sollten Sie die folgende Ausgabe vom AWS IoT Device Client sehen.

    2021-11-15T18:02:26.688Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Job ids differ 2021-11-15T18:10:24.890Z [INFO] {JobsFeature.cpp}: Executing job: hello-world-job-1 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status! 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Assuming executable is in PATH 2021-11-15T18:10:24.890Z [INFO] {JobsFeature.cpp}: About to execute: echo Hello world! 2021-11-15T18:10:24.890Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success 2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken 3TEWba9Xj6 in the updateJobExecution promises map 2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process now running 2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process about to call execvp 2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Parent process now running, child PID is 16737 2021-11-15T18:10:24.891Z [DEBUG] {16737}: Hello world! 2021-11-15T18:10:24.891Z [DEBUG] {JobEngine.cpp}: JobEngine finished waiting for child process, returning 0 2021-11-15T18:10:24.891Z [INFO] {JobsFeature.cpp}: Job exited with status: 0 2021-11-15T18:10:24.891Z [INFO] {JobsFeature.cpp}: Job executed successfully! 2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status! 2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details 2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details 2021-11-15T18:10:24.892Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success 2021-11-15T18:10:24.892Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken GmQ0HTzWGg in the updateJobExecution promises map 2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0} 2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken 3TEWba9Xj6 from the updateJobExecution promises map 2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1 2021-11-15T18:10:24.917Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0} 2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken GmQ0HTzWGg from the updateJobExecution promises map 2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1 2021-11-15T18:10:25.861Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
  3. Während der AWS IoT Device Client läuft und auf einen Job wartet, können Sie einen weiteren Job einreichen, indem Sie den job-id Wert ändern und den Befehl create-job aus Schritt 1 erneut ausführen.

Wenn Sie mit der Ausführung der Jobs fertig sind, geben Sie im Terminalfenster ^C (Strg-C) ein, um den AWS IoT Device Client zu beenden.