View a markdown version of this page

Crea ed esegui il lavoro in AWS IoT con AWS IoT Client del dispositivo - 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 lavoro in AWS IoT con AWS IoT Client del dispositivo

Le procedure in questa sezione creano un documento di lavoro e una risorsa di AWS IoT lavoro. Dopo aver creato la risorsa di lavoro, AWS IoT invia il documento di lavoro alle destinazioni di lavoro specificate su cui un agente di lavoro applica il documento di lavoro al dispositivo o al client.

Crea e archivia il documento di lavoro per il processo IoT

Questa procedura crea un semplice documento di lavoro da includere in una risorsa di AWS IoT lavoro. 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 percorso del bucket Amazon S3 s3_bucket_name con il percorso del bucket Amazon S3, se non si trova nella directory corrente, quindi esegui questo comando per inserire il documento di lavoro nel bucket Amazon S3. hello-world-job.json

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

    L'URL del documento di lavoro che identifica il documento di lavoro archiviato in Amazon S3 viene determinato sostituendo e nell'URL seguente. s3_bucket_name AWS_region Registra l'URL risultante da utilizzare in seguito come job_document_path

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

    AWS la sicurezza ti impedisce di aprire questo URL all'esterno del tuo Account AWS, ad esempio utilizzando un browser. L'URL viene utilizzato dal motore AWS IoT jobs, che ha accesso al file, per impostazione predefinita. 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 l'URL del documento di processo, prosegui con Esegui un lavoro in AWS IoT per un dispositivo IoT.

Esegui un lavoro in AWS IoT per un dispositivo IoT

Le procedure in questa sezione avviano il AWS IoT Device Client sul tuo Raspberry Pi per eseguire il jobs agent sul dispositivo e attendere l'esecuzione dei job. Crea anche una risorsa di lavoro in AWS IoT, che invierà il lavoro 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 sul 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, verificate che il AWS IoT Device Client mostri 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 un AWS IoT risorsa lavorativa
  1. Sul computer host locale:

    1. Sostituisci job_document_url con l'URL del documento di lavoro daCrea e archivia il documento di lavoro per il processo IoT.

    2. Sostituisci thing_arn con l'ARN della 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 l'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 processo, è possibile inviare un altro lavoro modificando il job-id valore ed eseguendo nuovamente il processo create-job dal passaggio 1.

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