高レベルのコマンドワークフロー - AWS IoT Core

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

高レベルのコマンドワークフロー

このワークフローは、デバイスが AWS IoT Device Managementコマンドとやり取りする方法を示しています。すべての HTTP API リクエストは、署名に Sigv4 認証情報を使用します。

AWS IoT Device Managementデバイスコマンドの高レベルワークフローの概要。

コマンドの作成と管理

デバイスのコマンドを作成および管理するには、次の手順を実行します。

  1. コマンドリソースを作成する

    コマンドハブから、または API を使用してコマンドを作成します。 CreateCommand

  2. ペイロードを指定する

    任意の形式でペイロードを指定します。デバイスが正しく解釈されるようにコンテンツタイプを指定します。

    ペイロードテンプレートを持つ動的コマンドの場合、最終的なペイロードは、指定したパラメータを使用して実行時に生成されます。テンプレートは JSON 形式のみをサポートしますが、生成されたペイロードは JSON または CBOR として送信できます。

  3. (オプション) 作成したコマンドを管理する

    作成後に表示名と説明を更新します。不要になったコマンドを非推奨としてマークするか、完全に削除します。ペイロード情報を変更するには、新しいコマンドを作成します。

コマンドのターゲットデバイスを選択して MQTT トピックをサブスクライブする

ターゲットデバイスを選択し、コマンドを受信してレスポンスを発行するための MQTT トピックを設定します。

  1. コマンドのターゲットデバイスを選択する

    コマンドを受信して実行するターゲットデバイスを選択します。登録済みデバイスにはモノの名前、未登録デバイスにはクライアント ID を使用します。詳細については、「ターゲットデバイスに関する考慮事項」を参照してください。

  2. AWS IoTデバイスポリシーを設定する

    実行を受信して更新を発行するアクセス許可を付与する IAM ポリシーを設定します。ポリシーの例サンプルの IAM ポリシーについては、「」を参照してください。

  3. MQTT 接続を確立する

    デバイスをメッセージブローカーに接続し、リクエストとレスポンスのトピックにサブスクライブします。デバイスには アクセスiot:Connect許可が必要です。DescribeEndpoint API または describe-endpoint CLI コマンドを使用して、データプレーンエンドポイントを検索します。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    このコマンドを実行すると、以下に示すように、アカウント固有のデータプレーンエンドポイントが返されます。

    account-specific-prefix.iot.region.amazonaws.com
  4. コマンドトピックをサブスクライブする

    コマンドリクエストトピックをサブスクライブします。実行を開始すると、メッセージブローカーはこのトピックにペイロードを発行します。デバイスは コマンドを受け取り、処理します。

    (オプション) レスポンストピック (accepted または rejected) をサブスクライブして、クラウドサービスがデバイスのレスポンスを承認したか拒否したかの確認を受け取ります。

    この例では、次のように置き換えます。

    • <device> を、ターゲットとするデバイスが IoT のモノとして登録されているか、MQTT クライアントとして指定されているかに応じて、thing または client に置き換えます。

    • <DeviceID> をターゲットデバイスの一意の識別子に置き換えます。この ID には、一意の MQTT クライアント ID またはモノの名前を使用することができます。

    注記

    ペイロードタイプが JSON または CBOR でない場合は、コマンドリクエストトピックに <PayloadFormat> フィールドが存在しない可能性があります。ペイロード形式を取得するには、MQTT5 を使用して MQTT メッセージヘッダーから形式情報を取得することをお勧めします。詳細については、「コマンドトのピック」を参照してください。

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat> $aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat> $aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat>

ターゲットデバイスのコマンド実行を開始してモニタリングする

コマンドを作成し、コマンドのターゲットを指定したら、次の手順を実行してターゲットデバイスで実行を開始できます。

  1. ターゲットデバイスでコマンド実行を開始する

    Command Hub から、またはアカウント固有のエンドポイントで StartCommandExecution API を使用して実行を開始します。iot:Data-ATS デュアルスタック (IPv4/IPv6) または IPv4 のみiot:Jobsに使用します。

    API はペイロードを コマンドリクエストトピックに発行します。

    注記

    デバイスがオフラインで MQTT 永続セッションを使用している場合、 コマンドはメッセージブローカーで待機します。タイムアウト前にデバイスが再接続すると、 コマンドを処理して結果を発行できます。タイムアウトの有効期限が切れると、実行はタイムアウトし、ペイロードは破棄されます。

  2. コマンド実行の結果を更新する

    デバイスはペイロードを受け取り、 コマンドを処理し、指定されたアクションを実行し、UpdateCommandExecutionMQTT ベースの API を使用してコマンドレスポンストピックに結果を発行します。受け入れられたトピックと拒否されたトピックにサブスクライブすると、デバイスはクラウドサービスが応答を承諾したか拒否したかの確認を受け取ります。

    リクエストトピックで指定した内容に応じて、<devices> はモノまたはクライアントにすることができ、<DeviceID> はAWS IoTモノの名前または MQTT クライアント ID にすることができます。

    注記

    <PayloadFormat> は、コマンドレスポンストピックで JSON または CBOR のみを使用できます。

    $aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
  3. (オプション) コマンド実行結果を取得する

    AWS IoTコンソールまたは を使用して実行結果を取得しますGetCommandExecution。デバイスは、最新の情報について、 コマンドレスポンストピックに結果を発行する必要があります。最終更新時刻、結果、完了時刻などの詳細を表示します。

(オプション) コマンドイベントの通知を有効にする

実行ステータスが変更されたときの通知のコマンドイベントにサブスクライブします。

  1. トピックルールを作成する

    ステータス変更通知の コマンドイベントトピックにサブスクライブします。AWS IoTコンソールまたは を使用してAWS Lambda、Amazon SQS や AWSStep Functions などの他のAWS IoTサービスにデバイスデータをルーティングするトピックルールを作成しますAWS IoT ルールの作成

    この例では、<CommandID> を通知を受信するコマンドの識別子に置き換え、<CommandExecutionStatus> をコマンド実行のステータスに置き換えます。

    $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
    注記

    すべてのコマンドとコマンド実行ステータスの通知を受け取るには、ワイルドカード文字を使用し、次のトピックにサブスクライブします。

    $aws/events/commandExecution/+/#
  2. コマンドイベントを受信して処理する

    サブスクライブされたイベントを使用して、コマンドプッシュ通知を管理し、アプリケーションを構築します。

次のコードは、受信するコマンドイベント通知のサンプルペイロードを示しています。

{ "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "status":"FAILED", "statusReason": { "reasonCode": "DEVICE_TOO_BUSY", "reasonDescription": "" }, "eventType": "COMMAND_EXECUTION", "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086", "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd", "timestamp":1717708862107 }