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.
Procedure in questa sezione
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:
-
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.
Creare e salvare il documento di processo per questo processo
-
Sul computer host locale, apri un editor di testo.
-
Copia e incolla questo testo nell'editor.
{ "operation": "echo", "args": ["Hello world!"] } -
Nel computer host locale, salvare il contenuto dell'editor in un file denominato
hello-world-job.json. Conferma che il file sia stato salvato correttamente. Alcuni editor di testo aggiungono automaticamente
.txtal nome del file quando salva un file di testo. Se il tuo editor ha aggiunto.txtal nome del file, correggere il nome del file prima di procedere.
-
-
Sostituisci il
path_to_filepercorso del bucket Amazon S3s3_bucket_namecon 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.jsonaws s3api put-object \ --key hello-world-job.json \ --bodypath_to_file/hello-world-job.json --buckets3_bucket_nameL'URL del documento di lavoro che identifica il documento di lavoro archiviato in Amazon S3 viene determinato sostituendo e nell'URL seguente.
s3_bucket_nameAWS_regionRegistra l'URL risultante da utilizzare in seguito comejob_document_pathhttps://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.jsonNota
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:
-
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 -
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 -
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
-
Sul computer host locale:
-
Sostituisci
job_document_urlcon l'URL del documento di lavoro daCrea e archivia il documento di lavoro per il processo IoT. -
Sostituisci
thing_arncon 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 SNAPSHOTSe 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" }
-
-
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 -
Mentre il AWS IoT Device Client è in esecuzione e attende un processo, è possibile inviare un altro lavoro modificando il
job-idvalore 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.