コマンド実行の開始とモニタリング - AWS IoT Core

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

コマンド実行の開始とモニタリング

コマンドリソースを作成したら、ターゲットデバイスでコマンド実行を開始できます。デバイスがコマンドの実行を開始すると、コマンド実行の結果の更新を開始し、ステータスの更新と結果情報をMQTT予約済みトピックに発行できます。その後、コマンド実行のステータスを取得し、アカウントの実行のステータスをモニタリングできます。

このセクションでは、 AWS IoT コンソールと の両方を使用してコマンドを起動およびモニタリングする方法について説明します AWS CLI。

コマンド実行を開始する

重要

お客様は、適用法に準拠して安全かつ安全にコマンドをデプロイする全責任を負います。

コマンドの実行を開始する前に、次のことを確認する必要があります。

  • AWS IoT 名前空間にコマンドを作成し、ペイロード情報を提供しました。コマンドの実行を開始すると、デバイスはペイロード内の指示を処理し、指定されたアクションを実行します。コマンドの作成の詳細については、「」を参照してくださいコマンドリソースを作成する

  • デバイスが コマンドMQTTの予約済みトピックにサブスクライブしています。コマンドの実行を開始すると、ペイロード情報が次の予約済みMQTTリクエストトピックに発行されます。

    この場合、 <devices>は IoT モノまたはMQTTクライアントのいずれかで、 <DeviceID>はモノの名前またはクライアント ID です。サポートされている <PayloadFormat>は JSONと ですCBOR。コマンドトピックの詳細については、「」を参照してくださいコマンドトピック

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

    <PayloadFormat> が JSONおよび でない場合CBOR、コマンドトピックの形式を次に示します。

    $aws/commands/<devices>/<DeviceID>/executions/+/request

コマンドを実行する場合は、コマンドを受け取るターゲットデバイスを指定し、指定された手順を実行する必要があります。ターゲットデバイスは、 AWS IoT モノでも、デバイスが AWS IoT レジストリに登録されていない場合はクライアント ID でもかまいません。コマンドペイロードを受け取ると、デバイスはコマンドの実行を開始し、指定されたアクションを実行できます。

AWS IoT モノ

コマンドのターゲットデバイスは、 AWS IoT モノレジストリに登録した AWS IoT モノにすることができます。のモノ AWS IoT を使用すると、デバイスの検索と管理が容易になります。

デバイスをモノとして登録するには、Connect デバイスページ AWS IoT から、または CreateThing を使用して にデバイスを接続しますAPI。 https://console.aws.amazon.com/iot/home#/connect-overviewコマンドを実行する既存のモノは、 AWS IoT コンソールの Thing Hub ページまたは DescribeThing を使用して見つけることができますAPI。デバイスを AWS IoT モノとして登録する方法については、「 レジストリでのモノの管理」を参照してください。

クライアント ID

デバイスが にモノとして登録されていない場合は AWS IoT、代わりにクライアント ID を使用できます。

クライアント ID は、デバイスまたはクライアントに割り当てる一意の識別子です。クライアント ID はMQTTプロトコルで定義され、英数字、アンダースコア、またはダッシュを含めることができます。が接続する各デバイスに一意である必要があります AWS IoT。

注記
  • デバイスが AWS IoT レジストリにモノとして登録されている場合、クライアント ID はモノの名前と同じにすることができます。

  • コマンド実行が特定のMQTTクライアント ID を対象とする場合、クライアント ID ベースのコマンドトピックからコマンドペイロードを受信するには、デバイスは同じクライアント ID AWS IoT を使用して に接続する必要があります。

クライアント ID は通常、デバイスが接続するときに使用できるMQTTクライアント ID です AWS IoT Core。この ID は、 によって特定のデバイスを識別し、接続とサブスクリプションを管理する AWS IoT ために使用されます。

タイムアウトは、デバイスがコマンド実行の結果を提供できる時間を秒単位で示します。

コマンド実行を作成すると、タイマーが開始されます。デバイスがオフラインになったか、タイムアウト期間内に実行結果を報告できなかった場合、コマンドの実行はタイムアウトし、実行ステータスは として報告されますTIMED_OUT

このフィールドはオプションであり、値を指定しない場合、デフォルトで 10 秒になります。タイムアウトを最大値の 12 時間に設定することもできます。

タイムアウト値とTIMED_OUT実行ステータス

タイムアウトは、クラウドとデバイスの両方で報告できます。

コマンドがデバイスに送信されると、タイマーが開始されます。上記のように、指定されたタイムアウト期間内にデバイスから応答を受信しなかった場合。この場合、クラウドはコマンド実行ステータスを に設定TIMED_OUTし、理由コードを に設定します$NO_RESPONSE_FROM_DEVICE

これは、次のいずれかのケースで発生する可能性があります。

  • コマンドの実行中にデバイスがオフラインになりました。

  • デバイスは、指定された期間内にコマンドの実行を完了できませんでした。

  • デバイスは、タイムアウト期間内に更新されたステータス情報を報告できませんでした。

この場合、 の実行ステータスTIMED_OUTがクラウドから報告されると、コマンドの実行は非ターミナルになります。デバイスは、ステータスを ターミナルステータス、、SUCCEEDEDFAILEDまたは のいずれかに上書きするレスポンスを発行できますREJECTED。コマンドの実行がターミナルになり、それ以降の更新は受け入れられなくなりました。

デバイスは、 コマンドの実行時にタイムアウトが発生したことを報告することで、クラウドによって開始されたTIMED_OUTステータスを更新することもできます。この場合、コマンドの実行ステータスは のままTIMED_OUTですが、statusReasonオブジェクトはデバイスによって報告された情報に基づいて更新されます。コマンドの実行がターミナルになり、それ以上の更新は受け入れられません。

永MQTT続セッションの使用

AWS IoT Device Management コマンド機能で使用する永MQTT続セッションを設定できます。この機能は、デバイスがオフラインになり、タイムアウト期間前にオンラインに戻ったときにデバイスがコマンドを受信し、指定された手順を実行するようにする場合などに特に便利です。

デフォルトでは、永MQTT続セッションの有効期限は 60 分に設定されています。コマンド実行タイムアウトがこの期間を超える値に設定されている場合、60 分以上実行されるコマンド実行はメッセージブローカーによって拒否され、失敗する可能性があります。60 分を超えるコマンドを実行するには、永続セッションの有効期限の引き上げをリクエストできます。

注記

永MQTT続セッション機能を正しく使用するには、クリーンスタートフラグがゼロに設定されていることを確認します。詳細については、「永MQTT続セッション」を参照してください。

コンソールからコマンドの実行を開始するには、 AWS IoT コンソールの コマンドハブページに移動し、次の手順を実行します。

  1. 作成したコマンドを実行するには、コマンドの実行を選択します。

  2. 作成したコマンド、ペイロードファイルと形式タイプ、予約済みMQTTトピックに関する情報を確認します。

  3. コマンドを実行するターゲットデバイスを指定します。デバイスが に登録されている場合は AWS IoT モノとして指定でき AWS IoT、デバイスがまだ登録されていない場合はクライアント ID を使用できます。詳細については、「ターゲットデバイスの考慮事項」を参照してください

  4. (オプション) コマンドのタイムアウト値を設定し、タイムアウトまでにコマンドを実行する期間を決定します。コマンドを 60 分以上実行する必要がある場合は、永MQTT続セッションの有効期限を長くする必要がある場合があります。詳細については、「コマンド実行タイムアウトに関する考慮事項」を参照してください。

  5. [コマンドの実行] を選択します。

StartCommandExecution HTTP データプレーンAPIオペレーションを使用してコマンド実行を開始します。API リクエストとレスポンスは、コマンド実行 ID と相関しています。デバイスがコマンドの実行を完了すると、コマンドレスポンストピックにメッセージを発行することで、ステータスと実行結果をクラウドに報告できます。カスタムレスポンスコードの場合、所有するアプリケーションコードはレスポンスメッセージを処理して結果を投稿できます AWS IoT。

デバイスがコマンドリクエストトピックにサブスクライブしている場合、 StartCommandExecutionAPIはペイロードメッセージをトピックに発行します。ペイロードは任意の形式を使用できます。詳細については、「コマンドペイロード」を参照してください。

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

ペイロード形式が JSONまたは でない場合CBOR、コマンドリクエストトピックの形式を次に示します。

$aws/commands/<devices>/<DeviceID>/executions/+/request

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 StartCommandExecution アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

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

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id など、 AWS アカウント 番号の 123456789012

  • command-id など、 AWS IoT コマンドの一意の識別子を持つ LockDoor。複数のコマンドを送信する場合は、IAMポリシーでこれらのコマンドを指定できます。

  • devices デバイスが AWS IoT モノとして登録されているか、MQTTクライアントとして指定されているかclientに応じて、 thingまたは を使用します。

  • device-id を AWS IoT thing-nameまたは で使用しますclient-id

{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

アカウント固有のデータプレーンエンドポイントを取得する

API コマンドを実行する前に、エンドポイントのアカウント固有のURLiot:Jobsエンドポイントを取得する必要があります。たとえば、次のコマンドを実行するとします。

aws iot describe-endpoint --endpoint-type iot:Jobs

以下のレスポンス例URLに示すように、アカウント固有のエンドポイントが返されます。

{ "endpointAddress": "<account-specific-prefix>.jobs.iot.<region>.amazonaws.com" }

コマンド実行の開始例 (AWS CLI)

次の例は、 コマンドを使用してstart-command-execution AWS CLI コマンドの実行を開始する方法を示しています。

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

  • <command-arn> を実行するコマンドARNの を使用します。この情報は、 create-command CLI コマンドのレスポンスから取得できます。例えば、ステアリングホイールモードを変更するための コマンドを実行する場合は、 を使用しますarn:aws:iot:region:account-id:command/SetComfortSteeringMode

  • <target-arn> をターゲットデバイスのモノに置き換えARNます。ターゲットデバイスは、コマンドを実行する IoT モノまたはMQTTクライアントです。たとえば、ターゲットデバイス に対して コマンドを実行する場合はmyRegisteredThing、 を使用しますarn:aws:iot:region:account-id:thing/myRegisteredThing

  • <endpoint-url> は、 で取得したアカウント固有のエンドポイントでアカウント固有のデータプレーンエンドポイントを取得する、プレフィックスは ですhttps://。例えば、https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com と指定します。

  • (オプション) StartCommandExecutionAPIオペレーションを実行するexecutionTimeoutSecondsときに、追加のパラメータ を指定することもできます。このオプションのフィールドは、デバイスがコマンドの実行を完了する必要がある時間を秒単位で指定します。デフォルトでは、値は 10 秒です。コマンドの実行ステータスが の場合CREATED、タイマーが開始されます。タイマーの有効期限が切れる前にコマンド実行結果を受信しない場合、ステータスは自動的に に変わりますTIMED_OUT

aws iot-jobs-data start-command-execution \ --command-arn <command-arn> \ --target-arn <target-arn> \ --endpoint <endpoint-url> \ --executionTimeoutSeconds 900

このコマンドを実行すると、コマンド実行 ID が返されます。この ID を使用して、コマンド実行ステータス、詳細、コマンド実行履歴をクエリできます。

注記

コマンドが廃止された場合、StartCommandExecutionAPIリクエストは検証例外で失敗します。このエラーを修正するには、まず UpdateCommand を使用してコマンドを復元してからAPI、 StartCommandExecutionリクエストを実行します。

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }

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

UpdateCommandExecution MQTT データプレーンAPIオペレーションを使用して、コマンド実行のステータスまたは結果を更新します。

注記

この を使用する前にAPI:

  • デバイスは MQTT接続を確立し、コマンドのリクエストとレスポンスのトピックをサブスクライブしている必要があります。詳細については、「高レベルのコマンドワークフロー」を参照してください。

  • StartCommandExecution API オペレーションを使用してこのコマンドをすでに実行している必要があります。

このAPIオペレーションを使用する前に、 IAMポリシーでデバイスがこれらのアクションを実行することを許可していることを確認してください。以下は、デバイスが アクションを実行することを許可するポリシーの例です。UpdateCommandExecution アクションを実行するアクセス許可をユーザーに付与するその他のサンプルIAMポリシーについては、「」を参照してください接続および公開ポリシーの例

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

  • Region など AWS リージョン、 で を使用しますap-south-1

  • AccountID など、 を AWS アカウント 番号に置き換えます123456789012

  • ThingName など、コマンド実行をターゲットとする AWS IoT モノの名前を に置き換えますmyRegisteredThing

  • commands-request-topic および AWS IoT コマンドリクエストおよびレスポンストピックcommands-response-topicの名前。詳細については、「高レベルのコマンドワークフロー」を参照してください。

MQTT クライアント ID のサンプルIAMポリシー

次のコードは、MQTTクライアント ID を使用するときのサンプルデバイスポリシーを示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

IoT モノのサンプルIAMポリシー

次のコードは、 モノを使用する AWS IoT ときのサンプルデバイスポリシーを示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

リクエストトピックでコマンド実行を受信すると、デバイスはコマンドを処理します。次に、 を使用して、コマンド実行のステータスと結果を次のレスポンストピックにUpdateCommandExecutionAPI更新します。

$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>

この例では、 <DeviceID>はターゲットデバイスの一意の識別子であり、 <execution-id>はターゲットデバイス上のコマンド実行の識別子です。は JSONまたは <PayloadFormat>にすることができますCBOR。

注記

デバイスを に登録していない場合は AWS IoT、モノの名前の代わりにクライアント ID を識別子として使用できます。

$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>

デバイスが実行ステータスの更新を報告しました

デバイスはAPI、 を使用して、コマンド実行に次のステータス更新をレポートできます。これらのステータスの詳細については、「」を参照してくださいコマンド実行ステータス

  • IN_PROGRESS: デバイスがコマンドの実行を開始すると、ステータスを に更新できますIN_PROGRESS

  • SUCCEEDED: デバイスがコマンドを正常に処理して実行を完了すると、デバイスは応答トピックに としてメッセージを発行できますSUCCEEDED

  • FAILED: デバイスがコマンドの実行に失敗した場合、レスポンストピックに というメッセージを発行できますFAILED

  • REJECTED: デバイスがコマンドの受け入れに失敗した場合、レスポンストピックに というメッセージを発行できますREJECTED

  • TIMED_OUT: コマンドの実行ステータスは、次のいずれかTIMED_OUTの理由で に変わる可能性があります。

    • コマンド実行の結果が受信されませんでした。これは、実行が指定された期間内に完了しなかったか、デバイスがレスポンストピックにステータス情報をパブリッシュできなかったために発生する可能性があります。

    • デバイスは、コマンドを実行しようとしたときにタイムアウトが発生したことを報告します。

TIMED_OUT ステータスの詳細については、「」を参照してくださいタイムアウト値とTIMED_OUT実行ステータス

を使用する際の考慮事項 UpdateCommandExecution API

以下は、 UpdateCommandExecution を使用する際の重要な考慮事項ですAPI。

  • デバイスはオプションの statusReason オブジェクトを使用できます。このオブジェクトを使用して、実行に関する追加情報を提供できます。デバイスがこのオブジェクトを提供する場合、 オブジェクトの reasonCodeフィールドは必須ですが、 reasonDescriptionフィールドはオプションです。

  • デバイスが statusReason オブジェクトを使用する場合、 はパターン を使用するreasonCode必要があり[A-Z0-9_-]+、長さは 64 文字以下です。を指定する場合はreasonDescription、長さが 1,024 文字を超えないようにしてください。新しい行などの制御文字以外の任意の文字を使用できます。

  • デバイスは、オプションの result オブジェクトを使用して、リモート関数呼び出しの戻り値など、コマンド実行の結果に関する情報を提供できます。を指定する場合はresult、少なくとも 1 つのエントリが必要です。

  • result フィールドでは、エントリをキーと値のペアとして指定します。エントリごとに、データ型情報を文字列、ブール値、またはバイナリとして指定する必要があります。文字列データ型はキー を使用しs、ブールデータ型はキー を使用しb、バイナリデータ型はキー を使用する必要がありますbin。これらのデータ型が小文字として記述されていることを確認する必要があります。

  • の実行中にエラーが発生した場合はAPI、Amazon UpdateCommandExecutionAWSIoTLogsV2ロググループでエラーを表示できます CloudWatch。ログ記録の有効化とログの表示については、「」を参照してくださいAWS IoT ログ記録の設定

UpdateCommandExecution API 例

次のコードは、デバイスが を使用して実行ステータスUpdateCommandExecutionAPIを報告する方法、ステータスに関する追加情報を提供する statusReasonフィールド、およびこの場合は自動車バッテリーの割合など、実行の結果に関する情報を提供する 結果フィールドの例を示しています。

{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }

コマンド実行を取得する

コマンドを実行したら、 AWS IoT コンソールおよび を使用してコマンド実行に関する情報を取得できます AWS CLI。以下の情報を取得できます。

注記

最新のコマンド実行ステータスを取得するには、以下で説明するようにUpdateCommandExecutionMQTTAPI、 を使用してレスポンストピックにステータス情報をパブリッシュする必要があります。デバイスがこのトピックに発行されるまで、 GetCommandExecutionAPIはステータスを CREATEDまたは として報告しますTIMED_OUT

作成する各コマンドの実行には、次のものが含まれます。

  • 実行 ID。コマンド実行の一意の識別子です。

  • コマンド実行のステータス。ターゲットデバイスで コマンドを実行すると、コマンドの実行は CREATED状態になります。その後、以下で説明するように、他のコマンド実行ステータスに移行できます。

  • コマンド実行の結果

  • 実行が作成された一意のコマンド ID とターゲットデバイス。

  • コマンド実行が作成された時刻を示す開始日

次のいずれかの方法を使用して、コンソールからコマンド実行を取得できます。

  • コマンドハブページから

    AWS IoT コンソールの コマンドハブページに移動し、以下の手順を実行します。

    1. ターゲットデバイスで実行を作成したコマンドを選択します。

    2. コマンドの詳細ページの コマンド履歴タブに、作成した実行が表示されます。情報を取得する実行を選択します。

    3. デバイスが を使用してUpdateCommandExecutionAPI結果情報を提供した場合、この情報はこのページの結果タブで確認できます。

  • モノのハブページから

    コマンドの実行時にターゲットデバイスとして AWS IoT モノを選択した場合は、モノのハブページから実行の詳細を表示できます。

    1. AWS IoT コンソールの Thing Hub ページに移動し、コマンド実行を作成したモノを選択します。

    2. モノの詳細ページのコマンド履歴に、作成した実行が表示されます。情報を取得する実行を選択します。

    3. デバイスが を使用してUpdateCommandExecutionAPI結果情報を提供した場合、この情報はこのページの結果タブで確認できます。

GetCommandExecution AWS IoT Core コントロールプレーンHTTPAPIオペレーションを使用して、コマンド実行に関する情報を取得します。StartCommandExecution API オペレーションを使用してこのコマンドをすでに実行している必要があります。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 GetCommandExecution アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

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

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id を などの AWS アカウント 番号に置き換えます123456789012

  • command-id など、一意の AWS IoT コマンド識別子を持つ LockDoor

  • devices デバイスが AWS IoT モノとして登録されているか、MQTTクライアントとして指定されているかclientに応じて、 thingまたは を使用します。

  • device-id を AWS IoT thing-nameまたは で使用しますclient-id

{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

コマンド実行例を取得する

次の例は、 コマンドを使用して実行されたstart-command-execution AWS CLI コマンドに関する情報を取得する方法を示しています。次の例は、ステアリングホイールモードをオフにするために実行されたコマンドに関する情報を取得する方法を示しています。

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

  • <execution-id> 情報を取得するコマンド実行の識別子を持つ 。

  • <target-arn> を、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) に置き換えます。この情報は、 start-command-execution CLI コマンドのレスポンスから取得できます。

  • オプションで、デバイスが を使用して実行結果UpdateCommandExectionAPIを提供した場合、 GetCommandExecutionAPIを使用してコマンド実行結果を GetCommandExecution のレスポンスに含めるかどうかを指定できますAPI。

aws iot get-command-execution --execution-id <execution-id> \ --target-arn <target-arn> \ --include-result

このコマンドを実行すると、コマンド実行ARNの 、実行ステータス、実行を開始した時刻、完了した時刻に関する情報を含むレスポンスが生成されます。また、ステータスに関する追加情報を含む statusReason オブジェクトも提供します。さまざまなステータスとステータスの理由の詳細については、「」を参照してくださいコマンド実行ステータス

次のコードは、APIリクエストからのレスポンスの例を示しています。

注記

実行レスポンスの completedAtフィールドは、デバイスがターミナルステータスをクラウドに報告する時刻に対応します。TIMED_OUT ステータスの場合、このフィールドはデバイスがタイムアウトをレポートしたときにのみ設定されます。TIMED_OUT ステータスがクラウドによって設定されている場合、TIMED_OUTステータスは更新されません。タイムアウト動作の詳細については、「」を参照してくださいコマンド実行タイムアウトに関する考慮事項

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }

MQTT テストクライアントを使用したコマンドの更新の表示

MQTT テストクライアントを使用して、 コマンド機能を使用するMQTTときに でのメッセージ交換を表示できます。デバイスが とMQTTの接続を確立したら AWS IoT、コマンドを作成してペイロードを指定し、デバイスで実行できます。コマンドを実行すると、デバイスがコマンドMQTTの予約済みリクエストトピックをサブスクライブしている場合、このトピックに発行されたペイロードメッセージが表示されます。

その後、デバイスはペイロードの指示を受け取り、IoT デバイスで指定されたオペレーションを実行します。次に、 を使用してコマンド実行結果とステータス情報を command. AWS IoT Device Management listens MQTTの予約済みレスポンストピックにUpdateCommandExecutionAPI発行し、そのレスポンストピックを更新して、更新された情報を保存し、 AWS CloudTrail と Amazon にログを発行します CloudWatch。その後、コンソールまたは を使用して、最新のコマンド実行情報を取得できますGetCommandExecutionAPI。

次の手順は、MQTTテストクライアントを使用してメッセージを観察する方法を示しています。

  1. AWS IoT コンソールでMQTTテストクライアントを開きます。

  2. Subscribe タブで、次のトピックを入力し、Subscribe を選択します。ここで、 <thingId>は登録したデバイスのモノの名前です AWS IoT。

    注記

    デバイスのモノの名前は、 AWS IoT コンソールの Thing Hub ページから確認できます。デバイスをモノとして登録していない場合は、Connect デバイスページ AWS IoT から に接続するときにデバイスを登録できます。

    $aws/commands/things/<thingId>/executions/+/request
  3. (オプション) Subscribe タブで、次のトピックを入力して Subscribe を選択することもできます。

    $aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
  4. コマンドの実行を開始すると、デバイスがサブスクライブしているリクエストトピック を使用して、メッセージペイロードがデバイスに送信されます$aws/commands/things/<thingId>/executions/+/request。MQTT テストクライアントには、デバイスがコマンドを処理する手順を含むコマンドペイロードが表示されます。

  5. デバイスがコマンドの実行を開始すると、以下のコマンドMQTTの予約済みレスポンストピックにステータス更新を発行できます。

    $aws/commands/<devices>/<device-id>/executions/<executionId>/response/json

    例えば、車の AC をオンにして温度を目的の値に減らすために実行したコマンドを考えてみましょう。以下は、車両がコマンドの実行に失敗したことを示すレスポンストピックに発行したサンプルメッセージJSONを示しています。

    { "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }

    この場合、車のバッテリーを充電し、コマンドを再度実行できます。

でコマンド実行を一覧表示する AWS アカウント

コマンドを実行したら、 AWS IoT コンソールおよび を使用してコマンド実行に関する情報を取得できます AWS CLI。以下の情報を取得できます。

  • 実行 ID。コマンド実行の一意の識別子です。

  • コマンド実行のステータス。ターゲットデバイスで コマンドを実行すると、コマンドの実行は CREATED状態になります。その後、以下で説明するように、他のコマンド実行ステータスに移行できます。

  • 実行が作成された一意のコマンド ID とターゲットデバイス。

  • コマンド実行が作成された時刻を示す開始日

次のいずれかの方法を使用して、コンソールからすべてのコマンド実行を表示できます。

  • コマンドハブページから

    AWS IoT コンソールの コマンドハブページに移動し、以下の手順を実行します。

    1. ターゲットデバイスで実行を作成したコマンドを選択します。

    2. コマンドの詳細ページで、コマンド履歴タブに移動すると、作成した実行のリストが表示されます。

  • モノのハブページから

    コマンドの実行時に AWS IoT モノをターゲットデバイスとして選択し、1 つのデバイスに対して複数のコマンド実行を作成した場合は、モノのハブページからデバイスの実行を表示できます。

    1. AWS IoT コンソールの Thing Hub ページに移動し、実行を作成したモノを選択します。

    2. モノの詳細ページのコマンド履歴に、デバイス用に作成した実行のリストが表示されます。

ListCommandExecutions AWS IoT Core コントロールプレーンHTTPAPIオペレーションを使用して、アカウント内のすべてのコマンド実行を一覧表示します。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 ListCommandExecutions アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

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

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id を などの AWS アカウント 番号に置き換えます123456789012

  • command-id など、一意の AWS IoT コマンド識別子を持つ LockDoor

{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }

コマンド実行の一覧表示の例

次の例は、 でコマンド実行を一覧表示する方法を示しています AWS アカウント。

コマンドを実行するときは、 を使用して特定のデバイス用に作成されたコマンド実行のみを表示するようにリストをフィルタリングするかtargetArn、 を使用して指定された特定のコマンドの実行のみを表示するようにフィルタリングするかを指定する必要がありますcommandArn

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

  • <target-arn> など、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) を持つ arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f

  • <target-arn> など、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) を持つ arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f

  • <after> を、作成された実行を一覧表示する時間に置き換えます。たとえば、 です2024-11-01T03:00

aws iot list-command-executions \ --target-arn <target-arn> \ --started-time-filter '{after=<after>}' \ --sort-order "ASCENDING"

このコマンドを実行すると、作成したコマンド実行のリスト、実行が開始された時刻、完了した時刻を含むレスポンスが生成されます。また、ステータス情報と、ステータスに関する追加情報を含む statusReason オブジェクトも提供します。

{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }

さまざまなステータスとステータスの理由の詳細については、「」を参照してくださいコマンド実行ステータス

コマンド実行を削除する

コマンド実行が不要になった場合は、アカウントから完全に削除できます。

注記
  • コマンド実行は、、、 SUCCEEDED FAILEDなどの終了ステータスになった場合にのみ削除できますREJECTED

  • このオペレーションは、 または AWS IoT Core APIを使用してのみ実行できます AWS CLI。コンソールからは利用できません。

このAPIオペレーションを使用する前に、 IAMポリシーでデバイスがこれらのアクションを実行することを許可していることを確認してください。以下は、デバイスが アクションを実行することを許可するポリシーの例です。

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

  • Region など AWS リージョン、 で を使用しますap-south-1

  • AccountID など、 を AWS アカウント 番号に置き換えます123456789012

  • CommandID は、実行を削除するコマンドの識別子に置き換えます。

  • devices デバイスが AWS IoT モノとして登録されているか、MQTTクライアントとして指定されているかclientに応じて、 thingまたは を使用します。

  • device-id を AWS IoT thing-nameまたは で使用しますclient-id

{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

次の例は、 コマンドを使用してdelete-command AWS CLI コマンドを削除する方法を示しています。アプリケーションに応じて、 を、削除するコマンド実行の識別子<execution-id>に置き換え、 をターゲットデバイスの ARN <target-arn>に置き換えます。

aws iot delete-command-execution \ --execution-id <execution-id> \ --target-arn <target-arn>

API リクエストが成功すると、コマンドの実行によってステータスコード 200 が生成されます。を使用してGetCommandExecutionAPI、コマンド実行がアカウントに存在しなくなったことを確認できます。