ステップ 2: でジョブを作成して実行する AWS IoT - AWS IoT Core

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

ステップ 2: でジョブを作成して実行する AWS IoT

このセクションの手順では、ジョブドキュメントと を作成します。 AWS IoT ジョブリソース。ジョブリソースを作成したら、 AWS 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 セキュリティにより、これを のURL外部で開くことができなくなります。 AWS アカウント例えば、ブラウザを使用するなどです。URL は によって使用されます。 AWS IoT デフォルトでは、 ファイルにアクセスできる ジョブエンジン。実稼働環境では、 AWS IoT サービスには、Amazon S3 に保存されているジョブドキュメントへのアクセス許可があります。

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

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

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

注記

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

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

    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 のジョブドキュメントURLを使用しますジョブのジョブドキュメントを作成して保存する

    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 デバイスクライアント。