Schritt 2: Erstellen Sie den Job und führen Sie ihn aus in AWS IoT - 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.

Schritt 2: Erstellen Sie den Job und führen Sie ihn aus in AWS IoT

Mit den Verfahren in diesem Abschnitt werden ein Jobdokument und ein AWS IoT Jobressource. Nachdem Sie die Jobressource erstellt haben, AWS IoT sendet das Auftragsdokument an die angegebenen Auftragsziele, auf die ein Auftragsagent das Auftragsdokument auf das Gerät oder den Client überträgt.

Erstellen und Speichern des Jobdokuments

Bei diesem Verfahren wird ein einfaches Auftragsdokument erstellt, das in ein AWS IoT Jobressource. 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 die path_to_file durch den Pfad zuhello-world-job.json, falls er sich nicht in Ihrem aktuellen Verzeichnis befindet, ersetzen Sie s3_bucket_name mit dem Amazon S3 S3-Bucket-Pfad zu dem von Ihnen ausgewählten Bucket und führen Sie dann diesen Befehl aus, um Ihr Jobdokument in den Amazon S3 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

    Das Job-DokumentURL, das das Job-Dokument identifiziert, das Sie in Amazon S3 gespeichert haben, wird bestimmt, indem Sie das s3_bucket_name and AWS_region im FolgendenURL. Notieren Sie das ErgebnisURL, um es später als job_document_path

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

    AWS Die Sicherheit verhindert, dass Sie es URL außerhalb Ihres öffnen können AWS-Konto, zum Beispiel mithilfe eines Browsers. Das URL wird verwendet von AWS IoT Jobs-Engine, die standardmäßig Zugriff auf die Datei hat. In einer Produktionsumgebung müssen Sie sicherstellen, dass AWS IoT Dienste haben die Erlaubnis, auf die in Amazon S3 gespeicherten Auftragsdokumente zuzugreifen.

Nachdem Sie die Jobdokumente gespeichert habenURL, fahren Sie fort mitFühren Sie einen Job aus in AWS IoT für ein IoT-Gerät.

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

Mit den Verfahren in diesem Abschnitt starten AWS IoT Geräteclient auf Ihrem Raspberry Pi, um den Jobs-Agenten auf dem Gerät auszuführen und auf die Ausführung von Jobs zu warten. Es erstellt auch eine Jobressource in AWS IoT, wodurch der Job an Ihr IoT-Gerät gesendet und auf diesem ausgeführt wird.

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 Geräteclient.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
  2. Vergewissern Sie sich im Terminalfenster, dass AWS IoT Device Client und zeigt diese Meldungen an

    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 ein zu erstellen AWS IoT Jobressource
  1. Auf Ihrem lokalen Host-Computer:

    1. Ersetzen job_document_url mit dem Jobdokument URL vonErstellen und Speichern des Jobdokuments.

    2. Ersetzen thing_arn mit ARN der Thing-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 Ausgabe von sehen AWS IoT Geräteclient wie folgt.

    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 Der Geräteclient läuft und auf einen Job wartet, Sie können einen anderen Job einreichen, indem Sie den job-id Wert ändern und den create-job aus Schritt 1 erneut ausführen.

Wenn Sie mit der Ausführung von Aufträgen fertig sind, geben Sie im Terminalfenster ^C (Strg-C) ein, um den AWS IoT Geräteclient.