AWS IoT Device Client AWS IoT を使用して でジョブを作成して実行する - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS IoT Device Client AWS IoT を使用して でジョブを作成して実行する

このセクションの手順では、ジョブドキュメントと AWS IoT ジョブリソースを作成します。ジョブリソースを作成すると、 AWS IoT はジョブドキュメントを、ジョブエージェントがジョブドキュメントをデバイスまたはクライアントに適用する指定されたジョブターゲットに送信します。

IoT ジョブのジョブドキュメントを作成して保存する

この手順では、ジョブリソースに含めるシンプルな AWS IoT ジョブドキュメントを作成します。このジョブドキュメントでは「Hello world!」と ジョブターゲットに表示されます。

ジョブドキュメントを作成して保存するには、次の手順に従います。
  1. ジョブドキュメントを保存する Amazon S3 バケットを選択します。これに使用する既存の Amazon S3 バケットがない場合は、バケットを作成する必要があります。Amazon S3 バケットを作成する方法については、「Amazon S3 の開始方法」のトピックを参照してください。

  2. このジョブのジョブドキュメントを作成して保存します。

    1. ローカルホストコンピュータで、テキストエディタを開きます。

    2. 次のテキストをコピーしてエディタに貼り付けます。

      { "operation": "echo", "args": ["Hello world!"] }
    3. ローカルホストコンピュータで、エディタの内容を hello-world-job.json という名前のファイルに保存します。

    4. ファイルが正しく保存されたことを確認します。一部のテキストエディタはテキストファイルを保存するときに自動的に .txt をファイル名に追加します。エディタが .txt をファイル名に追加した場合、先に進む前にファイル名を修正してください。

  3. を置き換える path_to_file に へのパスを指定しhello-world-job.json、現在のディレクトリにない場合は、 を置き換えます。s3_bucket_name 選択したバケットへの Amazon S3 バケットパスを使用して、このコマンドを実行して、ジョブドキュメントを Amazon S3 バケットに配置します。

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

    Amazon S3 に保存したジョブドキュメントURLを識別するジョブドキュメントは、s3_bucket_name また、AWS_region を次の に示しますURL。結果を記録するURLと、後で として使用できます。job_document_path

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

    AWS セキュリティにより、ブラウザを使用するなどして AWS アカウント、これを のURL外部で開くことができなくなります。URL は、デフォルトで ファイルにアクセスできる AWS IoT ジョブエンジンによって使用されます。本番稼働環境では、 AWS IoT サービスに、Amazon S3 に保存されているジョブドキュメントにアクセスするためのアクセス許可があることを確認する必要があります。

ジョブドキュメントの を保存したらURL、 に進みます1 つの IoT デバイスの AWS IoT でジョブを実行する

1 つの IoT デバイスの AWS IoT でジョブを実行する

このセクションの手順では、Raspberry Pi で AWS IoT Device Client を起動して、デバイスでジョブエージェントを実行してジョブの実行を待ちます。また、 にジョブリソースを作成し AWS IoT、IoT デバイスにジョブを送信して実行します。

注記

この手順では、1 つのデバイスでのみジョブを実行します。

Raspberry Pi でジョブエージェントを開始するには、次の手順に従います。
  1. Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、このコマンドを実行して AWS IoT Device Client を起動します。

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
  2. ターミナルウィンドウで、 AWS IoT Device Client と がこれらのメッセージを表示していることを確認します。

    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. ターミナルウィンドウで、次のメッセージが表示されたら、次の手順に進み、ジョブリソースを作成します。これは、リストの最後のエントリではない可能性があることに注意してください。

    2021-11-15T18:45:56.785Z [INFO] {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
AWS IoT ジョブリソースを作成するには
  1. ローカルホストコンピュータで、次の操作を行います。

    1. 置換 job_document_url のジョブドキュメントを使用しますURLIoT ジョブのジョブドキュメントを作成して保存する

    2. 置換 thing_arn デバイス用に作成したモノARNのリソースの を使用して、このコマンドを実行します。

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

      成功すると、コマンドは次のような結果を返します。

      { "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1", "jobId": "hello-world-job-1" }
  2. ターミナルウィンドウには、このような AWS IoT Device Client からの出力が表示されます。

    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. AWS IoT Device Client が実行中でジョブを待っている間、job-id値を変更してステップ 1 create-jobから を再実行することで、別のジョブを送信できます。

ジョブの実行が完了したら、ターミナルウィンドウで ^C (control-C) を入力して AWS IoT Device Client を停止します。