Erstellen Sie den Job AWS IoT mit dem AWS IoT Geräteclient und führen Sie ihn aus - 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 AWS IoT mit dem AWS IoT Geräteclient und führen Sie ihn aus

Mit den Verfahren in diesem Abschnitt werden ein Jobdokument und eine AWS IoT Jobressource erstellt. Nachdem Sie die Auftragsressource erstellt haben, wird das Auftragsdokument an die angegebenen Auftragsziele AWS IoT gesendet, auf die ein Job-Agent das Auftragsdokument auf das Gerät oder den Client überträgt.

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

Mit diesem Verfahren wird ein einfaches Auftragsdokument erstellt, das in eine AWS IoT Auftragsressource aufgenommen werden kann. 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 das 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 dies URL außerhalb Ihres Computers öffnen können AWS-Konto, z. B. mithilfe eines Browsers. Das 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 Auftragsdokumente gespeichert habenURL, fahren Sie fort mitFühren Sie einen Job AWS IoT für ein IoT-Gerät aus.

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

Die Verfahren in diesem Abschnitt starten den AWS IoT Geräteclient 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 dort 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 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 Geräteclient 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 AWS IoT Jobressource zu erstellen
  1. Auf Ihrem lokalen Host-Computer:

    1. Ersetzen job_document_url mit dem Jobdokument URL vonErstellen und speichern Sie das Jobdokument für den IoT-Job.

    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 eine Ausgabe vom AWS IoT Geräteclient wie folgt 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 Geräteclient läuft und auf einen Job wartet, können Sie einen anderen Job einreichen, indem Sie den job-id Wert ändern und den create-job aus Schritt 1 stammenden Vorgang 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.