Crea ed esegui il job AWS IoT con AWS IoT Device Client - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea ed esegui il job AWS IoT con AWS IoT Device Client

Le procedure in questa sezione creano un documento di lavoro e una risorsa AWS IoT lavorativa. Dopo aver creato la risorsa lavorativa, AWS IoT invia il documento del lavoro agli obiettivi di lavoro specificati a cui un agente di lavoro applica il documento di lavoro al dispositivo o al client.

Crea e archivia il documento di lavoro per il lavoro IoT

Questa procedura crea un semplice documento di lavoro da includere in una risorsa AWS IoT lavorativa. Questo documento di processo mostra "Hello world!" sul target di processo.

Per creare e archiviare un documento di processo:
  1. Seleziona il bucket Amazon S3 in cui salvare il documento di processo. Se non disponi di un bucket Amazon S3 esistente da utilizzare per questo, dovrai creane uno. Per informazioni su come creare bucket Amazon S3, consulta gli argomenti in Nozioni di base su Amazon S3.

  2. Creare e salvare il documento di processo per questo processo

    1. Sul computer host locale, apri un editor di testo.

    2. Copia e incolla questo testo nell'editor.

      { "operation": "echo", "args": ["Hello world!"] }
    3. Nel computer host locale, salvare il contenuto dell'editor in un file denominato hello-world-job.json.

    4. Conferma che il file sia stato salvato correttamente. Alcuni editor di testo aggiungono automaticamente .txt al nome del file quando salva un file di testo. Se il tuo editor ha aggiunto .txt al nome del file, correggere il nome del file prima di procedere.

  3. Sostituisci il path_to_file con il percorso dihello-world-job.json, se non è nella directory corrente, sostituisci s3_bucket_name con il percorso del bucket Amazon S3 verso il bucket selezionato, quindi esegui questo comando per inserire il documento di lavoro nel bucket Amazon S3.

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

    Il documento di lavoro URL che identifica il documento di lavoro archiviato in Amazon S3 viene determinato sostituendo il s3_bucket_name e AWS_region nel seguito. URL Registra il risultato URL per utilizzarlo successivamente come job_document_path

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

    AWS la sicurezza ti impedisce di aprirlo al di URL fuori del tuo Account AWS, ad esempio utilizzando un browser. Per impostazione predefinita, URL viene utilizzato dal motore di AWS IoT job, che ha accesso al file. In un ambiente di produzione, è necessario assicurarsi che i servizi AWS IoT abbiano l'autorizzazione per l'accesso ai documenti di processo archiviati in Amazon S3.

Dopo aver salvato il documento di lavoroURL, continua conEsegui un lavoro AWS IoT per un dispositivo IoT.

Esegui un lavoro AWS IoT per un dispositivo IoT

Le procedure descritte in questa sezione avviano il AWS IoT Device Client sul tuo Raspberry Pi per eseguire il job agent sul dispositivo e attendere l'esecuzione dei job. Crea anche una risorsa di lavoro in AWS IoT, che invierà il lavoro al tuo dispositivo IoT e lo eseguirà sul tuo dispositivo IoT.

Nota

Questa procedura esegue un processo su un solo dispositivo.

Per avviare l'agente di processi sul tuo Raspberry Pi:
  1. Nella finestra del terminale del computer host locale collegato al Raspberry Pi, esegui questo comando per avviare il AWS IoT Device Client.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
  2. Nella finestra del terminale, verifica che il AWS IoT Device Client e visualizzi questi messaggi

    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. Nella finestra del terminale, dopo aver visualizzato questo messaggio, continua con la procedura successiva e crea la risorsa del processo. Attenzione: potrebbe non essere l'ultima voce dell'elenco.

    2021-11-15T18:45:56.785Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
Per creare una risorsa AWS IoT di lavoro
  1. Sul computer host locale:

    1. Replace (Sostituisci) job_document_url con il documento di lavoro URL diCrea e archivia il documento di lavoro per il lavoro IoT.

    2. Replace (Sostituisci) thing_arn con ARN la risorsa oggetto che hai creato per il tuo dispositivo e poi esegui questo comando.

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

      Se il comando viene eseguito correttamente, verrà visualizzato un risultato simile a quanto segue.

      { "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1", "jobId": "hello-world-job-1" }
  2. Nella finestra del terminale, dovresti vedere un output del AWS IoT Device Client in questo modo.

    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. Mentre il AWS IoT Device Client è in esecuzione e attende un lavoro, è possibile inviare un altro lavoro modificando il job-id valore e rieseguendolo create-job dal passaggio 1.

Quando hai finito di eseguire i lavori, nella finestra del terminale, inserisci ^C (control-C) per arrestare il AWS IoT Device Client.