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

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

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

次の手順では、デバイスとコマンド間の AWS IoT Device Management コマンドワークフローの概要を示します。コマンドHTTPAPIオペレーションのいずれかを使用すると、リクエストは Sigv4 認証情報を使用して署名されます。

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

コマンドの作成と管理

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

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

    デバイスにコマンドを送信する前に、 AWS IoT コンソールの Command Hub から、またはCreateCommandコントロールプレーンAPIオペレーションを使用してコマンドリソースを作成します。

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

    コマンドを作成するときは、コマンドのペイロードを指定する必要があります。ペイロードコンテンツは任意の形式を使用できます。デバイスがペイロードを正しく解釈するように、ペイロードコンテンツタイプも指定することをお勧めします。

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

    コマンドを作成したら、コマンドの表示名と説明を更新できます。コマンドを使用する予定がなくなった場合は、非推奨としてマークしたり、アカウントからコマンドを完全に削除したりすることもできます。ペイロード情報を変更する場合は、新しいコマンドを作成し、新しいペイロードファイルをアップロードする必要があります。

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

コマンドワークフローを準備するには、ターゲットデバイスを選択し、コマンドを受信してレスポンスメッセージを発行する予約済み AWS IoT MQTTトピックを指定します。

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

    コマンドワークフローを準備するには、コマンドを受信するターゲットデバイスを選択し、指定されたアクションを実行します。ターゲットデバイスは、 AWS IoT レジストリに登録した AWS IoT モノでも、デバイスが登録されていない場合はMQTTクライアント ID を使用して指定することもできます AWS IoT。詳細については、「ターゲットデバイスの考慮事項」を参照してください。

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

    デバイスがコマンド実行を受信して更新を発行する前に、これらのアクションを実行するためのアクセス許可を付与するIAMポリシーを使用する必要があります。デバイスが AWS IoT モノとして登録されているか、MQTTクライアント ID として指定されているかに応じて使用できるサンプルポリシーの例については、「」を参照してくださいサンプルIAMポリシー

  3. MQTT 接続を確立する

    コマンド機能を使用するようにデバイスを準備するには、デバイスはまずメッセージブローカーに接続し、リクエストとレスポンスのトピックをサブスクライブする必要があります。デバイスは、 に接続 AWS IoT Core してメッセージブローカーとMQTTの接続を確立する iot:Connectアクションを実行できる必要があります。のデータプレーンエンドポイントを検索するには AWS アカウント、以下に示すように、 DescribeEndpointAPIまたは 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クライアントとして指定されているかclientに応じて、 thingまたは を使用します。

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

    注記

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

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

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

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

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

    コンソールの コマンドハブ AWS IoT から、またはアカウント固有のiot:JobsエンドポイントAPIでStartCommandExecutionデータプレーンを使用して、ターゲットデバイスでコマンド実行を開始します。は、デバイスがサブスクライブしている上記のコマンドリクエストトピックにペイロードメッセージAPIを発行します。

    注記

    コマンドがクラウドから送信されたときにデバイスがオフラインで、永MQTT続セッションを使用している場合、コマンドはメッセージブローカーで待機します。デバイスがタイムアウト時間前にオンラインに戻り、コマンドリクエストトピックをサブスクライブしている場合、デバイスはコマンドを処理して結果をコマンドレスポンストピックに発行できます。タイムアウト時間より前にデバイスがオンラインに戻らない場合、コマンドの実行はタイムアウトし、ペイロードメッセージは期限切れになり、メッセージブローカーによって破棄される可能性があります。

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

    デバイスはペイロードメッセージを受信し、コマンドを処理して指定されたアクションを実行し、 を使用してコマンド実行の結果を次のコマンドレスポンストピックに発行できるようになりましたUpdateCommandExecutionAPI。デバイスが応答の承諾および拒否トピックをサブスクライブした場合、応答がクラウドサービスによって承諾されたか拒否されたかを示すメッセージが表示されます。

    リクエストトピックで指定した方法に応じて、 <devices>はモノまたはクライアントのいずれかで、 は IoT モノの名前またはMQTTクライアント ID <DeviceID>になります。

    注記

    は、コマンドレスポンストピックCBORでのみ JSONまたは に<PayloadFormat>することができます。

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

    コマンド実行の結果を取得するには、 AWS IoT コンソールからコマンド履歴を表示するか、GetCommandExecutionコントロールプレーンAPIオペレーションを使用します。最新情報を取得するには、デバイスがコマンド実行結果をコマンドレスポンストピックに発行している必要があります。また、最後に更新された日時、実行結果、実行が完了した日時など、実行データに関する追加情報を取得することもできます。

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

コマンドイベントをサブスクライブして、コマンド実行のステータスが変更されたときに通知を受け取ることができます。次の手順では、コマンドイベントをサブスクライブして処理する方法を示します。

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

    コマンドイベントトピックをサブスクライブし、コマンド実行のステータスが変更されたときに通知を受け取ることができます。また、トピックルールを作成して、デバイスによって処理されたデータを、Amazon AWS Lambdaや SQS AWS Step Functions などのルールでサポートされている他の AWS IoT サービスにルーティングすることもできます。トピックルールは、 AWS IoT コンソールまたはCreateTopicRule AWS IoT Core コントロールプレーンAPIオペレーションを使用して作成できます。詳細については、「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 }